Concurrent Cleanとオブジェクト指向

[id:lethevert:20050811:p2]の続き。
あれこれと考えてきましたが、昨日、天啓がありました。つまり、中置演算子を定義するだけでよかったのです。
下のように「-->」を定義してやれば、オブジェクト指向的な呼び出しが可能になります。それどころか、JavaScriptばりに、「1-->toString」のような表現まで可能です。

module obj2

import StdEnv

(-->) infixl 9 :: a (a -> b) -> b
(-->) a f = f a

Object =
{ state :: Int } Start :: *World -> *World Start w # (c, w) = stdio w # c = fwrites("1-->toString : " +++ (1-->toString) +++ "\n") c # c = fwrites("obj-->addX 2 : " +++ (obj-->addX 2-->toString) +++ "\n") c # (_,w) = fclose c w = w where obj = {state = 2} addX i obj = obj.state + i

演算子は「-->」でいいかな?「->」がダメなのは仕方ないとして、「=>」もダメだったので。