私はhaskellの関数型言語のインタプリタを作成しようとしています(私はその言語を使い慣れていません)。抽象的なデータ型ではないが、私はおそらく微妙なものと便利なものを混ぜ合わせたものを作り出しているが、同種のリストを作る能力を提供したい。Haskellで言語を実装する:同質のリスト
私の基本的な変数はdata Datum = DatInt Int | DatDbl Double | DatBool Bool
であり、私は均質なリストをどのように表現するのか全く分かりません。コンストラクタList Datum
などを追加すると、異種のリストが作成され、タイプごとに別のリストを作成すると、ListInt [Int] | ListDbl [Double]
はリストのリストを除外します。
同種のリストを表現する最良の方法は何でしょうか?
それは、原理的には同様異質なものを保持することができた場合でもあなたは、均質なリストの '一覧[データム]を'使用することができます。
今、あなたはこのような何かを型注釈付きの式を表すことができます。そのようなリストが均質であることを_statically_保証するには、おそらくGADTと存在する可能性のあるタイプが必要になるでしょう。あなたがハスケルを初めて習得したのなら、おそらくより単純な非静的保証の方法で通訳者を終わらせる方が良いでしょう。あなたが冒険的な気持ちになれば、より魅力的なタイプに移行することができます。 – chi
実際、あなたの現在のフレームワークは、あらゆる型保証をエンコードする機会をあなたに与えるものではありません。 'Function'コンストラクタを追加すると、正しいタイプに関数が適用されているかどうかを確認することができなくなります。 – dfeuer
@chi私は静的型保証を提供したい、理想的には言語拡張に頼る必要はありません。まったく可能ですか? – drowdemon