[Haskell-beginners] Foldable of Foldable
Julian Birch
julian.birch at gmail.com
Fri Jan 2 17:32:31 UTC 2015
Ah! That also works. I think I was a bit confused originally, not putting
enough parameter on the left and not enough parens on the right. Being able
to read Conal's code made all the difference. (Oh, and it should have been
"flip $ foldr f".)
J
On 2 January 2015 at 16:59, Kim-Ee Yeoh <ky3 at atamo.com> wrote:
> On Fri, Jan 2, 2015 at 11:28 PM, Julian Birch <julian.birch at gmail.com>
> wrote:
>
> It's logical, but I couldn't figure it out and none of the web pages I
>> could find mentioned it (and the compiler just complains if you try
>> "newtype Compose g f a = "
>
>
> Whatever's on the right of = got eaten by them gremlins, but
>
> newtype (Compose g f) a = O (g (f a))
>
> is equivalent to
>
> newtype Compose g f a = O (g (f a))
>
> Try it. Application is left-associative at the type-level just like
> value-level.
>
>
>
>
>> Also, is the Functor declaration really necessary? Seems like you can
>> write
>>
>> ```
>> instance (Foldable f1, Foldable f2) => Foldable (Compose f1 f2) where
>> foldr f start (O list) = foldr g start list
>> where g = flip . foldr f
>>
>
> Looks to me the case too.
>
> For the record, here's what's in Conal's TypeCompose 0.9.10:
>
> -- These next two instances are based on suggestions from Creighton Hogg: instance (Foldable g, Foldable f, Functor g) => Foldable (g :. f) where -- foldMap f = fold . fmap (foldMap f) . unO foldMap f = foldMap (foldMap f) . unO -- fold (O gfa) = fold (fold <$> gfa) -- fold = fold . fmap fold . unO fold = foldMap fold . unO -- I could let fold default
>
>
> -- Kim-Ee
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20150102/0bc749a5/attachment-0001.html>
More information about the Beginners
mailing list