我想實現在Haskell如下:省略數據類型構造
0,1,2,...:N
x,y,z,...:V
+,*,-,/,...:F
F alias for Expr -> Expr -> Expr
Expr := N|V|F Expr Expr
我的問題是第一:
是語法缺陷的類型級別?它有道理嗎?所有的條款看起來像他們會檢查(允許0,1,...既是Expr也是N子類型,並且x,y,...都是Expr和V子類型)。
其次,什麼是最接近Haskell的實現?我目前的Haskell實現是:
data F = +|-|*|...
data Expr = N|V|MakeExpr F Expr Expr
有什麼建議嗎?
編輯 -
語法和實現之間的關鍵區別是類型構造器是隱含/在語法中省略。爲什麼Haskell中必須使用類型構造函數?
這不是僞碼 - 它只是一個語法。另外,我不確定你的意思是由'MakeExpr:F - > Expr - > Expr - >(Expr,Expr); MakeExpr f x y =(f,x,y)' - 'MakeExpr'已經在'data Expr = N | V | MakeExpr F Expr Expr'中定義。另外,您可能想要在「N」和「V」變體中記錄實際值。無論如何,我不確定你在問什麼。 – Alec
修正後,現在應該更有意義了。 – dumb0
構造函數不能以'+'等符號開頭。考慮數據F = Plus |減| | DotDotDot'。 –