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.

Reply via email to