多相バリアントの実装、わけわからない。Maybe, Eitherなどの実装は一旦諦めて、バリアント型(代数的データ型)が担う以下の機能を個別に実装したい。
IO
型のような、型構築子が隠蔽されたデータ型 TyPolyAtom
TyProd
, Prod
[Int Int]
として宣言するだけでは両者の区別がつかない。そこで(Vec2 4 5)
, (Range 2 100)
のように、ユニークで識別可能な型構築子に値の組を適用することで、意味論的な区別をデータ構造として明示できるようにする。Event型は、JS的な表現としては、コールバック関数と入力Glisp値を受け取り、イベントが発火されたタイミングで新たなGlisp値を第一引数にコールバック関数を呼び出す