ソースなんて、ふつうは全文読破する必要ないのかもですが。とはいえ、そもそもMCCの動作のフローがさっぱりなので、せめて、ざっくりとでも全体像はつかみたい。
で、おもむろにコンパイルにつかったフォルダ「curry-0.9.11」を開いてみたんですが…。
あれ…?なんかLaTeXのソースっぽいのばっかじゃない?
でも、そのTeXはstyファイルがなんか足りなくてコンパイル通らないし…。
というわけで、curryサブフォルダ内(Preludeをはじめとしたモジュールがはいってる)を除くと、Haskellソースっぽいのは
$ ls *.hs GetOpt.hs cycc.hs cymk.hs
なんと、3つだけ!?
少なっ!しかも短っ!
100行未満とか。GetOpt.hsはコマンドライン引数をゴニョゴニョしてるだけで、本質的ではなさげだし。
cyiがどうもただの(それも相当簡易な)フロントエンドらしいとは感じてたけど、cycも、そうっぽい。そしてcycが呼ぶcycc.hsの
compile :: ErrorT IO a -> IO a compile c = callErr c >>= checkOk where checkOk (Ok x) = return x checkOk (Errors msgs) = putErr (unlines (nub msgs)) >> exitWith (ExitFailure 1)
あたりが肝なのかね。名前的にはいかにもコンパイルしてる風ですが…。
で、これなにしてんの…?
ともかく目下のJCUGでのぼくの使命としては、翻訳にくわえて
- なんちゃってcyi的なCurryで操作するDBを作る
- DBは関数単位で動的に保存・書き換えをする
- そのために関数宣言の動的書き換えの可能性を探る
といったところなんだけど。
だめだ、さっぱりである。一体、このそっけない呼び出したちが、実際どう動いているんでしょうか…。