【发布时间】:2019-11-23 13:05:29
【问题描述】:
我正在自学榆树,并且看到(当然)很多引用 Html msg--
我知道这是一个“参数化类型”,也就是说(据我所知)Html 类型的构造函数接受一个参数——就像List Char 一样。
好的。但随后在一些教程中,我看到他们很快将msg 更改为自定义类型,通常是这样的(我是凭记忆这样做的,所以请原谅我):
Html Msg
Msg 可能被定义为
type Msg =
Something | SomethingElse
我在这里也看到了——https://discourse.elm-lang.org/t/html-msg-vs-html-msg/2758——他们说
小写的 msg 称为类型变量。大写的 Msg 被称为具体类型 - 它是您的应用程序定义的。
这部分回答了我的问题,但有人可以详细说明这究竟意味着什么吗?因为当我看到List String 之类的东西时,我明白String 在这种情况下是什么意思,但我不明白msg 在Html msg 中的含义。
另外,我们不是在改变函数返回值的类型吗?也就是说,如果 Elm 运行时期望 view 返回某个类型,而该类型是 Html msg,如果我们将返回类型更改为 Html Whatever,为什么会这样呢? (例如,我们不能随意将函数的返回值从List String 更改为List Number,对吧?)
来自 OOP 和 C、TypeScript 等类型语言的背景,我认为任何Msg 都需要以某种方式与msg 相关,即以某种方式“扩展”它以允许多态性.显然我看错了,任何解释都将不胜感激!
【问题讨论】:
标签: elm parametric-polymorphism