> GCを記述するには、メモリという概念と、ビットマップに型を付与する
> 操作が必要ですよね。

あれっ。やっぱり、イメージしているものが違うのかな。

Scheme であるか Haskell であるかにかかわらず、
メモリは単純に Vector あるいは Array でいいような気がしますけど。

そのレベルの話しではない?
ビットマップに型を付与するというのがよくわからないです。
ビットマップというのは、ビット操作ができる対象という意味ですか?

> monadを使えばメモリは記述できると思うんですが、
> それをやるとメモリから取り出した値に全部メモリmonadがついて回るんじゃ
> ないかな、とか。

そうか、外界の「操作」の部分ですね。これは、今の Haskell の I/O の仕様では
IO モナドを使うので、外部「操作」を含むものはすべて IO モナドになります。

しかし、メモリやGCに限っていえば、最初に仮想機械のメモリ用に実メモリを
確保する以外は仮想機械内部の表現でよいでしょうから、外界のオブジェクトに
直接型を付ける必要はなくて、外界で確保したものをメモリを表現するデータ
としてコンストラクトできればいいので、そのようなプリミティブをコンパイラ側
で用意するということでいいと思います。

外界の操作部分のプリミティブはいずれの言語で実装しようとも、必要ですよね。
それ以外は全部 Haskellで書くことできると思います。

いずれにせよ、Scheme では簡単で、Haskell で難しく感じるのは、
動的型付け、静的型付けということではなくて、外界とのインタラクションで、
参照透明性を確保する(ように見せる)かどうかというところではないでしょうか。

--nobsun

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