<div dir="ltr"><div>Interestingly, neither NEL nor OneStep behave the same as `Product Identity []`:</div><div><br></div><div><div><font face="monospace, monospace">λ> let a = Pair (Identity 0) [1,2]</font></div><div><font face="monospace, monospace">λ> let b = Pair (Identity 3) [4,5]</font></div><div><font face="monospace, monospace">λ> (,) <$> a <*> b</font></div><div><font face="monospace, monospace">Pair (Identity (0,3)) [(1,4),(1,5),(2,4),(2,5)]</font></div></div><div><br></div><div>So many applicatives!</div><div></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Matt Parsons</div></div></div></div>
<br><div class="gmail_quote">On Tue, Jan 31, 2017 at 3:41 PM, Christopher Allen <span dir="ltr"><<a href="mailto:cma@bitemyapp.com" target="_blank">cma@bitemyapp.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ah right, I didn't stare hard enough at the Applicative.<br>
<br>
If I squint a bit at the results of your Applicative instance it seems<br>
similar to the difference between []'s Applicative and the ZipList<br>
Applicative, except a little crossed up. Sure you already identified<br>
that, sorry I don't have more to offer here.<br>
<br>
On Tue, Jan 31, 2017 at 2:36 PM, Joachim Breitner<br>
<div class="HOEnZb"><div class="h5"><<a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a>> wrote:<br>
> Hi,<br>
><br>
> good idea, but no. The datatypes are superficially equivalent, but the<br>
> Applicative instance differs:<br>
><br>
> With NonEmpty’s instance:<br>
><br>
>> (,) <$> 0 :| [1,2] <*> 3 :| [4,5]<br>
> (0,3) :| [(0,4),(0,5),(1,3),(1,4),(1,5)<wbr>,(2,3),(2,4),(2,5)]<br>
><br>
> with my instance:<br>
><br>
>> (,) <$> 0 :| [1,2] <*> 3 :| [4,5]<br>
> (0,3) :| [(1,3),(2,3),(0,4),(0,5)]<br>
><br>
> Greetings,<br>
> Joachim<br>
><br>
> Am Dienstag, den 31.01.2017, 14:24 -0600 schrieb Christopher Allen:<br>
>> NonEmpty?<br>
>><br>
>> On Tue, Jan 31, 2017 at 2:22 PM, Joachim Breitner<br>
>> <<a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a>> wrote:<br>
>> > Hi,<br>
>> ><br>
>> > I recently wrote this applicative functor:<br>
>> ><br>
>> >     data OneStep a = OneStep a [a]<br>
>> ><br>
>> >     instance Functor OneStep where<br>
>> >         fmap f (OneStep o s) = OneStep (f o) (map f s)<br>
>> ><br>
>> >     instance Applicative OneStep where<br>
>> >         pure x = OneStep x []<br>
>> >         OneStep f fs <*> OneStep x xs = OneStep (f x) (map ($x) fs<br>
>> > ++ map f xs)<br>
>> ><br>
>> >     takeOneStep :: OneStep t -> [t]<br>
>> >     takeOneStep (OneStep _ xs) = xs<br>
>> ><br>
>> > This was useful in the context of writing a shrink for QuickCheck,<br>
>> > as<br>
>> > discussed at <a href="http://stackoverflow.com/a/41944525/946226" rel="noreferrer" target="_blank">http://stackoverflow.com/a/<wbr>41944525/946226</a>.<br>
>> ><br>
>> > Now I wonder: Does this functor have a proper name? Does it already<br>
>> > exist in the libraries somewhere? Should it?<br>
>> ><br>
>> > Greetings,<br>
>> > Joachim<br>
>> ><br>
>> > --<br>
>> > Joachim “nomeata” Breitner<br>
>> >   <a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a> • <a href="https://www.joachim-breitner.de/" rel="noreferrer" target="_blank">https://www.joachim-breitner.<wbr>de/</a><br>
>> >   XMPP: <a href="mailto:nomeata@joachim-breitner.de">nomeata@joachim-breitner.de</a> • OpenPGP-Key: 0xF0FBF51F<br>
>> >   Debian Developer: <a href="mailto:nomeata@debian.org">nomeata@debian.org</a><br>
>> > ______________________________<wbr>_________________<br>
>> > Haskell-Cafe mailing list<br>
>> > To (un)subscribe, modify options or view archives go to:<br>
>> > <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
>> > Only members subscribed via the mailman list are allowed to post.<br>
>><br>
>><br>
>><br>
> --<br>
> Joachim “nomeata” Breitner<br>
>   <a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a> • <a href="https://www.joachim-breitner.de/" rel="noreferrer" target="_blank">https://www.joachim-breitner.<wbr>de/</a><br>
>   XMPP: <a href="mailto:nomeata@joachim-breitner.de">nomeata@joachim-breitner.de</a> • OpenPGP-Key: 0xF0FBF51F<br>
>   Debian Developer: <a href="mailto:nomeata@debian.org">nomeata@debian.org</a><br>
><br>
> ______________________________<wbr>_________________<br>
> Haskell-Cafe mailing list<br>
> To (un)subscribe, modify options or view archives go to:<br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
> Only members subscribed via the mailman list are allowed to post.<br>
<br>
<br>
<br>
--<br>
</div></div><span class="im HOEnZb">Chris Allen<br>
Currently working on <a href="http://haskellbook.com" rel="noreferrer" target="_blank">http://haskellbook.com</a><br>
</span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</div></div></blockquote></div><br></div>