为什么写“Html msg”而不是“Html a”是不恰当的?

时间:2017-07-01 14:39:43

标签: elm

我是榆树的初学者。这是一个关于风格的问题,而不是一些有效的方法。

例如,在http://elm-lang.org/examples/form我们有

viewValidation : Model -> Html msg

我知道这已经完成,因此viewValidation model可以与Html Msg类型的值共存于同一列表中。但是,由于msg这里只是一个类型变量,为什么不使用更传统的a

msg打算传达哪些额外信息?

1 个答案:

答案 0 :(得分:2)

Elm Architecture鼓励对ModelMsg等类型进行一致的命名,以传达其含义。使用小写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概述了框架如何使用ModelMsg类型来携带状态并指出要执行的操作的非常明确的意图。通过文档一致地使用小写msgmodel,可以更容易地理解其中的内容。

考虑更多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的文档那样解释,它提供了关于MsgModel的强大提示类型将去。