簡體   English   中英

使一種類型成為一種或另一種

[英]Make a type be either one type or another

我是Haskell的初學者,正在研究和構建AST。 我想知道如何定義如下類型的類型:

Value可以是IdentifierLiteral 現在,我只是擁有兩個構造函數的Value類型(分別使用標識符的名稱和字符串文字的值):

data Value = Id String
           | Lit String

但是,然后我想在AST中創建一個表示任務的類型,所以我需要

data Assignment = Asgn Value Value

但是很明顯,我一直希望Assignment的第一部分始終是一個Identifier 所以我想我應該將IdentifierLiteral分開設置類型,以更好地區分事物:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM