我有數據結構,例如:數據構造限制
data IfTree = If Expr Statement IfTree | Else Statement | EndIf
data Statement = IfStatement IfTree
什麼是想要的是使人們無法做任何這些組合:
IfStatement $ Else ...
IfStatement $ EndIf
的IfStatement
應該只能接受If
。
我知道我可以隱藏數據構造函數,只顯示在後臺構成它們的函數,但我想限制這種數據類型。
更新:
什麼,我試圖做的是笨重。給予憑藉自身優異的答案和意見,處理這一個更好的方法:
data Statement = If Expr Statement (Maybe Statement) | ...
甚至:
data Stat = IfStat Expr Stat | IfElseStat Expr Stat Stat | …
這回應了@DanielWagner上面的評論。但是你首先將答案正式化,所以我會將你的答案標記爲正確的。感謝您的優秀建議傢伙! – kurzweil4
花了一些時間看這個之後,我想我找到了最優雅的IfStat/IfElseStat。 – kurzweil4