<div dir="auto"><div dir="auto">Here's my thoughts on why it's impossible:</div><div dir="auto"><br></div>ZipList is basically ReaderT Natural Maybe with the requirement that<div dir="auto">  f m === Nothing -> forall n > m. f n === Nothing</div><div dir="auto"><br></div><div dir="auto">The Applicative and Alternative instances are derived straightforwardly in this manner and satisfy the requirements, but there is no way to verify the requirement for the Monad instance. I'm pretty sure that this:</div><div dir="auto">  ZipList [0..] >>= (\n -> if even n then pure (div n 2) else empty)</div><div dir="auto">would produce nonsense no matter the definition of (>>=).</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jun 4, 2020, 10:57 David Feuer <<a href="mailto:david.feuer@gmail.com">david.feuer@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">To add documentation, we need an explanation of *why* it's impossible.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jun 4, 2020, 11:35 AM chessai . <<a href="mailto:chessai1996@gmail.com" target="_blank" rel="noreferrer">chessai1996@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">Agreed, that would be a great addition.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jun 4, 2020, 8:31 AM Simon Jakobi <<a href="mailto:simon.jakobi@googlemail.com" rel="noreferrer noreferrer" target="_blank">simon.jakobi@googlemail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This sounds worth documenting though.<br>
<br>
Dannyu, would you be interested in updating the ZipList docs to say<br>
why it doesn't have a Monad instance?<br>
<br>
Cheers,<br>
Simon<br>
<br>
Am Do., 4. Juni 2020 um 17:21 Uhr schrieb chessai . <<a href="mailto:chessai1996@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">chessai1996@gmail.com</a>>:<br>
><br>
> David is right. This can't happen, unfortunately<br>
><br>
> On Thu, Jun 4, 2020, 12:48 AM David Feuer <<a href="mailto:david.feuer@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">david.feuer@gmail.com</a>> wrote:<br>
>><br>
>> 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 <a href="https://stackoverflow.com/questions/6463058/help-on-writing-the-colist-monad-exercise-from-an-idioms-intro-paper" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">https://stackoverflow.com/questions/6463058/help-on-writing-the-colist-monad-exercise-from-an-idioms-intro-paper</a> by pigworker (Conor McBride) and C. A. McCann.<br>
>><br>
>> On Thu, Jun 4, 2020, 2:53 AM Dannyu NDos <<a href="mailto:ndospark320@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">ndospark320@gmail.com</a>> wrote:<br>
>>><br>
>>> instance Monad ZipList where<br>
>>>     ZipList [] >>= _ = ZipList []<br>
>>>     ZipList (x:xs) >>= f = ZipList $ do<br>
>>>         let ZipList y' = f x<br>
>>>         guard (not (null y'))<br>
>>>         let ZipList ys = ZipList xs >>= ZipList . join . maybeToList . fmap snd . uncons . getZipList . f<br>
>>>         head y' : ys<br>
>>><br>
>>> instance MonadFail ZipList where<br>
>>>     fail _ = empty<br>
>>><br>
>>> instance MonadPlus ZipList<br>
>>> _______________________________________________<br>
>>> Libraries mailing list<br>
>>> <a href="mailto:Libraries@haskell.org" rel="noreferrer noreferrer noreferrer" target="_blank">Libraries@haskell.org</a><br>
>>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
>><br>
>> _______________________________________________<br>
>> Libraries mailing list<br>
>> <a href="mailto:Libraries@haskell.org" rel="noreferrer noreferrer noreferrer" target="_blank">Libraries@haskell.org</a><br>
>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
><br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" rel="noreferrer noreferrer noreferrer" target="_blank">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>
</blockquote></div>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>