Algebraic types and `objects'

S.J.Thompson S.J.Thompson@ukc.ac.uk
Thu, 6 Sep 2001 09:18:35 +0100 (BST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-999764315=:3622
Content-Type: TEXT/PLAIN; charset=US-ASCII


To follow up Cagdas Ozgenc's message of Wednesday, I have attached
a series of files which show a gradual transformation (or refactoring)
of an algebraic type of shapes into a Shape type, built using type classes
and existential types, which more corresponds to an OO approach.

Hope this is useful.

Simon

---559023410-851401618-999764315=:3622
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Shape1.hs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.33.0109060918350.3622@myrtle.ukc.ac.uk>
Content-Description: 
Content-Disposition: attachment; filename="Shape1.hs"

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tCVNoYXBlIGV4YW1wbGUs
IGZyb20gSGFza2VsbCBjcmFmdCwgQ2ggMTQNCi0tIA0KLS0gCTIxIEp1bmUg
MjAwMQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbW9kdWxlIFNo
YXBlMSB3aGVyZQ0KDQoNCi0tIEEgc2hhcGUgaW4gYSBzaW1wbGUgZ2VvbWV0
cmljYWwgcHJvZ3JhbSBpcyBlaXRoZXIgYSBjaXJjbGUgb3IgYQ0KLS0gcmVj
dGFuZ2xlLiBUaGVzZSBhbHRlcm5hdGl2ZXMgYXJlIGdpdmVuIGJ5IHRoZSB0
eXBlDQoNCmRhdGEgU2hhcGUgPSBDaXJjbGUgRmxvYXQgfA0KICAgICAgICAg
ICAgIFJlY3RhbmdsZSBGbG9hdCBGbG9hdA0KDQpzaGFwZTEgPSBDaXJjbGUg
My4wDQpzaGFwZTIgPSBSZWN0YW5nbGUgNDUuOSA4Ny42DQoNCi0tIFBhdHRl
cm4gbWF0Y2hpbmcgYWxsb3dzIHVzIHRvIGRlZmluZSBmdW5jdGlvbnMgYnkg
Y2FzZXMsIGFzIGluLA0KDQppc1JvdW5kIDo6IFNoYXBlIC0+IEJvb2wNCmlz
Um91bmQgKENpcmNsZSBfKSAgICAgID0gVHJ1ZQ0KaXNSb3VuZCAoUmVjdGFu
Z2xlIF8gXykgPSBGYWxzZQ0KDQotLSBhbmQgYWxzbyBsZXRzIHVzIHVzZSB0
aGUgY29tcG9uZW50cyBvZiB0aGUgZWxlbWVudHM6DQoNCmFyZWEgOjogU2hh
cGUgLT4gRmxvYXQNCmFyZWEgKENpcmNsZSByKSAgICAgID0gcGkqcipyDQph
cmVhIChSZWN0YW5nbGUgaCB3KSA9IGgqdw0KDQpwZXJpbWV0ZXIgOjogU2hh
cGUgLT4gRmxvYXQNCnBlcmltZXRlciAoQ2lyY2xlIHIpICAgICAgPSAyKnBp
KnINCnBlcmltZXRlciAoUmVjdGFuZ2xlIGggdykgPSAyKihoK3cpDQoNCg0K
DQo=
---559023410-851401618-999764315=:3622
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Shape2.hs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.33.0109060918351.3622@myrtle.ukc.ac.uk>
Content-Description: 
Content-Disposition: attachment; filename="Shape2.hs"

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tCVNoYXBlIGV4YW1wbGUs
IGZyb20gSGFza2VsbCBjcmFmdCwgQ2ggMTQNCi0tCUFkZGVkIHRyaWFuZ2xl
IGNvbnN0cnVjdG9yIHRvIFNoYXBlMQ0KLS0gDQotLSAJMjEgSnVuZSAyMDAx
DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQptb2R1bGUgU2hhcGUy
IHdoZXJlDQoNCg0KLS0gQSBzaGFwZSBpbiBhIHNpbXBsZSBnZW9tZXRyaWNh
bCBwcm9ncmFtIGlzIGVpdGhlciBhIGNpcmNsZSBvciBhDQotLSByZWN0YW5n
bGUuIFRoZXNlIGFsdGVybmF0aXZlcyBhcmUgZ2l2ZW4gYnkgdGhlIHR5cGUN
Cg0KZGF0YSBTaGFwZSA9IENpcmNsZSBGbG9hdCB8DQogICAgICAgICAgICAg
UmVjdGFuZ2xlIEZsb2F0IEZsb2F0IHwNCgkgICAgIFRyaWFuZ2xlIEZsb2F0
IEZsb2F0IEZsb2F0CQkJLS08PDw8DQoNCnNoYXBlMSA9IENpcmNsZSAzLjAN
CnNoYXBlMiA9IFJlY3RhbmdsZSA0NS45IDg3LjYNCg0KLS0gUGF0dGVybiBt
YXRjaGluZyBhbGxvd3MgdXMgdG8gZGVmaW5lIGZ1bmN0aW9ucyBieSBjYXNl
cywgYXMgaW4sDQoNCmlzUm91bmQgOjogU2hhcGUgLT4gQm9vbA0KaXNSb3Vu
ZCAoQ2lyY2xlIF8pICAgICAgPSBUcnVlDQppc1JvdW5kIChSZWN0YW5nbGUg
XyBfKSA9IEZhbHNlDQppc1JvdW5kIChUcmlhbmdsZSBfIF8gXykgPSBGYWxz
ZQkJCS0tPDw8PA0KDQotLSBhbmQgYWxzbyBsZXRzIHVzIHVzZSB0aGUgY29t
cG9uZW50cyBvZiB0aGUgZWxlbWVudHM6DQoNCmFyZWEgOjogU2hhcGUgLT4g
RmxvYXQNCmFyZWEgKENpcmNsZSByKSAgICAgID0gcGkqcipyDQphcmVhIChS
ZWN0YW5nbGUgaCB3KSA9IGgqdw0KYXJlYSAoVHJpYW5nbGUgeCB5IHopID0g
c3FydChzKihzLXgpKihzLXkpKihzLXopKQktLTw8PDwNCgkJCXdoZXJlIHMg
PSAoeCt5K3opLzIJCS0tPDw8PA0KDQpwZXJpbWV0ZXIgOjogU2hhcGUgLT4g
RmxvYXQNCnBlcmltZXRlciAoQ2lyY2xlIHIpICAgICAgPSAyKnBpKnINCnBl
cmltZXRlciAoUmVjdGFuZ2xlIGggdykgPSAyKihoK3cpDQpwZXJpbWV0ZXIg
KFRyaWFuZ2xlIHggeSB6KSA9IHgreSt6CQkJLS08PDw8DQoNCg0K
---559023410-851401618-999764315=:3622
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Shape3.hs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.33.0109060918352.3622@myrtle.ukc.ac.uk>
Content-Description: 
Content-Disposition: attachment; filename="Shape3.hs"

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tCVNoYXBlIGV4YW1wbGUs
IGZyb20gSGFza2VsbCBjcmFmdCwgQ2ggMTQNCi0tCURpZmZlcmVudCB0eXBl
cyBmb3IgZWFjaCBzb3J0IG9mIHNoYXBlOiBlYWNoIGluc3RhbmNlDQotLQlv
ZiB0aGUgU2hhcGUgdHlwZSBjbGFzcy4gQmFzZWQgb24gU2hhcGUyLg0KLS0g
DQotLSAJMjEgSnVuZSAyMDAxDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KDQptb2R1bGUgU2hhcGUzIHdoZXJlDQoNCg0KLS0gVGhlcmUgaXMgbm8g
bG9uZ2VyIGEgdHlwZSBvZiBTaGFwZXMsIHJhdGhlciB0aGVyZSBhcmUgb3Bl
cmF0aW9ucw0KLS0gd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gZWFjaCBzb3J0
IG9mIHNoYXBlOyBjb2xsZWN0IHRoZXNlIGluIGEgDQotLSBjbGFzcyBkZWNs
YXJhdGlvbiwgcmVwbGFjaW5nIHRoZSBTaGFwZSB0eXBlIGJ5IHRoZSB0eXBl
IHZhcmlhYmxlDQotLSBhIGJvdW5kIGluIHRoZSBjbGFzcyBkZWNsYXJhdG9p
b24uDQoNCg0KY2xhc3MgU2hhcGUgYSB3aGVyZQ0KICBpc1JvdW5kIDo6IGEg
LT4gQm9vbA0KICBhcmVhIDo6IGEgLT4gRmxvYXQNCiAgcGVyaW1ldGVyIDo6
IGEgLT4gRmxvYXQNCg0KLS0gUHVsbCB0aGUgc2luZ2xlIGRhdGEgdHlwZSBp
bnRvIHRocmVlIHNlcGFyYXRlIHR5cGVzLi4uDQoNCmRhdGEgQ2lyY2xlICAg
ID0gQ2lyY2xlIEZsb2F0IA0KZGF0YSBSZWN0YW5nbGUgPSBSZWN0YW5nbGUg
RmxvYXQgRmxvYXQgDQpkYXRhIFRyaWFuZ2xlICA9IFRyaWFuZ2xlIEZsb2F0
IEZsb2F0IEZsb2F0CQkJDQoNCnNoYXBlMSA9IENpcmNsZSAzLjANCnNoYXBl
MiA9IFJlY3RhbmdsZSA0NS45IDg3LjYNCg0KLS0gUmVvcmdhbmlzZSB0aGUg
ZGVmaW5pdGlvbnMsIG9yZ2FuaXNpbmcgYnkgc29ydCBvZiBzaGFwZSByYXRo
ZXINCi0tIHRoYW4gYnkgZnVuY3Rpb24uIFRoaXMgaXMgc2ltcGx5IGEgbWF0
dGVyIG9mIGN1dHRpbmcgYW5kIHBhc3RpbmcNCi0tIGxpbmVzIGluIHRoZSBm
aWxlLg0KDQppbnN0YW5jZSBTaGFwZSBDaXJjbGUgd2hlcmUNCiAgaXNSb3Vu
ZCAoQ2lyY2xlIF8pICAgICAgPSBUcnVlDQogIGFyZWEgKENpcmNsZSByKSAg
ICAgID0gcGkqcipyDQogIHBlcmltZXRlciAoQ2lyY2xlIHIpICAgICAgPSAy
KnBpKnINCg0KaW5zdGFuY2UgU2hhcGUgUmVjdGFuZ2xlIHdoZXJlDQogIGlz
Um91bmQgKFJlY3RhbmdsZSBfIF8pID0gRmFsc2UNCiAgYXJlYSAoUmVjdGFu
Z2xlIGggdykgPSBoKncNCiAgcGVyaW1ldGVyIChSZWN0YW5nbGUgaCB3KSA9
IDIqKGgrdykNCg0KaW5zdGFuY2UgU2hhcGUgVHJpYW5nbGUgd2hlcmUNCiAg
aXNSb3VuZCAoVHJpYW5nbGUgXyBfIF8pID0gRmFsc2UJCQkNCiAgYXJlYSAo
VHJpYW5nbGUgeCB5IHopID0gc3FydChzKihzLXgpKihzLXkpKihzLXopKQkN
CgkJCXdoZXJlIHMgPSAoeCt5K3opLzIJCQ0KICBwZXJpbWV0ZXIgKFRyaWFu
Z2xlIHggeSB6KSA9IHgreSt6CQkJDQoNCg0K
---559023410-851401618-999764315=:3622
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Shape4.hs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.33.0109060918353.3622@myrtle.ukc.ac.uk>
Content-Description: 
Content-Disposition: attachment; filename="Shape4.hs"

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tCVNoYXBlIGV4YW1wbGUs
IGZyb20gSGFza2VsbCBjcmFmdCwgQ2ggMTQNCi0tCUFuIGV4aXN0ZW50aWFs
IHR5cGUgb2Ygc2hhcGVzLCBidWlsdCBmcm9tIHRoZSBpbnN0YW5jZXMNCi0t
CW9mIHRoZSBTaGFwZSB0eXBlIGNsYXNzLiBCYXNlZCBvbiBTaGFwZTMuDQot
LSANCi0tIAkyMSBKdW5lIDIwMDENCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQoNCm1vZHVsZSBTaGFwZTQgd2hlcmUNCg0KLS0gVGhlIHR5cGUgb2Yg
YWxsIHNoYXBlcywgaS5lLiBhbGwgdHlwZXMgY29uZm9ybWluZyB0byB0aGUg
U2gNCi0tIGludGVyZmFjZSwgY29sbGVjdGVkIGFzIGEgc2luZ2xlIGV4aXN0
ZW50aWFsIHR5cGUuDQoNCmRhdGEgU2hhcGUgPSBmb3JhbGwgYS4gU2ggYSA9
PiBTaGFwZSBhDQoNCi0tIElmIHRoZSB0eXBlIGlzIHRvIGJlIGNhbGxlZCBT
aGFwZSwgdGhlbiB0aGUgY2xhc3MgbmVlZHMgdG8gYmUgDQotLSByZW5hbWVk
OyBoZXJlIGl0J3MgU2gsIGNvdWxkIGJlIFNoYXBlSW50ZXJmYWNlLg0KDQpj
bGFzcyBTaCBhIHdoZXJlDQogIGlzUm91bmQgOjogYSAtPiBCb29sDQogIGFy
ZWEgOjogYSAtPiBGbG9hdA0KICBwZXJpbWV0ZXIgOjogYSAtPiBGbG9hdA0K
DQotLSBQdWxsIHRoZSBzaW5nbGUgZGF0YSB0eXBlIGludG8gdGhyZWUgc2Vw
YXJhdGUgdHlwZXMuLi4NCg0KZGF0YSBDaXJjbGUgICAgPSBDaXJjbGUgRmxv
YXQgDQpkYXRhIFJlY3RhbmdsZSA9IFJlY3RhbmdsZSBGbG9hdCBGbG9hdCAN
CmRhdGEgVHJpYW5nbGUgID0gVHJpYW5nbGUgRmxvYXQgRmxvYXQgRmxvYXQJ
CQkNCg0KLS0gVG8gYnVpbGQgZXhhbXBsZXMgbmVlZCB0byB3cmFwIGV2ZXJ5
dGhpbmcgaW4gdGhlIFNoYXBlDQotLSBjb25zdHJ1Y3Rvci4gVGhlc2UgY2Fu
IGJlY29tZSBjb25zdHJ1Y3RvcnMgKHNtYWxsICdjJykgb2YgU2hhcGUuDQoN
CnNoYXBlMSA9IFNoYXBlIChDaXJjbGUgMy4wKQ0Kc2hhcGUyID0gU2hhcGUg
KFJlY3RhbmdsZSA0NS45IDg3LjYpDQoNCi0tIFJlb3JnYW5pc2UgdGhlIGRl
ZmluaXRpb25zLCBvcmdhbmlzaW5nIGJ5IHNvcnQgb2Ygc2hhcGUgcmF0aGVy
DQotLSB0aGFuIGJ5IGZ1bmN0aW9uLiBUaGlzIGlzIHNpbXBseSBhIG1hdHRl
ciBvZiBjdXR0aW5nIGFuZCBwYXN0aW5nDQotLSBsaW5lcyBpbiB0aGUgZmls
ZS4NCg0KaW5zdGFuY2UgU2ggQ2lyY2xlIHdoZXJlDQogIGlzUm91bmQgKENp
cmNsZSBfKSAgICAgID0gVHJ1ZQ0KICBhcmVhIChDaXJjbGUgcikgICAgICA9
IHBpKnIqcg0KICBwZXJpbWV0ZXIgKENpcmNsZSByKSAgICAgID0gMipwaSpy
DQoNCmluc3RhbmNlIFNoIFJlY3RhbmdsZSB3aGVyZQ0KICBpc1JvdW5kIChS
ZWN0YW5nbGUgXyBfKSA9IEZhbHNlDQogIGFyZWEgKFJlY3RhbmdsZSBoIHcp
ID0gaCp3DQogIHBlcmltZXRlciAoUmVjdGFuZ2xlIGggdykgPSAyKihoK3cp
DQoNCmluc3RhbmNlIFNoIFRyaWFuZ2xlIHdoZXJlDQogIGlzUm91bmQgKFRy
aWFuZ2xlIF8gXyBfKSA9IEZhbHNlCQkJDQogIGFyZWEgKFRyaWFuZ2xlIHgg
eSB6KSA9IHNxcnQocyoocy14KSoocy15KSoocy16KSkJDQoJCQl3aGVyZSBz
ID0gKHgreSt6KS8yCQkNCiAgcGVyaW1ldGVyIChUcmlhbmdsZSB4IHkgeikg
PSB4K3kregkJCQ0KDQotLSBUcnlpbmcgaXQgb3V0LiBBZGRpbmcgdGhlIHR5
cGUgb2YgZWxsaXBzZXMuDQoNCmRhdGEgRWxsaXBzZSA9IEVsbGlwc2UgRmxv
YXQgRmxvYXQNCg0KbWtFbGxpcHNlIDo6IEZsb2F0IC0+IEZsb2F0IC0+IFNo
YXBlDQpta0VsbGlwc2UgeCB5ID0gU2hhcGUgKEVsbGlwc2UgeCB5KQ0KDQpp
bnN0YW5jZSBTaCBFbGxpcHNlIHdoZXJlDQogIGlzUm91bmQgKEVsbGlwc2Ug
XyBfKSA9IFRydWUNCiAgYXJlYSAoRWxsaXBzZSBoIHcpID0gcGkqaC8yKncv
Mg0KICBwZXJpbWV0ZXIgKEVsbGlwc2UgaCB3KSA9IDIqKGgvMit3LzIpDQoN
Ci0tIEZpbmFsbHkgbWFrZSBTaGFwZSBhbiBpbnN0YW5jZSBvZiBTaCBzbyB0
aGF0IFNoYXBlcyBjYW4gYmUNCi0tIGRpcmVjdGx5IG1hbmlwdWxhdGVkIGJ5
IHRoZSBmdW5jdGlvbnMgYXJlYSBldGMsIGp1c3QgbGlrZSB0aGUNCi0tIG9y
aWdpbmFsIGRhdGEgdHlwZSAoZXhjZXB0IGZvciB0aGUgbGFjayBvZiBwYXR0
ZXJuIG1hdGNoaW5nKS4NCg0KaW5zdGFuY2UgU2ggU2hhcGUgd2hlcmUNCiAg
aXNSb3VuZCAoU2hhcGUgc2gpICAgPSBpc1JvdW5kIHNoDQogIGFyZWEgKFNo
YXBlIHNoKSAgICAgID0gYXJlYSBzaA0KICBwZXJpbWV0ZXIgKFNoYXBlIHNo
KSA9IHBlcmltZXRlciBzaA0K
---559023410-851401618-999764315=:3622--