- 471 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 13:45:50 ]
- MonadContだと、型の関係で、無限ループするような式は書けない。
# mfixとか使えば別だけど。 例えば、Schemeで次の式は書けるが、MonadContでは書けない。 (call/cc (lambda (c) c)) (call/cc (lambda (c) (set! foo c))) つまり、次の式は型が付かない。 callCC (\c -> return c) callCC (\c -> lift $ put c) 要は、callCCで捉えた継続をそのcallCCの外に出せない。ただし、 callCC (\c -> ... callCC (\c' -> c c') ...) のように、内部で別のcallCCを使って、それで捉えた継続を外に出すのはOK。 あと、変な例として、 callCC (\c -> return (Right (c . Left))) はOK。でもやっぱり無限ループはできない。
|

|