
I will look at bimap too, sounds usefull, thanks! Sasa Bogicevic { phone: +381606006200 }
On Jan 9, 2017, at 17:40, David McBride
wrote: There is also a BiFunctor in base which allows you to fmap over the last two variables in your type.
bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
And it conveniently has methods to map over only one at a time, if you want.
first :: (a -> b) -> p a c -> p b c second :: (b -> c) -> p a b -> p a c
This makes sense for types like Either a b, where sometimes you might want to fmap over one or both values.
However, going beyond two would cause the number of options for mapping over such a type to blow up. At that point it is better to just use your own simple function to map over your own type.
On Mon, Jan 9, 2017 at 11:26 AM, sasa bogicevic
wrote: Good explanation! Thanks I understand it now Sasa Bogicevic { phone: +381606006200 }
On Jan 9, 2017, at 17:00, Francesco Ariis
wrote: On Mon, Jan 09, 2017 at 04:41:39PM +0100, sasa bogicevic wrote: Hi all, Can someone explain to me why exactly when defining the Functor instance for type that has polimorphic parameter constraint I am not allowed to put that parameter in definition. So basically:
data Four a b c d = Four a b c d
instance Functor (Four a b c) where <-- why can't I specify also param d here ?? fmap f (Four a b c d) = Four a b c (f d)
Hello Sasa, think for a moment about functors you already know: Maybe a, [a], (Either e) a, etc. In every case there is an `a` and something preceding a (we can call it `f`). Now let's look at the class-definition of functor.
class Functor f where -- etc. etc.
Here you have it, `f`; so for the instance you should only place the `f`-part in there, like
instance Functor Maybe where -- not Maybe a! instance Functor (Four a b c) where -- without the a too!
It makes sense as `f` will stay the same and `a` will be mapped over (and change). Indeed you can very this with ghci (using :k Functor, :k Maybe etc.), but after a while it sinks in.
Does this help? _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners