Elm主要功能类型注释

dja*_*per 2 elm

这个Elm示例的主要函数类型注释的含义是什么?

main : Html msg
main =
    div [] [ text "1" ]
Run Code Online (Sandbox Code Playgroud)

HTML和味精是什么?

0xc*_*m1z 6

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

但是,类型注释是说mainis的类型Html具有未知变量msg

Html是类型,例如IntString,并且msg是类型变体。

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

List a表示您正在声明List类型变体无关或未知的位置。例如,List.length方法的类型注释为:

length : List a -> Int
Run Code Online (Sandbox Code Playgroud)

当您使用此方法时,由于的行为不变,因此您肯定会拥有类型而不是a,例如String或之类的。Intlength

不要被当时的困惑msgHtml。它具有相同的含义。在Elm中,您渲染可能会分发某些消息的html代码,并且通常将它们定义为联合类型,例如:

type Msg
  = ClickedSave
  | EnteredText String
Run Code Online (Sandbox Code Playgroud)

因此,您的主声明可以保留Html msg,或者Html a直到您调度消息为止。

例如,如果您将一个onClick处理程序添加到您的divlike:

main =
    div [ onClick ClickedSave ] [ text "1" ]
Run Code Online (Sandbox Code Playgroud)

类型注释成为(无论您是否注释)Html Msg,因为现在您分派的消息是type Msg

希望一切都清楚,对不起我的英语,这不是我的母语。

  • 在一种咖喱语言中,一个函数只有一个参数。带有多个参数的函数只是返回另一个函数的函数的语法糖,依此类推,每个函数都带有一个参数。但是对于没有参数的“功能”,不可能有这样的糖,因为必须至少有一个。因此,从技术上来说,它不是函数是正确的,但指出纯语言中的有效实现细节似乎有些古怪。 (3认同)