On Mon, 2007-12-17 at 13:51 +0000, Bayley, Alistair wrote: > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] 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 > > and > > > data A a = A a > > According to: > http://www.haskell.org/onlinereport/decls.html#sect4.2.3 > 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 > interpretation?
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 Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe