为什么写 `Html msg` 而不是 `Html a` 是惯用的?

Why is it idiomatic to write `Html msg` instead of `Html a`?

我是 Elm 的初学者。这是关于风格的问题,而不是关于事物如何运作的问题。

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

viewValidation : Model -> Html msg

我知道这样做是为了 viewValidation model 可以与 Html Msg 类型的值共存于同一个列表中。但是,既然这里的 msg 只是一个类型变量,为什么不用更传统的 a 呢?

msg 想要传达什么额外信息?

Elm 架构鼓励对 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 的文档那样具有解释性,它提供了关于您的 Msg 和 [=12] 位置的强烈提示=]类型要走了。