<div dir="ltr"><div>I once used `traverse optional` combined with `catMaybes`. For example:</div><div><br></div>Prelude Control.Applicative Data.Maybe> catMaybes <$> traverse optional [[1,2],[3]]<br><div>[[1,3],[1],[2,3],[2],[3],[]]</div><div><br></div><div>This is totally out of order. I think a more natural output is:</div><div><br></div><div>[[],[3],[1],[1,3],[2],[2,3]]<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2019년 9월 1일 (일) 오후 11:23, Edward Kmett <<a href="mailto:ekmett@gmail.com">ekmett@gmail.com</a>>님이 작성:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">It would also render the combinator useless for its normal purpose.<div><br></div><div>optional is used mostly to try to run a parser and to either succeed with its  result (wrapped in a Just) or _failing that_ to just  return Nothing and carry on.</div><div><br></div><div>For monads like parsec, the first parse is the one that gets returned, so the definition isn't symmetric in behavior.</div><div><br></div><div>-Edward</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Sep 1, 2019 at 2:28 AM Dannyu NDos <<a href="mailto:ndospark320@gmail.com" target="_blank">ndospark320@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">The current 'one or none' definition breaks the order of elements.<div dir="auto"><br></div><div dir="auto">It is more Ord-friendly to define it as 'none or one'.</div></div>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>
</blockquote></div>