[Haskell-beginners] map type explanation

David McBride toad3k at gmail.com
Fri Dec 18 18:42:22 UTC 2020

They are not parameters, they are the types of the parameters.

In this case a can really be anything, Int, Char, whatever, so long as the
function takes a single argument of that type and the list that is given
has elements of that same type.
It is the same for b, it doesn't matter what b ends up being, so long as
when you call that function the function's return value is compatible with
the element type of the list that you intended to return from the entire

You can mess with it yourself in ghci to see how type inference works.

>:t show
:show :: Show a => a -> String
>:t map show
map show :: Show a => [a] -> [String]
> :t flip map [1::Int]
> flip map [1::Int] :: (Int -> b) -> [b]

On Fri, Dec 18, 2020 at 1:31 PM Lawrence Bottorff <borgauf at gmail.com> wrote:

> I'm looking at this
> ghci> :type map
> map :: (a -> b) -> [a] -> [b]
> and wondering what the (a -> b) part is about. map takes a function and
> applies it to an incoming list. Good. Understood. I'm guessing that the
> whole Haskell type declaration idea is based on currying, and I do
> understand how the (a -> b) part "takes" an incoming list, [a] and
> produces the [b] output. Also, I don't understand a and b very well
> either. Typically, a is just a generic variable, then b is another
> generic variable not necessarily the same as a. But how are they being
> used in this type declaration?
> LB
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20201218/2919abd3/attachment.html>

More information about the Beginners mailing list