[英]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.