typed-racket icon indicating copy to clipboard operation
typed-racket copied to clipboard

Terrible error message for incorrect use of `make-input-port

Open samth opened this issue 4 years ago • 1 comments

[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]

samth avatar May 04 '21 19:05 samth

Things to improve here:

  1. Better pretty printing of the expected type.
  2. Have some simplifications of these type that the printer knows about (eg (Rec x (Evtof x))).
  3. Have a better way of printing optional arguments than just listing all of them either present or absent.
  4. When the provided number of arguments is wrong, print less information.
  5. Print only arities that fit with the number of arguments provided.

Other possibilities:

  1. Use names in some way, as the documentation does.
  2. Change the actual API to have keywords so that the type is easier to understand.

samth avatar May 04 '21 19:05 samth