如何使F#区别联盟脱离另一种类型的联合案例?

roy*_*yco 3 f#

想象一下这个受歧视的联盟:

type Direction = 
    | North
    | South
    | East
    | West
Run Code Online (Sandbox Code Playgroud)

现在假设我想要一种只接受(北,南)或(东,西)元组的类型.也许这将描述仅从北向南或从东向西的火车路线.(北,东)和(南,西)应该是禁止的,也许是因为火车不像那样运行.

这不起作用:

type TrainLines = 
    | North, South
    | East, West
Run Code Online (Sandbox Code Playgroud)

即使这不起作用,也许你可以看到我正在尝试做什么.

这有效,但不仅限于(北,南)和(东,西)的可能性:

type TrainLines = Direction * Direction
Run Code Online (Sandbox Code Playgroud)

任何指导都会受到欢迎.

Bri*_*ian 10

这不是你要求的,但我认为这可能是

type TrainLines =
    | NorthSouth
    | EastWest
Run Code Online (Sandbox Code Playgroud)

你会好的吗?如果需要,你可以添加例如

    with member this.Directions =
           match this with
           | NorthSouth -> [North; South]
           | EastWest -> [East; West]
Run Code Online (Sandbox Code Playgroud)