Next Atypical Types 59

Type Inference Example 3 Continued

         map :: (a -> b, [a]) -> [b]

Normally map is defined as a curried function

Instead of this:

        map(f, []) = []
        map(f, h:t) = f(h) : map(f, t)

We write this:

        map f []    = []
        map f (h:t) = f(h) : map f t

And the type is:

        map :: (a -> b) -> [a] -> [b]

Then for example:

        length :: [a] -> Integer
        map length ["I", "like", "pie"]
            [1, 4, 3]
        length_all = map length
        
        length_all :: [[a]] -> [Integer]
        length_all ["I", "like", "pie"]
            [1, 4, 3]


Next Copyright © 1999,2008 Mark Dominus