<p dir="ltr">Lists! The finite kind.</p>
<p dir="ltr">This could mean Seq for instance.</p>
<div class="gmail_quote">On Nov 30, 2012 9:53 AM, &quot;Brent Yorgey&quot; &lt;<a href="mailto:byorgey@seas.upenn.edu">byorgey@seas.upenn.edu</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Fri, Nov 30, 2012 at 02:33:54AM +0100, Ben Franksen wrote:<br>
&gt; Brent Yorgey wrote:<br>
&gt; &gt; On Thu, Nov 29, 2012 at 03:52:58AM +0100, Ben Franksen wrote:<br>
&gt; &gt;&gt; Tony Morris wrote:<br>
&gt; &gt;&gt; &gt; As a side note, I think a direct superclass of Functor for Monad is not<br>
&gt; &gt;&gt; &gt; a good idea, just sayin&#39;<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; class Functor f where<br>
&gt; &gt;&gt; &gt;   fmap :: (a -&gt; b) -&gt; f a -&gt; f b<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; class Functor f =&gt; Apply f where<br>
&gt; &gt;&gt; &gt;   (&lt;*&gt;) :: f (a -&gt; b) -&gt; f a -&gt; f b<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; class Apply f =&gt; Bind f where<br>
&gt; &gt;&gt; &gt;   (=&lt;&lt;) :: (a -&gt; f b) -&gt; f a -&gt; f b<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; class Apply f =&gt; Applicative f where<br>
&gt; &gt;&gt; &gt;   unit :: a -&gt; f a<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; class (Applicative f, Bind f) =&gt; Monad f where<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; Same goes for Comonad (e.g. [] has (=&lt;&lt;) but not counit)<br>
&gt; &gt;&gt; &gt; ... and again for Monoid, Category, I could go on...<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi Tony<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; even though I dismissed your mentioning this on the Haskell&#39; list, I do<br>
&gt; have<br>
&gt; &gt;&gt; to admit that the proposal has a certain elegance. However, before I buy<br>
&gt; &gt;&gt; into this scheme, I&#39;d like to see some striking examples for types with<br>
&gt; &gt;&gt; natural (or at least useful) Apply and Bind instances that cannot be made<br>
&gt; &gt;&gt; Applicative resp. Monad.<br>
&gt; &gt;<br>
&gt; &gt; Try writing an Applicative instances for (Data.Map.Map k).  It can&#39;t<br>
&gt; &gt; be done, but the Apply instance is (I would argue) both natural and<br>
&gt; useful.<br>
&gt;<br>
&gt; I see. So there is one example. Are there more? I&#39;d like to get a feeling<br>
&gt; for the abstraction and this is hard if there is only a single example.<br>
<br>
Any data type which admits structures of arbitrary but *only finite*<br>
size has a natural &quot;zippy&quot; Apply instance but no Applicative (since<br>
pure would have to be an infinite structure).  The Map instance I<br>
mentioned above falls in this category.  Though I guess I&#39;m having<br>
trouble coming up with other examples, but I&#39;m sure some exist.  Maybe<br>
Edward knows of other examples.<br>
<br>
-Brent<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>