[英]Make a type be either one type or another
我是Haskell的初學者,正在研究和構建AST。 我想知道如何定義如下類型的類型:
Value
可以是Identifier
或Literal
。 現在,我只是擁有兩個構造函數的Value
類型(分別使用標識符的名稱和字符串文字的值):
data Value = Id String
| Lit String
但是,然后我想在AST中創建一個表示任務的類型,所以我需要
data Assignment = Asgn Value Value
但是很明顯,我一直希望Assignment
的第一部分始終是一個Identifier
! 所以我想我應該將Identifier
和Literal
分開設置類型,以更好地區分事物:
data Identifier = Id String
data Literal = Lit String
但是,現在如何定義“ Value
? 我想到了這樣的事情:
-- this doesn't actually work...
data Value = (Id String) -- How to make Value be either an Identifier
| (Lit String) -- or a Literal?
我知道我可以做
data Value = ValueId Identifier
| ValueLit Literal
但這讓我感到有些不知所措,讓我想知道是否有更好的解決方案?
我首先嘗試重組我的類型,以便能夠使用GADT進行處理,但最終,更簡單的解決方案是按照leftroundabout的建議進行。 我想這不是那種“毫無意義的”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.