[Haskell-cafe] Sequence differences

Ketil Malde ketil at malde.org
Fri Apr 10 15:52:09 EDT 2009

michael rice <nowgate at yahoo.com> writes:

> map :: (a -> b) -> [a] -> [b]    <==  I'm assuming this is correct

This is the type of 'map', yes.  Btw, ou can check types in GHCi with the
:i command.

> s f ls 
> seems much like
> map f ls
> but instead looks like   
> s :: (a -> a -> a) -> [a] -> [a]

If you look at the definition:

>> s f [] = []
>> s f [x] = [x]
>> s f l = [ a f b | (a,b) <- zip (init l) (tail l)]

You'll notice that the second clause, namely

   s f [x] = [x]

produces the second parameter [x] (of type [a]) as its output, and
thus the types must be the same as well. 

Also (assuming it is 'f a b' and not 'a f b' in the list
comprehension), f is applied to two parameters, so it'll have to be
of type (x -> y -> z), and since the two input parameters come from
the originating list, x and y must be the same as a, and since we have
seen the result list also has the same type, z must be the same as a,
too.  Thus f must have type (a -> a -> a).  Unclear? Clear? Operating

If I haven't seen further, it is by standing in the footprints of giants

More information about the Haskell-Cafe mailing list