No neither do I….I think we can drop
that bit….I think I got confused about it for a second…..not unsurprisingly.
From:
Brent Yorgey [mailto:byorgey@gmail.com]
Sent: 17 December 2007 15:38
To: Nicholls, Mark
Cc: Thomas Davie; Haskell Cafe
Subject: Re: [Haskell-cafe] OOP'er
with (hopefully) trivial questions.....
On Dec 17, 2007 8:04 AM,
Nicholls, Mark <Nicholls.Mark@mtvne.com>
wrote:
No that's fine....its all
as clear as mud!......but that's not your
fault.
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.
I'm sure that's wrong, but it's a good as I've got at the moment.
And to a degree it's all upside down....what Haskell thinks are
types...I think are "singnatures" and what Haskell thinks is a type
"class" I think of as a type.....it's not going to be easy.
I think you've got it pretty well! The one quibble I would have with
your recap is that I'm not sure what you mean by saying that "data"
creates a new type 'based on "->" and "("'. Other
than that it seems pretty spot-on. =)
-Brent