Concurrent Cleanとオブジェクト指向

http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap5.html
あれこれと考えていたのですが、ドキュメントを見ると、レコード型のところに、オブジェクト指向スタイルのプログラミングの例がちょっと載っていました。
ところが、想像していたのと違ったのは、「レコードは、カリー化された方法では使用できない。」という制限でした。なので、Cleanでも、LispのCLOSのように「Get obj」や「Set 1 obj」という記法になってしまうようです。
正格な評価や、破壊的更新をサポートする記法は存在するようなので、その辺の懸念はクリアしそうです。

module obj

import StdEnv

::Object = E.x:   { state  :: x
                  , get    :: x -> Int
                  , set    :: x Int -> x
                  }

CreateObject1:: Object
CreateObject1 = {state = [], get = myget, set = myset}
where
        myget:: [Int] -> Int
        myget [i:is]  = i
        myget [] = 0

        myset:: [Int] Int -> [Int]
        myset is i = [i:is]

CreateObject2 = {state = 0.0, get = myget, set = myset}
where
        myget:: Real -> Int
        myget r = toInt r

        myset:: Real Int -> Real
        myset r i = r + toReal i

Get:: Object -> Int
Get {state,get} = get state

Set:: Int Object -> Object
Set i o=:{state,set} = {o & state = set state i}

Start:: [Object]
Start = map (Set 3) [CreateObject1,CreateObject2]