`targetChecked` 中的 Bool 如何变成 `Action`?

How does the Bool from `targetChecked` get turned into an `Action`?

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

我不明白这个参数的类型签名是如何 (Bool -> Action) 以及它如何在第 69 行使用函数组合运算符 <<BooltargetChecked 变成完整的 Action 类型。

编辑:

这个问题可以简化为"why does the following work?"

type Action = Edit Int

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

result : Action
result = do(Edit)

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

type Action = Tick | NoOp

这也定义了:

Tick : Action
NoOp : Action

当联合标签有参数时,它变成了一个"constructor",一个函数:

type Action = Edit Int
Edit : Int -> Action

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