豊福です。

shelarcyさん
>>> fix f = let x = f x in x
>>> Monad と同じ要領です。
  ...
> nobsun がより詳細な解説をしているので、あまり語ることはないのですが……。

  x = f x in x の方は後から f の不動点のことかとわかったのですが
>>> Monad と同じ要領です。
こちらがわかりませんでした。

> ML が正格評価に対し Haskell が遅延評価の言語であることを思い出してください。
> 単純な定義でも Haskell は最後に来た時に止まることができますが、ML は止まらず
> に無限ループとなってしまいます。

nobsanさん
> ML では、y f = f (y f) のような定義はできないので、
> 巧妙に同等の定義が可能なような工夫がされています。
> それが逆にわかりにくい原因だと思います。

  ML は遅延評価でないので y f = f (y f) ではまずいわけですね。

  定義として同じとみなすかどうかは置いといて

datatype X = psi_inv of X -> (int -> int);
fun psi (psi_inv (f)) = f;
fun fixpoint(g) =
  let fun h(y) = g(fn x => psi(y)(y)(x))
   in h(psi_inv(h))
  end;

と同じやり方を haskell でできるならやりたいのですができるで
しょうか。
---
                        豊福
                        nobu_toyofuku / nifty.com


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