I have a little bit of a problem in understanding the function map with
typed/racket.
My problem starts with an application of map which in normal racket is very
straight forward:
> (map car '(("Eins" "One" "Un") ("Zwei" "Dos" "Two" "Deux") ("Drei" "Tres"
"Trois")))
'("Eins" "Zwei" "Drei")
If map is applied this way in typed/racket it yields an error:
Type Checker: Polymorphic function `map' could not be applied to arguments:
Domains: (-> a b ... b c) (Listof a) (Listof b) ... b
(-> a c) (Pairof a (Listof a))
Arguments: (All (a b) (case-> (-> (Pairof a b) a) (-> (Listof a) a))) (List
(List String String String) (List String String String String) (List String
String String))
There is an easy way to get around this by using for/list with some type
annotations.
> (let ([ml '(("Eins" "One" "Un") ("Zwei" "Dos" "Two" "Deux") ("Drei"
"Tres" "Trois"))])
(for/list : (Listof String) ([l : (Listof String) ml]) (car l)))
- : (Listof String)
'("Eins" "Zwei" "Drei")
But this leaves me a little bit irritated. The function map has the
following type in typed/racket:
> map
- : (All (c a b ...)
(case->
(-> (-> a c) (Pairof a (Listof a)) (Pairof c (Listof c)))
(-> (-> a b ... b c) (Listof a) (Listof b) ... b (Listof c))))
#<procedure:map>
So in my code here I believed the type system would pick the first case
where map is a function that takes two arguments a function with the domain
of a and the range of c and as second argument a not emtpy list of type a.
I thought the type placeholder a could in this case be (Listof String) so
(Pairof a (Listof a)) translates to (Pairof String (Listof String)) which
is the same as a nonempty (Listof String).
But apparantly the type system has a different view and is unable to apply
map to the supplied arguments.
So I do need some help to get a better understanding of the type system.
Thanks to everyone who reads this.
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/e3e829f5-39c3-4e24-bd08-0b037645fbcan%40googlegroups.com.