discriminated union是函数式编程中的一个基础类型,要定义discriminated union类型,需要用到type关键字,后面接着的是discriminated union类型的名字,然后用"|"分隔每一个值。在discriminated union类型中的每一个值都被称作为union case。例如一套扑克有四种牌,红桃、方块、梅花、黑桃。我们可以定义一套牌的discriminated union类型:
> type Suit =
- | Heart
- | Diamond
- | Spade
- | Club;;
type Suit =
| Heart
| Diamond
| Spade
| Club
> let suits = [ Heart; Diamond; Spade; Club ];;
val suits : Suit list = [Heart; Diamond; Spade; Club]
你也可以利用union case把可选的数据关联起来,比如下面的例子,在一副牌中,每张牌都都有四种类型。除了A、J、Q、K四张牌外,剩下的1到10都可以利用一个元组类型来关联四种牌型。
type PlayingCard =
| Ace of Suit
| King of Suit
| Queen of Suit
| Jack of Suit
| ValueCard of int * Suit
> let deckOfCards =
- [
- for suit in [ Spade; Club; Heart; Diamond