我想实现在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'。 –