
On 01/16/2012 03:26 PM, Evan Laforge wrote:
Often when I define some type that wraps something else, I find myself writing a function like the following:
newtype Thing = Thing X liftThing f (Thing x) = Thing (f x)
It's like a Functor, but I can't make it an instance because Functor requires that the type be parametric. So I've been using type families to make a kind of "0 argument functor":
class Functor0 a where type Elem a :: * fmap0 :: (Elem a -> Elem a) -> a -> a
instance Functor0 Thing where type Elem Thing = X fmap0 = liftThing
Is there a name for this? A better way to do it?
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ? http://hackage.haskell.org/packages/archive/newtype/0.2/doc/html/Control-New... ?
-- Tony Morris http://tmorris.net/