Thankyou Tony, that works perfectly. I think my biggest problem was that I didn't even know you could write
```
newtype (Compose g f) a = O (g (f a))
```
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 = "
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
```
I'm certainly going to spend some time examining Control.Compose. I think my Haskell brain bending just went up a level, (sadly, not my actual brain.)
Thanks again,
Julian.