On Fri, Sep 3, 2010 at 12:01 PM, C. McCann <span dir="ltr">&lt;<a href="mailto:cam@uptoisomorphism.net">cam@uptoisomorphism.net</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><div></div><div class="h5">On Fri, Sep 3, 2010 at 11:47 AM, John Lato &lt;<a href="mailto:jwlato@gmail.com">jwlato@gmail.com</a>&gt; wrote:<br>
&gt; On Fri, Sep 3, 2010 at 1:29 PM, Ivan Lazar Miljenovic &lt;<a href="mailto:ivan.miljenovic@gmail.com">ivan.miljenovic@gmail.com</a>&gt; wrote:<br>
&gt;&gt; On 3 September 2010 22:23, John Lato &lt;<a href="mailto:jwlato@gmail.com">jwlato@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Do you have a kind * implementation of Foldable?  I&#39;d be interested in<br>
&gt;&gt; &gt; seeing it, because I was unable to create a usable implementation (based<br>
&gt;&gt; &gt; upon the RMonad scheme) on my last attempt.<br>
&gt;&gt;<br>
&gt;&gt; I was going to make it a subset of Foldable: fold, foldr, foldl, etc.<br>
&gt;<br>
&gt; So you don&#39;t have a working implementation yet?  I ended up thinking this is<br>
&gt; impossible, although I don&#39;t remember the reasoning that led me to that<br>
&gt; conclusion (and I could very well be wrong).<br>
&gt; I would suggest that you check this before going too far along the<br>
&gt; restricted-monad path.<br>
<br>
</div></div>This sounds odd to me. An RMonad-style version of Foldable is straightforward:<br>
<br>
    class RFoldable t where<br>
        rfold :: Control.RMonad.Suitable t a =&gt; (a -&gt; b -&gt; b) -&gt; b -&gt; t a -&gt; b<br>
<br>
    instance RFoldable Data.Set.Set where<br>
        rfold = Data.Set.fold<br>
<br>
A similar class for types of kind * is also straightforward:<br>
<br>
    class Reduce t where<br>
        type Elem t<br>
        reduce :: (Elem t -&gt; r -&gt; r) -&gt; r -&gt; t -&gt; r<br>
<br>
    instance Reduce Data.ByteString.ByteString where<br>
        type Elem Data.ByteString.ByteString = Word8<br>
        reduce = Data.ByteString.foldr<br>
<br>
Both seem to work as I&#39;d expect. Am I missing something? Foldable is<br>
pretty trivial--perhaps it was Traversable that you found problematic?<br></blockquote><div><br>This certainly does seem to work just fine in ghc-6.12, but not 6.10.4.  I wonder if that was the source of my problems last time.<br>
<br>John<br></div></div>