On Mon, 2007-12-17 at 13:51 +0000, Bayley, Alistair wrote:
> > From: haskell-cafe-bounces@xxxxxxxxxxx
> > [mailto:haskell-cafe-bounces@xxxxxxxxxxx] On Behalf Of Nicholls, Mark
> > To recap...
> > "type" introduces a synonym for another type, no new type is
> > created....it's for readabilities sake.
> > "Newtype" introduces an isomorphic copy of an existing type...but
> > doesn't copy it's type class membership...the types are
> > disjoint/distinct but isomorphic (thus only 1 constructor param).
> > "data" introduces a new type, and defines a composition of existing
> > types to create a new one based on "->" and "(".
> > "class" introduces a constraint that any types declaring themselves to
> > be a member of this class...that functions must exist to satisfy the
> > constraint.
> As an aside, I was wondering exactly what the differences are between
> newtype and data i.e. between
> > newtype A a = A a
> > data A a = A a
> According to:
> newtype is, umm, stricter than data i.e. newtype A undefined =
> undefined, but data A undefined = A undefined. Other than that, newtype
> just seems to be an optimization hint. Is that a more-or-less correct
More less than more. There is a context that can distinguish a newtype
from a data type. This is explained on this wiki page that addresses
exactly this question. http://www.haskell.org/haskellwiki/Newtype
Haskell-Cafe mailing list