私は、次のようなデータ構造を持っている:データコンストラクタ制限
IfStatement $ Else ...
IfStatement $ EndIf
アン:希望される何
data IfTree = If Expr Statement IfTree | Else Statement | EndIf
data Statement = IfStatement IfTree
は、それが不可能な組み合わせのいずれかを実行するようにすることですIfStatement
は、If
しか使用できません。
私はデータコンストラクタを非表示にすることができ、それらを構成する関数のみを公開することができますが、データ型でこれを制限したいと考えています。
更新:
私が何をしようとしていた何が不格好でした。優れた回答やコメントのおかげで、これを処理するより良い方法が与えられました。
data Statement = If Expr Statement (Maybe Statement) | ...
かさえ:
data Stat = IfStat Expr Stat | IfElseStat Expr Stat Stat | …
これは、@DanielWagnerが上記でコメントしたことをエコーします。しかし、あなたは最初に答えを正式化したので、あなたの答えを正しいものとしてマークします。優秀な提案をありがとう! – kurzweil4
これを見てから、IfStat/IfElseStatが最もエレガントであると思う。 – kurzweil4