Tôi cố gắng để xác định loại chú thích cho các chức năng sau đây trong Typed vợt:Đại diện cho hàm EOF -> False, A -> A ∀ A ≠ EOF trong vợt đã nhập?
(define (neof x)
(if (eof-object? x) #f x))
Rời nó bỏ chú thích cho các loại:
(Any -> Any)
Sử dụng loại này tạo ra một lỗi:
(: neof (All (A) (case->
(EOF -> False)
(A -> A : #:+ (! EOF))))
expected: A
given: False
in: #f
Điều này có lẽ là vì người ta có thể để A = EOF
và sau đó chúng tôi nhận được EOF -> EOF
.
Loại (: neof (All (A) A -> (U A False) #:- (U EOF False)))
, trong khi không rõ ràng như trên, cũng cung cấp cho các lỗi:
mismatch in filter
expected: (Top | Bot)
given: ((! (U False EOF) @ x) | ((U False EOF) @ x))
in: (if (eof-object? x) #f x)
Mục tiêu của tôi là để có một chức năng mà tôi có thể áp dụng cho bất kỳ đầu ra từ một cổng một có được một trong hai False
hoặc giá trị từ cổng. Bây giờ tôi đang xem xét lại nhu cầu này, vì tôi đã thổi quá nhiều thời gian để tìm ra loại hình này.
Để hoàn chỉnh, tôi cũng đã cố gắng định nghĩa này của neof
:.
(define/match (neof x)
[((? eof-object?)) #f]
[((? (compose not eof-object?))) x])
(Cũng với mô hình thứ hai là _
, nhưng điều đó không mã hóa cùng một lượng thông tin loại Tại thời điểm này tôi cố gắng xoa dịu bộ kiểm tra kiểu hơn bất kỳ thứ gì).
Vì vậy: làm thế nào tôi có thể đại diện cho loại neof
?
Câu trả lời của bạn có vẻ tốt, vì vậy tôi thực sự hy vọng. Thật không may, đây là kết quả: 'Loại Trình kiểm tra: loại không phù hợp; không khớp trong bộ lọc dự kiến: ((! EOF @ x) | Bot) \ n cho: ((! (U Sai EOF) @ x) | ((U Sai EOF) @ x)) \ n trong: (if (eof-object? x) #fx) ' (\ n được thêm bởi tôi, chúng có dòng mới không có chú thích>.>) –
@JDavidSmith Hmm, bạn nói đúng, nó không gõ cho tôi trên vợt 6.1.1. Typed Racket hiện đang phát triển khá nặng, do đó, đây là một cái gì đó mà chỉ có vẻ typecheck trên các bức ảnh chụp. Bạn có thể tải xuống [snapshot build] (http: //pre.racket-lang.org/installers /) nếu bạn muốn — chúng thường khá ổn định. Nếu không, bạn có thể phải chờ đến khi bản phát hành tiếp theo. –
@JDavidSmith Nếu bạn loại bỏ trường hợp '#: -', mặc dù, nó sẽ đánh máy trên vợt 6.1.1. –