簡體   English   中英

如何定義代數數據類型

[英]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 ,它具有三個不帶參數的構造函數: C1C2C3 這些都是C類型的值
  • B ,具有構造函數
    • B1包裝了一個Int值,所以B1 3B1 544是類型B
    • B2包裝了一個String值,因此B2 "hello"B2 "world"是類型B的值
    • B3是一個簡單的無參數構造函數,因此B3是類型B的值。
  • A a是一種多態數據類型-對於每種類型aA a也是一種數據類型。 它有一個構造函數MkA
    • 類型B的值
    • 類型a
    • C類型的值
    並創建類型A a的值。 因此,例如
    • MkA B3 True C1A Bool類型
    • MkA (B1 30) "Foo" C3是類型A String

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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