Haskell, Concurrent Clean : Re: 正格性フラグを使ってseqを定義する
http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20071023#p01
http://twitter.com/jmuk/statuses/365608742
これにそれほど感銘を受ける理由がいまいち分からなくて、不思議な感じ。
:: T = T !Int
と
t :: !Int -> A
って大した違いはなくて、前者のほうは
T :: !Int -> T _T :: !T -> Int
を同時に定義しているような意味なわけだから。
この変換を考えれば、
:: S = S Int
というデータ型は
S :: Int -> S _S :: !S -> Int
というのと同じ。TとSの違いは、Intの評価のタイミングがどちらの関数の側にあるかという違いだけで、結果に変わりはない。
Cleanはデータ型にも関数宣言にも正格性フラグがあるのに対して、Haskellはデータ型にしかないというのは、対称的じゃない感じで不思議だったのだけれど。
-
-
- -
-