榆树语言签名中的多行类型(没有箭头)是什么意思?

ban*_*cee 6 elm

在榆树语言中,我很难解释我的问题......在榆树的这些片段中:我理解签名之类的东西

update : Msg -> Model -> Model
Run Code Online (Sandbox Code Playgroud)

其中参数/输出由箭头分隔,但我如何阅读/理解如下:

Sub Msg
Program Never Model Msg
Run Code Online (Sandbox Code Playgroud)

在:

main : Program Never Model Msg
main =
    program
        { init = init
        , view = view
        , update = update
        , subscriptions = subscriptions
        }

subscriptions : Model -> Sub Msg
subscriptions model =
    Sub.none
Run Code Online (Sandbox Code Playgroud)

Cha*_*ert 12

在类型签名中,参数类型由->,最后一个类型是返回值.

如果没有 ->符号,则表示它是该类型的值.在您的main示例中,类型mainProgram Never Model Msg.它没有箭头,所以它不需要参数.

现在,类型注释中的每个参数和返回值可能有几个由空格分隔的内容,如您的main示例所示.最左边是类型,后跟由空格分隔的类型参数.

Program Never Model Msg
   |      |     |    |
   |      ------|-----
 type    type parameters
Run Code Online (Sandbox Code Playgroud)

类型参数类似于C#等语言中的泛型.C#中的等效语法是:

void Program<Never, Model, Msg>()
Run Code Online (Sandbox Code Playgroud)

C#没有直接关联,因为它有一种不同的约束泛型类型参数的方式,但总体思路成立.

榆树指南目前没有大量的信息,但这里是关于类型部分.

  • 你可以那样说.或者`Model - > Sub Msg`采用`Model`,并返回一个类型`Sub Msg`.其中`Msg`就像一个子类型(或类型参数,如@ChadGilbert所说).该函数输出一个由elm运行时处理的订阅(`Sub`).然后,elm运行时将向您的更新函数传递类型为"Msg"的消息.视图函数中的`Html Msg`是类似的.`Html`呈现给DOM.来自用户交互的任何消息(如点击)都将是"Msg"类型. (2认同)

pda*_*moc 6

Sub Msg,List Int,Program Never Model Msg

Sub,ListProgram是类型构造.您可以将它们视为采用类型并返回其他类型的函数.

就其本身而言,Sub,ListProgram不完全型.它们就像是一块拼错的拼图.当一个人添加缺失的部分时,拼图就完成了.

我通常使用的字读他们在我的脑海of中一个ListIntS,A ProgramNever,ModelMsg.