[英]How to define an algebraic data type
對另一個問題表示歉意,我想在這里重新表述我的原始問題,因為這可能很簡單:
如果我有想要創建的語言,例如:
A B <something> C
這將意味着僅輸入:AB .... C將有效。
相反,BA .....無效。
有沒有簡單的方法來定義構造函數,例如“ B”必須始終出現在“ A”之后? 我只看過A | B類型的構造函數“ A或B”
這樣嗎
-- file Temp.hs
module Temp where
data C = C1 | C2 | C3
data B = B1 Int | B2 String | B3
data A a = MkA B a C
使用ghc -c Temp.hs
可以很好地編譯-您不能在ghci
使用data
語句,這是ghci
的局限之一。
因此,在這里我定義了三種數據類型:
C
,它具有三個不帶參數的構造函數: C1
, C2
和C3
。 這些都是C
類型的值 B
,具有構造函數
B1
包裝了一個Int
值,所以B1 3
和B1 544
是類型B
值 B2
包裝了一個String
值,因此B2 "hello"
和B2 "world"
是類型B的值 B3
是一個簡單的無參數構造函數,因此B3
是類型B的值。 A a
是一種多態數據類型-對於每種類型a
, A a
也是一種數據類型。 它有一個構造函數MkA
B
的值 a
值 C
類型的值 A a
的值。 因此,例如
MkA B3 True C1
是A Bool
類型 MkA (B1 30) "Foo" C3
是類型A String
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.