I know of counterexamples that show why the “obvious” instances don’t work. One nice one is here:
https://www.reddit.com/r/haskell/comments/nfyvy/instance_monad_ziplist_where/c38x9q9?utm_source=share&utm_medium=web2x
But I don’t know of a simple full proof of why no such instance is possible. My guess would be that we should consider the action of the operations on lengths of lists, and show that the requirements for monad and ziplist conflict.
-gOn Jun 4, 2020, 11:57 AM -0400, David Feuer <david.feuer@gmail.com>, wrote:_______________________________________________
To add documentation, we need an explanation of *why* it's impossible.
_______________________________________________On Thu, Jun 4, 2020, 11:35 AM chessai . <chessai1996@gmail.com> wrote:Agreed, that would be a great addition.
On Thu, Jun 4, 2020, 8:31 AM Simon Jakobi <simon.jakobi@googlemail.com> wrote:This sounds worth documenting though.
Dannyu, would you be interested in updating the ZipList docs to say
why it doesn't have a Monad instance?
Cheers,
Simon
Am Do., 4. Juni 2020 um 17:21 Uhr schrieb chessai . <chessai1996@gmail.com>:
>
> David is right. This can't happen, unfortunately
>
> On Thu, Jun 4, 2020, 12:48 AM David Feuer <david.feuer@gmail.com> wrote:
>>
>> I don't remember why right now, but it's moderately well-known that there is no possible Monad instance compatible with the Applicative instance for ZipList. See the answers to https://stackoverflow.com/questions/6463058/help-on-writing-the-colist-monad-exercise-from-an-idioms-intro-paper by pigworker (Conor McBride) and C. A. McCann.
>>
>> On Thu, Jun 4, 2020, 2:53 AM Dannyu NDos <ndospark320@gmail.com> wrote:
>>>
>>> instance Monad ZipList where
>>> ZipList [] >>= _ = ZipList []
>>> ZipList (x:xs) >>= f = ZipList $ do
>>> let ZipList y' = f x
>>> guard (not (null y'))
>>> let ZipList ys = ZipList xs >>= ZipList . join . maybeToList . fmap snd . uncons . getZipList . f
>>> head y' : ys
>>>
>>> instance MonadFail ZipList where
>>> fail _ = empty
>>>
>>> instance MonadPlus ZipList
>>> _______________________________________________
>>> Libraries mailing list
>>> Libraries@haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
> _______________________________________________
> Libraries mailing list
> Libraries@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries