Elm 主函数类型注解

Elm main function type annotation

这个Elm例子的main函数类型注解是什么意思?

main : Html msg
main =
    div [] [ text "1" ]

什么是 Html 和 msg?

首先,那个不是函数,因为它不接受任何参数。

但是,类型注释表示 main 属于 Html 类型,具有未知变体 msg.

Html 是类型,如 IntStringmsg 是类型变体。

有些类型可以有变体,以List a为例。

List a 表示您要声明一个 List,其中类型变体不相关或未知。例如,List.length 方法的类型注释是:

length : List a -> Int

当您使用此方法时,您肯定会得到一个类型而不是 a,例如 StringInt 或其他,根据 [=27 的行为=] 不变。

那么请不要被 Htmlmsg 搞糊涂了。它具有相同的含义。在 Elm 中,您呈现 html 可能会发送一些消息的代码,并且您通常将它们定义为联合类型,例如:

type Msg
  = ClickedSave
  | EnteredText String

因此,您的主要声明可以保留 Html msgHtml a,直到您发送消息。

例如,如果您向 div 添加一个 onClick 处理程序,例如:

main =
    div [ onClick ClickedSave ] [ text "1" ]

类型注释变为(无论你是否注释它)Html Msg,因为现在你发送的消息是类型 Msg.

希望它清楚,对不起我的英语,它不是我的母语。