[Haskell-beginners] A little explanation!

Kyle Murphy orclev at gmail.com
Wed Apr 30 15:53:29 UTC 2014


Near as I can tell, this is basically having to do with partial application
and the order of precedence for the (.) operator. A great way to look at
this stuff is using the :t command in GHCi and checking out the types
involved.

Prelude> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c

Prelude> :t last
last :: [a] -> a

Prelude> :t (last .)
(last .) :: (a -> [c]) -> a -> c

Looking back at the type for (.) and plugging in "[a]" in place of "b" and
"a" in place of "c" we get:
([b] -> b) -> (a -> [b]) -> a -> b

and since "last" takes the place of the first function we can reduce that
to:
(a -> [b]) -> a -> b

GHCi used "c" where we used "b" but you can clearly see the signatures are
identical other than that detail.

What we're left with is, (last .) is used to take a function from some type
"a" that returns a list of type "b", and a "a" value, and then returns the
last value from that list of "b" types.


-R. Kyle Murphy
--
Curiosity was framed, Ignorance killed the cat.


On Wed, Apr 30, 2014 at 11:29 AM, Gilberto Melfe <gilbertomelfe at gmail.com>wrote:

> Hello everybody !
>
> Could someone explain me exactly how this function works?
>
> elementAt_w'pf = (last .) . take . (+ 1)
>
> It's a posted solution to: 99 Haskell problems, problem 3.
>
> I'm having trouble with the "(last .) ." thing!
>
> Hope someone can help!
>
> Thank You!
>
> Gilberto
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20140430/4649c3b2/attachment.html>


More information about the Beginners mailing list