Как Bool из targetChecked превращается в Action?

В примере флажков Elm Action передается аргументу tag функции checkbox (строки 51-51). 53).

Я не понимаю, как сигнатура типа для этого аргумента является (Bool -> Action) и как в строке 69 он может использовать оператор композиции функций << для преобразования Bool из targetChecked в полный тип Action.

РЕДАКТИРОВАТЬ:

Этот вопрос можно свести к «почему следующее работает?»

type Action = Edit Int

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

result : Action
result = do(Edit)

person Damian W    schedule 17.11.2015    source источник
comment
Похоже, это связано с помеченными объединениями.   -  person Damian W    schedule 17.11.2015


Ответы (1)


Когда вы определяете тип объединения, каждый тег типа объединения становится определенным значением. Итак, когда вы определяете:

type Action = Tick | NoOp

это также определяет:

Tick : Action
NoOp : Action

Когда у тега union есть аргументы, он становится «конструктором», функцией:

type Action = Edit Int
Edit : Int -> Action

(Эти теги также используются в качестве шаблонов, которые можно сопоставить с конструкцией case-of. См. также документация на веб-сайте. )

person Apanatshka    schedule 17.11.2015