假设我有三个值构造函数:
A { a :: Int }
B { b :: Char }
C { c :: Bool }
Run Code Online (Sandbox Code Playgroud)
我想创建两种类型X,Y这样类型的值X可以是A,B或者C,像这样:
data X = A {...} | B {...} | C {...}
Run Code Online (Sandbox Code Playgroud)
而type的值Y只能是一个A或B类似的东西:
data Y = A {...} | B {...}
Run Code Online (Sandbox Code Playgroud)
这样我就可以编写这样的代码:
foo :: X -> Int -- can pattern match
foo (A _) = 1
foo (B _) = 2
foo (C …Run Code Online (Sandbox Code Playgroud)