我是埃尔姆的初学者。这是一个关于风格的问题,而不是什么东西是如何工作的。
例如,在http://elm-lang.org/examples/form中
viewValidation : Model -> Html msg
我知道这样做是为了使viewValidation model可以与Html Msg类型的值在同一个列表中共存。但是,既然这里的msg只是一个类型变量,为什么不使用更传统的a?
msg打算传达什么额外的信息?
发布于 2017-07-01 15:10:53
Elm鼓励对Model和Msg这样的类型进行一致的命名,以表达它们的意义。小写msg的使用只会使它更加清楚其意图。
它很有可能被命名为a,但可以说这并不能传达那么多的信息。
编辑
为了更详细地说明,请考虑elm-lang/html包的文档。
让我们看一下Html.program的定义
program :
{ init : (model, Cmd msg)
, update : msg -> model -> (model, Cmd msg)
, subscriptions : model -> Sub msg
, view : model -> Html msg
} -> Program Never model msg榆树建筑概述了框架如何使用Model和Msg类型来携带状态的非常明确的意图,并指出了要执行的操作。通过在文档中始终如一地使用小写msg和model,可以更容易地理解哪里会发生什么。
考虑一种更类似Haskellesque的方法,在这种方法中,类型参数通常是从a开始缩略的。
program :
{ init : (a, Cmd b)
, update : b -> a -> (a, Cmd b)
, subscriptions : a -> Sub b
, view : a -> Html b
} -> Program Never a b这个定义是完全正确的,但我认为它不像program的文档那样具有解释性,它提供了关于Msg和Model类型的方向的有力提示。
https://stackoverflow.com/questions/44862143
复制相似问题