繁体   English   中英

Haskell表达式数据类型

[英]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值和类型AddLetInt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM