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

时间:2016-11-17 21:19:24

标签: elm

在榆树语言中,我很难解释我的问题...... 在这些榆树片段中: 我理解像

这样的签名
update : Msg -> Model -> Model

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

Sub Msg
Program Never Model Msg

在:

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

subscriptions : Model -> Sub Msg
subscriptions model =
    Sub.none

2 个答案:

答案 0 :(得分:11)

在类型签名中,参数类型由->分隔,最后一种类型为返回值。

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

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

Program Never Model Msg
   |      |     |    |
   |      ------|-----
 type    type parameters

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

void Program<Never, Model, Msg>()

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

榆树指南目前没有大量信息,但这里是section talking about types

答案 1 :(得分:6)

Sub MsgList IntProgram Never Model Msg

SubListProgram是类型构造函数。您可以将它们视为采用类型并返回其他类型的函数。

单独SubListProgram不是完整类型。它们就像是一块拼错的拼图。当一个人添加缺失的部分时,拼图就完成了。

我通常使用of中的List一词,Int Program Never Model,{{1} }和Msg