[Haskell-beginners] understanding function signature alignement

Tony Morris tonymorris at gmail.com
Thu Aug 9 08:36:50 UTC 2018


The (a) and (b) are different in each case. Let's rewrite it and rename
the variables to emphasise the difference.

meh :: Monad m => [a] -> (a -> m b) -> m [b]

flipType :: (Monad k) => [k x] -> k [x]

id :: q -> q

This means that id can accept any argument type, as long as it returns
the same argument type. For example:

id :: m b -> m b

When it is used like that, then (a) turns into (m b).

Similarly, meh can have this type:

meh :: Monad m => [m b] -> (m b -> m b) -> m [b]

All I did was specialise the (a) type-variable, which can be anything,
as long as they all change. Now it is clear that when I put id into the
second argument position, I get the type [m b] -> m [b]


On 09/08/18 18:32, simkestuff at gmail.com wrote:
> Hello,
>
> I'm going through Haskellbook and while doing some exercises I'm stack
> with trying to explain myself how types matches in this examples:
>
> meh :: Monad m => [a] -> (a -> m b) -> m [b]
> meh [] _      = pure []
> meh (x:xs) f = (:) <$> f x <*> meh xs f
>
>
> flipType :: (Monad m) => [m a] -> m [a]
> flipType xs = meh xs id
>
> What puzzles me is how id function which is of type (a->a) can fit
> here where meh function is requesting function of type (a->m b)?
>
> The function (a -> m b) is function that says give me anything and I
> will give back anything wrapped up into some monad structure; id ( a
> -> a) on other hand says give me anything and I will return it back to
> you. So, to me, the first function is somehow more restricted than id
> function because it puts limitation on what output of that function
> can be and I'm struggling to understand how id function can fit here.
>
> I hope someone can help me how to reason about these functions here?
>
> thanks
>
>
>
>
> _______________________________________________
> 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/20180809/9a54af95/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180809/9a54af95/attachment.sig>


More information about the Beginners mailing list