Re:Applicative WTF?
by pinjo on Wednesday October 24, 2018 @10:48AM
(#18292873)
An example of this is the two possible applicative instance of list. One is based on the monad instance and does a cross product if presented with two lists. The other zips its arguments. It is the more interesting one imho:
Difference of behaviour:
[ Parent
| on HN ]
Yes, though that definition results in:
pure id <*> ZipList [x, y, z] == ZipList [x]
and thus breaks one of the Applicative laws: pure id <*> v == v
The standard ZipList definition is `pure a = ZipList (repeat a)` (an infinite list).The issue with defining a Monad instance for ZList is that mapping the function on the right of (>>=) over the ZList on the left gets you a ZList of `ZList b`, with no meaningful way to zip these ZLists together.