typed-racket
typed-racket copied to clipboard
Terrible error message for incorrect use of `make-input-port
[samth@homer:~/.../ChezScheme/ta6le/mats (toom3) racket-8.0] r -I typed/racket
Welcome to Racket v8.0 [cs].
> (make-input-port)
; readline-input:1:0: Type Checker: No function domains matched in function
; application:
; Domains: Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False) (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False) Any) EOF
; Exact-Nonnegative-Integer Input-Port x))) EOF Exact-Nonnegative-Integer))
; (-> Bytes Nonnegative-Integer (U (Rec x (Evtof x)) False) (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False) (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False) Any)
; (Evtof Any) EOF Exact-Nonnegative-Integer False)) (-> Any) (U (-> (Rec x
; (Evtof x))) False) (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any)
; Any) False) (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False))) False)
; (-> Any) (U (-> (U Exact-Positive-Integer False)) Exact-Positive-Integer
; False Port) (U (case-> (-> (U 'block 'none) Any) (-> (U 'block 'none
; False))) False)
; Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False)
; (U Exact-Positive-Integer False) (U Exact-Nonnegative-Integer
; False) Any) EOF Exact-Nonnegative-Integer Input-Port x))) EOF
; Exact-Nonnegative-Integer)) (-> Bytes Nonnegative-Integer (U (Rec
; x (Evtof x)) False) (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Evtof Any) EOF
; Exact-Nonnegative-Integer False)) (-> Any) (U (-> (Rec x (Evtof
; x))) False) (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any)
; Any) False) (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any) (U (-> (U Exact-Positive-Integer False))
; Exact-Positive-Integer False Port)
; Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False)
; (U Exact-Positive-Integer False) (U Exact-Nonnegative-Integer
; False) Any) EOF Exact-Nonnegative-Integer Input-Port x))) EOF
; Exact-Nonnegative-Integer)) (-> Bytes Nonnegative-Integer (U (Rec
; x (Evtof x)) False) (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Evtof Any) EOF
; Exact-Nonnegative-Integer False)) (-> Any) (U (-> (Rec x (Evtof
; x))) False) (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any)
; Any) False) (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any)
; Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False)
; (U Exact-Positive-Integer False) (U Exact-Nonnegative-Integer
; False) Any) EOF Exact-Nonnegative-Integer Input-Port x))) EOF
; Exact-Nonnegative-Integer)) (-> Bytes Nonnegative-Integer (U (Rec
; x (Evtof x)) False) (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Evtof Any) EOF
; Exact-Nonnegative-Integer False)) (-> Any) (U (-> (Rec x (Evtof
; x))) False) (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any)
; Any) False) (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False)
; Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False)
; (U Exact-Positive-Integer False) (U Exact-Nonnegative-Integer
; False) Any) EOF Exact-Nonnegative-Integer Input-Port x))) EOF
; Exact-Nonnegative-Integer)) (-> Bytes Nonnegative-Integer (U (Rec
; x (Evtof x)) False) (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Evtof Any) EOF
; Exact-Nonnegative-Integer False)) (-> Any) (U (-> (Rec x (Evtof
; x))) False) (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any)
; Any) False)
; Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False)
; (U Exact-Positive-Integer False) (U Exact-Nonnegative-Integer
; False) Any) EOF Exact-Nonnegative-Integer Input-Port x))) EOF
; Exact-Nonnegative-Integer)) (-> Bytes Nonnegative-Integer (U (Rec
; x (Evtof x)) False) (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Evtof Any) EOF
; Exact-Nonnegative-Integer False)) (-> Any) (U (-> (Rec x (Evtof
; x))) False)
; Any (-> Bytes (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Rec x (Evtof (U (-> (U
; Exact-Positive-Integer False) (U Exact-Nonnegative-Integer False)
; (U Exact-Positive-Integer False) (U Exact-Nonnegative-Integer
; False) Any) EOF Exact-Nonnegative-Integer Input-Port x))) EOF
; Exact-Nonnegative-Integer)) (-> Bytes Nonnegative-Integer (U (Rec
; x (Evtof x)) False) (U (-> (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer False)
; (U Exact-Nonnegative-Integer False) Any) (Evtof Any) EOF
; Exact-Nonnegative-Integer False)) (-> Any)
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; False False (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any) (U (-> (U Exact-Positive-Integer False))
; Exact-Positive-Integer False Port) (U (case-> (-> (U 'block 'none)
; Any) (-> (U 'block 'none False))) False)
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; False False (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any) (U (-> (U Exact-Positive-Integer False))
; Exact-Positive-Integer False Port)
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; False False (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any)
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; False False (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False)
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; False False
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; False
; Any (-> Bytes (U (Rec x (Evtof (U EOF Exact-Nonnegative-Integer
; Input-Port x))) EOF Exact-Nonnegative-Integer)) False (-> Any)
; Any Input-Port Input-Port (-> Any) (U (-> (Rec x (Evtof x))) False)
; (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any) Any) False)
; (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any) (U (-> (U Exact-Positive-Integer False))
; Exact-Positive-Integer False Port) (U (case-> (-> (U 'block 'none)
; Any) (-> (U 'block 'none False))) False)
; Any Input-Port Input-Port (-> Any) (U (-> (Rec x (Evtof x))) False)
; (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any) Any) False)
; (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any) (U (-> (U Exact-Positive-Integer False))
; Exact-Positive-Integer False Port)
; Any Input-Port Input-Port (-> Any) (U (-> (Rec x (Evtof x))) False)
; (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any) Any) False)
; (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False) (-> Any)
; Any Input-Port Input-Port (-> Any) (U (-> (Rec x (Evtof x))) False)
; (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any) Any) False)
; (U (-> (values (U Exact-Positive-Integer False) (U
; Exact-Nonnegative-Integer False) (U Exact-Positive-Integer
; False))) False)
; Any Input-Port Input-Port (-> Any) (U (-> (Rec x (Evtof x))) False)
; (U (-> Positive-Integer (Rec x (Evtof x)) (Evtof Any) Any) False)
; Any Input-Port Input-Port (-> Any) (U (-> (Rec x (Evtof x))) False)
; Any Input-Port Input-Port (-> Any)
; Arguments:
; in: (make-input-port)
; [,bt for context]
Things to improve here:
- Better pretty printing of the expected type.
- Have some simplifications of these type that the printer knows about (eg
(Rec x (Evtof x))). - Have a better way of printing optional arguments than just listing all of them either present or absent.
- When the provided number of arguments is wrong, print less information.
- Print only arities that fit with the number of arguments provided.
Other possibilities:
- Use names in some way, as the documentation does.
- Change the actual API to have keywords so that the type is easier to understand.