[GUI] get and set

Krasimir Angelov ka2_mail@yahoo.com
Sun, 16 Feb 2003 15:55:17 -0800 (PST)


--0-1662008171-1045439717=:78241
Content-Type: text/plain; charset=us-ascii
Content-Id: 
Content-Disposition: inline

    The getter and setter abstractions are really more
universal concept than Attr in GIO and StateVariable
in HOpenGL. The get and set functions are not limited
to IO monad and can be implemented for many others
monad types. Unfortunately proper implementation
requires functional dependencies. The attached module
contains definitions for get and set functions for IO,
ST, Reader, ReaderT, State, StateT, RWS and RWST
monads. The idea is that each monad can maintains some
kind of state and the corresponding Attr type gives
access to some part of the state. The good example is
the StateAttr with State monad. 

Example:


data Point = Point {x :: Int, y :: Int}

attrX :: StateAttr Point Int
attrX = StateAttr x (\v p -> p{x=v})

attrY :: StateAttr Point Int
attrY = StateAttr y (\v p -> p{y=v})

move :: Int -> Int -> State Point Int
move vx vy = do
   x <- get attrX
   attrX =: x+vx
   y <- get attrY
   attrY =: y+vy

I propose to standardize this concept and add Attr
module to the GHC base package.

Cheers,
Krasimir

__________________________________________________
Do you Yahoo!?
Yahoo! Shopping - Send Flowers for Valentine's Day
http://shopping.yahoo.com
--0-1662008171-1045439717=:78241
Content-Type: application/octet-stream; name="Attr.hs"
Content-Transfer-Encoding: base64
Content-Description: Attr.hs
Content-Disposition: attachment; filename="Attr.hs"

bW9kdWxlIEF0dHIgd2hlcmUNCg0KaW1wb3J0IERhdGEuSU9SZWYNCmltcG9y
dCBEYXRhLlNUUmVmDQppbXBvcnQgQ29udHJvbC5Nb25hZC5TVA0KaW1wb3J0
IENvbnRyb2wuTW9uYWQuUmVhZGVyDQppbXBvcnQgQ29udHJvbC5Nb25hZC5T
dGF0ZSBoaWRpbmcgKGdldCkNCmltcG9ydCBDb250cm9sLk1vbmFkLlJXUyBo
aWRpbmcgKGdldCkNCg0KY2xhc3MgUmVhZGFibGUgdiBtIHwgdiAtPiBtIHdo
ZXJlDQogICBnZXQgOjogdiBhIC0+IG0gYQ0KDQpjbGFzcyBXcml0YWJsZSB2
IG0gfCB2IC0+IG0gd2hlcmUNCiAgICg9OikgOjogdiBhIC0+IGEgLT4gbSAo
KQ0KICAgDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0NCi0tIElPUmVmDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCg0KaW5zdGFuY2UgUmVhZGFibGUgSU9SZWYgSU8gd2hlcmUN
CiAgIGdldCAgPSByZWFkSU9SZWYNCg0KaW5zdGFuY2UgV3JpdGFibGUgSU9S
ZWYgSU8gd2hlcmUNCiAgICg9OikgPSB3cml0ZUlPUmVmDQogICANCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0gU1RSZWYN
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpp
bnN0YW5jZSBSZWFkYWJsZSAoU1RSZWYgcykgKFNUIHMpIHdoZXJlDQogICBn
ZXQgID0gcmVhZFNUUmVmDQoNCmluc3RhbmNlIFdyaXRhYmxlIChTVFJlZiBz
KSAoU1Qgcykgd2hlcmUNCiAgICg9OikgPSB3cml0ZVNUUmVmDQogICANCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0gUmVh
ZGVyIG1vbmFkDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0NCg0KbmV3dHlwZSBSZWFkZXJBdHRyIHIgYSA9IFJlYWRlckF0dHIg
KHIgLT4gYSkNCg0KaW5zdGFuY2UgUmVhZGFibGUgKFJlYWRlckF0dHIgcikg
KFJlYWRlciByKSB3aGVyZQ0KICAgZ2V0IChSZWFkZXJBdHRyIGdldHRlcikg
ID0gUmVhZGVyIGdldHRlcg0KICAgDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NCi0tIFJlYWRlclQgbW9uYWQNCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpkYXRhIFJlYWRl
clRBdHRyIHIgbSBhID0gUmVhZGVyVEF0dHIgKHIgLT4gbSBhKSAoYSAtPiBy
IC0+IG0gKCkpDQoNCmluc3RhbmNlIFJlYWRhYmxlIChSZWFkZXJUQXR0ciBy
IG0pIChSZWFkZXJUIHIgbSkgd2hlcmUNCiAgIGdldCAoUmVhZGVyVEF0dHIg
Z2V0dGVyIHNldHRlcikgID0gUmVhZGVyVCBnZXR0ZXINCiAgIA0KaW5zdGFu
Y2UgV3JpdGFibGUgKFJlYWRlclRBdHRyIHIgbSkgKFJlYWRlclQgciBtKSB3
aGVyZQ0KICAgKFJlYWRlclRBdHRyIGdldHRlciBzZXR0ZXIpID06IHYgPSBS
ZWFkZXJUIChzZXR0ZXIgdikNCiAgIA0KDQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tIFN0YXRlQXR0cg0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmRhdGEgU3RhdGVB
dHRyIHMgYSA9IFN0YXRlQXR0ciAocyAtPiBhKSAoYSAtPiBzIC0+IHMpDQoN
Cmluc3RhbmNlIFJlYWRhYmxlIChTdGF0ZUF0dHIgcykgKFN0YXRlIHMpIHdo
ZXJlDQogICBnZXQgKFN0YXRlQXR0ciBnZXR0ZXIgc2V0dGVyKSAgPSBTdGF0
ZSAoXHMgLT4gKGdldHRlciBzLCBzKSkNCiAgIA0KaW5zdGFuY2UgV3JpdGFi
bGUgKFN0YXRlQXR0ciBzKSAoU3RhdGUgcykgd2hlcmUNCiAgIChTdGF0ZUF0
dHIgZ2V0dGVyIHNldHRlcikgPTogdiA9IFN0YXRlIChccyAtPiAoKCksIHNl
dHRlciB2IHMpKQ0KICAgDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCi0tIFN0YXRlVEF0dHINCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpkYXRhIFN0YXRlVEF0dHIgcyBt
IGEgPSBTdGF0ZVRBdHRyIChzIC0+IG0gYSkgKGEgLT4gcyAtPiBtIHMpDQoN
Cmluc3RhbmNlIE1vbmFkIG0gPT4gUmVhZGFibGUgKFN0YXRlVEF0dHIgcyBt
KSAoU3RhdGVUIHMgbSkgd2hlcmUNCiAgIGdldCAoU3RhdGVUQXR0ciBnZXR0
ZXIgc2V0dGVyKSAgPSBTdGF0ZVQgKFxzIC0+IGdldHRlciAgIHMgPj49IChc
eCAtPiByZXR1cm4gKHgsICBzKSkpDQogICANCmluc3RhbmNlIE1vbmFkIG0g
PT4gV3JpdGFibGUgKFN0YXRlVEF0dHIgcyBtKSAoU3RhdGVUIHMgbSkgd2hl
cmUNCiAgIChTdGF0ZVRBdHRyIGdldHRlciBzZXR0ZXIpID06IHYgPSBTdGF0
ZVQgKFxzIC0+IHNldHRlciB2IHMgPj49IChccyAtPiByZXR1cm4gKCgpLCBz
KSkpDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KLS0gUldTIG1vbmFkDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCg0KZGF0YSBSV1NBdHRyIHIgdyBzIGEgPSBSV1NBdHRy
IChyIC0+IHMgLT4gKGEsdykpIChhIC0+IHIgLT4gcyAtPiAocyx3KSkNCg0K
aW5zdGFuY2UgUmVhZGFibGUgKFJXU0F0dHIgciB3IHMpIChSV1MgciB3IHMp
IHdoZXJlDQogICBnZXQgKFJXU0F0dHIgZ2V0dGVyIHNldHRlcikgID0gUldT
IChcciBzIC0+IGxldCAodix3KSAgPSBnZXR0ZXIgICByIHMgaW4gKHYsICBz
LCAgdykpDQogICANCmluc3RhbmNlIFdyaXRhYmxlIChSV1NBdHRyIHIgdyBz
KSAoUldTIHIgdyBzKSB3aGVyZQ0KICAgKFJXU0F0dHIgZ2V0dGVyIHNldHRl
cikgPTogdiA9IFJXUyAoXHIgcyAtPiBsZXQgKHMnLHcpID0gc2V0dGVyIHYg
ciBzIGluICgoKSwgcycsIHcpKQ0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0gUldTVCBtb25hZA0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmRhdGEgUldTVEF0
dHIgciB3IHMgbSBhID0gUldTVEF0dHIgKHIgLT4gcyAtPiBtIChhLHcpKSAo
YSAtPiByIC0+IHMgLT4gbSAocyx3KSkNCg0KaW5zdGFuY2UgTW9uYWQgbSA9
PiBSZWFkYWJsZSAoUldTVEF0dHIgciB3IHMgbSkgKFJXU1QgciB3IHMgbSkg
d2hlcmUNCiAgIGdldCAoUldTVEF0dHIgZ2V0dGVyIHNldHRlcikgID0gUldT
VCAoXHIgcyAtPiBkbw0KICAgCQkJCQkodix3KSA8LSBnZXR0ZXIgciBzDQog
ICAJCQkJCXJldHVybiAodiwgcywgdykpDQogICANCmluc3RhbmNlIE1vbmFk
IG0gPT4gV3JpdGFibGUgKFJXU1RBdHRyIHIgdyBzIG0pIChSV1NUIHIgdyBz
IG0pIHdoZXJlDQogICAoUldTVEF0dHIgZ2V0dGVyIHNldHRlcikgPTogdiA9
IFJXU1QgKFxyIHMgLT4gZG8NCiAgIAkJCQkJKHMnLHcpIDwtIHNldHRlciB2
IHIgcw0KICAgCQkJCQlyZXR1cm4gKCgpLCBzJywgdykpDQoNCg0KLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0gR0lPIEF0dHJp
YnV0ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N
Cg0KdHlwZSBBdHRyIHcgYSA9IFJlYWRlclRBdHRyIHcgSU8gYQ0KdHlwZSBQ
cm9wIHcgICA9IFJlYWRlclQgdyBJTyAoKQ0KDQpnZXRwIDo6IHcgLT4gQXR0
ciB3IGEgLT4gSU8gYQ0KZ2V0cCB3IGF0dHIgPSBydW5SZWFkZXJUIChnZXQg
YXR0cikgdw0KDQpzZXRwIDo6IHcgLT4gW1Byb3Agd10gLT4gSU8gKCkNCnNl
dHAgdyBwcm9wcyA9IHJ1blJlYWRlclQgKHNlcXVlbmNlXyBwcm9wcykgdw0K
DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLSBI
T3BlbkdMDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
DQoNCm5ld3R5cGUgR2V0dGFibGVTdGF0ZVZhcmlhYmxlIGEgPSBHZXR0YWJs
ZVN0YXRlVmFyaWFibGUgKElPIGEpDQoNCmluc3RhbmNlIFJlYWRhYmxlIEdl
dHRhYmxlU3RhdGVWYXJpYWJsZSBJTyB3aGVyZQ0KICAgZ2V0IChHZXR0YWJs
ZVN0YXRlVmFyaWFibGUgZykgPSBnDQoNCg0KDQpuZXd0eXBlIFNldHRhYmxl
U3RhdGVWYXJpYWJsZSBhID0gU2V0dGFibGVTdGF0ZVZhcmlhYmxlIChhIC0+
IElPICgpKQ0KDQppbnN0YW5jZSBXcml0YWJsZSBTZXR0YWJsZVN0YXRlVmFy
aWFibGUgSU8gd2hlcmUNCiAgICg9OikgKFNldHRhYmxlU3RhdGVWYXJpYWJs
ZSBzKSBhID0gcyBhDQoNCg0KDQpkYXRhIFN0YXRlVmFyaWFibGUgYSA9IFN0
YXRlVmFyaWFibGUgKElPIGEpIChhIC0+IElPICgpKQ0KDQppbnN0YW5jZSBS
ZWFkYWJsZSBTdGF0ZVZhcmlhYmxlIElPIHdoZXJlDQogICBnZXQgKFN0YXRl
VmFyaWFibGUgZyBfKSA9IGcNCg0KaW5zdGFuY2UgV3JpdGFibGUgU3RhdGVW
YXJpYWJsZSBJTyB3aGVyZQ0KICAgKD06KSAoU3RhdGVWYXJpYWJsZSBfIHMp
IGEgPSBzIGENCg0KDQoNCg==

--0-1662008171-1045439717=:78241--