たけをです。

 すいません・・・メールを読み返していたら自己解決してしまいました。
こう書き直したら、スタックが全く溢れなくなりました。

    runAuto2 = \ (A f) m -> let (c, f') = f False
                           in if c `seq` (m == 0) then c
                                  else runAuto2 f' $! (m-1)

 最初の関数は、(c, f') が評価されず、f'がひたすら展開されたのでスタックが
溢れていた、と言うことだったのでしょうか。

 3連投稿な上に独り相撲なメールで申し訳ないです(^^;;;

--
IMAI Takeo <usitukai / osk.3web.ne.jp>

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