[英]Haskell expression data type
我想在Haskell中使用以下数据类型:
data Exp = Add Exp Exp
| Var String
| Let (Var String) Exp Exp
| Int Int
但是,不允许使用这样的(Var String)。 我可以使用Exp代替(Var String),但是我不希望在其中使用Int,那么如何解决这个问题?
您可以定义新的包装器Var
或仅使用String
。 首先是newtype包装器示例:
newtype Var = V String
-- ^ "Var" here is a type declaration. "V" is declaring a data constructor.
data Exp = Add Exp Exp
| Var Var -- The first "Var" here is declaring a data constructor. The second is referring to the type.
| Let Var Exp Exp -- "Var" here is referring to the type
| Int Int
或仅使用字符串:
data Exp = Add Exp Exp
| Var String
| Let String Exp Exp
| Int Int
编辑:我的评论试图提出的观点可能不清楚。 在使用Var时,例如Let (Var String) Exp Exp
,您尝试在需要type的位置中使用名为Var
的构造函数(及其字段String
)。 每个数据构造函数都可用于构建类型的值 (在这种情况下为Exp ),并且不能由类型系统进一步区分。 代替其他数据声明,您无法区分类型为Exp的Var
值和类型Add
, Let
或Int
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.