> 型構築子の不動点を表す、
>   newtype Fix f = In (f (Fix f))
> くらいは私も見たことがあったのですが、

これって、実際にどのように使うのでしょう。型の意味は追えられている
気がしますが。。。

> 完全バランス木を表す
>   data Fork a = Fork a a
>   data Perfect a = ZeroP a | SuccP (Perfect (Fork a))
> のような型や、
> Okasaki's binary random-access lists と呼ばれている
>   data Sequ a = EndS
>   	      | ZeroS (Sequ (Fork a))
>   	      | OneS a (Sequ (Fork a))
> のような型には本当に驚きました。

うひゃー。すごい。

> 型って本当に奥が深いですね...

ですねぇ。

そういえば、型というより文脈のつくり方のような泥臭い手法ですけど。
私の場合こんなのでも、なるほどと関心したことがあります。

  data Hoge a を宣言するとき、a に特定具象型のみにしたいとき、

  data Nani a => Hoge a = Hoge a

  class Nani          -- method のないクラス
  instance Nani OK    -- インスタンス宣言
  
  type KorehaOK = Hoge OK  
  type KorehaNG = Hoge NG 

  これにより、Hoge OK は書けるけど Hoge NG を書けなくする手法です。
  HTML や XML での要素の入れ子依存関係を制御する(特定の要素は、特定の
  要素内でしか使えないようにする)手法として使われていました。

--
Nobuo Yamashita                 mailto:nobsun / sampou.org
  I love programming.           http://www.sampou.org/
  I love pencil puzzles.        http://www.puzzle.jp/



--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/