簡體   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