来自`targetChecked`的Bool如何变成'Action`?

时间:2015-11-17 10:43:25

标签: functional-programming elm

Elm checkboxes example中,Action传递给tag函数的checkbox参数(第51-53行)。

我不明白这个参数的类型签名是(Bool -> Action)以及第69行如何能够使用函数组合运算符<<从{Bool转换targetChecked 1}}进入完整的Action类型。

编辑:

这个问题可以简化为“为什么以下工作?”

type Action = Edit Int

do : (Int -> Action) -> Action
do tag = tag(123)

result : Action
result = do(Edit)

1 个答案:

答案 0 :(得分:5)

定义联合类型时,联合类型的每个标记都将成为定义的值。所以当你定义:

type Action = Tick | NoOp

这也定义了:

Tick : Action
NoOp : Action

当union标签有参数时,它变成一个&#34;构造函数&#34;,一个函数:

type Action = Edit Int
Edit : Int -> Action

(这些标记也可用作您可以与case - of构造匹配的模式。另请参阅documentation on the website。)