豊福です。

shelarcyさん
>>   fun echo () = getc >>= (fn c =>
>>                if (c = #"\n") then
>>                  done ()
>>                else
>>                  putc c >>
>>                  echo ()))
>>
  ...
> ええと、ダメでとはどういう意味ででしょうか?

  done () と echo () のように () を付けてしまうと型が unit に
なるので val >>= : 'a io * ('a -> 'b io) -> 'b io
の ('a -> 'b io) と型が合わなくなるのではないかという意味です。

> 私は fix を使わなければループが終わらない限りこの関数を呼び出す関数
> の処理がおこなわれなくなるのが最大の問題だという風に納得したのですが、
> それでは何か足りませんか?

  echo の「>>=」を使わないバージョンは
func echo ML () = let val c = get () in
                  if c = #"\n" then
                    ()
                  else
                    (putcML c; echoML())
                  end
と fix を使わなくても書けるけれども「>>=」を使って書こうと
すると fix を使わないと書けないと理解したのですが。
---
                        豊福
                        nobu_toyofuku / nifty.com


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