Am Dienstag, den 08.12.2009, 23:25 +0200 schrieb Vitaliy Akimov: > Hi John, > > I don't know if this is useful for you, but these are instances of > Cofunctor's comap. For example if we use TypeCompose package we have: > > rebox f = unFlip . cofmap f . Flip > > The rest are also Cofunctors. There are a few options. You can either > specify instances or use type combinators from category-extras or > TypeCompose packages. Basically (a -> a -> b) is curried composition > of diagonal Functor from Bifunctor (,) and Cofunctor (Flip (->) a) > etc.
You can also define them recursively: rebox0 :: (a -> b) -> c -> c rebox0 _ x = x reboxN :: ((a -> b) -> d -> e) -> (a -> b) -> (b -> d) -> a -> e reboxN reboxM un re = reboxM un . re . un rebox1 :: (a -> b) -> (b -> c) -> a -> c rebox1 = reboxN rebox0 rebox2 :: (a -> b) -> (b -> b -> c) -> a -> a -> c rebox2 = reboxN rebox1 rebox3 :: (a -> b) -> (b -> b -> b -> c) -> a -> a -> a -> c rebox3 = reboxN rebox2 rebox4 = reboxN rebox3 rebox5 = reboxN rebox4 _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
