限定継続 in Haskell 98 by Oleg Kiselyov
限定継続フェスタ があると聞きまして,私もちょっぴり勉強しています。 Schemeには馴れていないし、僕のPCには処理系も入ってないので、Haskellでやります。
Olegさんの投稿 (http://www.mail-archive.com/haskell@haskell.org/msg20758.html ) から、Haskll98で動作する 限定継続の実装が手に入ります。浅井先生・亀山先生の型システムを実装したものらしいです。
細かいことはわかりませんが、モナドはわかるのでためしてみます。
$ ghci ShiftResetGenuine.hs ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base ... linking ... done. [1 of 1] Compiling ShiftResetGenuine ( ShiftResetGenuine.hs, interpreted ) Ok, modules loaded: ShiftResetGenuine. *ShiftResetGenuine> flip unC id (reset (ret 1 `bind` (\x-> shift (\k->ret 2) `bind` (\y-> ret (x+y))))) 2 *ShiftResetGenuine> flip unC id (reset (ret 1 `bind` (\x-> shift (\k->k 2) `bind` (\y-> ret (x+y))))) 3 *ShiftResetGenuine>
素晴らしい。何が素晴らしいって、ちゃんと型推論がはたらく事です。
GHCのrebindable syntaxの機能を使えば do記法でも書けそうだ。