
On Fri, Jan 2, 2015 at 11:28 PM, Julian Birch
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