我是榆树的初学者。这是一个关于风格的问题,而不是一些有效的方法。
例如,在http://elm-lang.org/examples/form我们有
viewValidation : Model -> Html msg
我知道这已经完成,因此viewValidation model
可以与Html Msg
类型的值共存于同一列表中。但是,由于msg
这里只是一个类型变量,为什么不使用更传统的a
?
msg
打算传达哪些额外信息?
答案 0 :(得分:2)
Elm Architecture鼓励对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
The Elm Architecture概述了框架如何使用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
的强大提示类型将去。