How is the calculation of types in Haskell -
lets say
flip :: (a->b->c) ->b->a->c const ::d->e->d type of (flip const) be
a=d,b=e,c=d in
b->a->c so type be
e->d->d but (map take) its
[int]->[[a]]->[[a]] so didn't understand how ghci 1 calculated. understood [[a]]->[[a]] why , how [int] ?
edit: example if we'd write in ghci
:t flip const return b->c->c and ghci calculate did.
but
map :: (a->b)->[a]->[b] take :: int->[c]->[c] so why map take
[int]->[[a]->[a]] why [int] how did ghci calculate that
you should copy , paste types see, not re-type them question. reason saw wrong. type map take is:
map take :: [int] -> [[a] -> [a]] in other words, unification works such:
:t map map :: (a -> b) -> [a] -> [b] :t take take :: int -> [c] -> [c] so when applying take first argument map a ~ int , b ~ [c] -> [c] (notice function). performing these replacements in map type , applying first argument:
map take :: [a] -> [b] (for specific 'a' , 'b') -- recall ~ int map take :: [int] -> [b] (for specific 'b') -- recall b ~ [c] -> [c] map take :: [int] -> [[c] -> [c]] yay, map take expect. function operates on lists of ints , results in list of functions take number of elements start of list.
Comments
Post a Comment