[Haskell-cafe] Deriving
wren ng thornton
wren at freegeek.org
Tue Dec 2 22:28:50 EST 2008
Daryoush Mehrtash wrote:
> What happens when a type adds driving such as:
>
> newtype SupplyT s m a = SupplyT (StateT [s] m a)
> deriving (Functor, Monad, MonadTrans, MonadIO)
>
>
> Two questions:
>
> How does the deriving implement the instance?
With GeneralizedNewtypeDeriving, since newtypes are just a
reinterpretation of the underlying type, the deriving clause just uses
the instance for the underlying type (massaging it with the
wrapping/unwrapping functions for the newtype). The primary use for this
is for defining a newtype on monad transformer stacks, for which it
succeeds excellently. However, if the semantics of your newtype are
different than the underlying type w.r.t. the type class, then it's not
so good.
For the more basic kind of deriving clause, the compiler knows about how
to create generic instances for obvious things, e.g. the compiler can
derive the obvious Show instance by doing introspection on the source
code. However, these derivations are limited to classes with an obvious
implementation based solely on the structure of the type definition.
--
Live well,
~wren
More information about the Haskell-Cafe
mailing list