typed-racket
                                
                                 typed-racket copied to clipboard
                                
                                    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.