"Program is a type parameterized by three type variables: flags, model, and msg" 在 Elm 语言中是什么意思?
What does "Program is a type parameterized by three type variables: flags, model, and msg" mean in the Elm language?
我正在学习 Elm,通过 Fairbank 的"Programming Elm"(https://pragprog.com/book/jfelm/programming-elm), and going through some of the same growing pains as the person who posted ——@dogbert 的回复指出
Program is a type parameterized by three type variables
这到底是什么意思?是不是说Program是一个函数,它的参数的类型就是三个类型变量?
因此
main: Program () {something: string} msg
说 Program
只接受空标志、具有给定类型的模型和消息?
(顺便说一句,在这种情况下,main
的类型是什么?也就是说,它是Program类型的函数?)
这本书的好处 "Programming with Elm" 是它可以让你快速入门,但不是很好的地方是它介绍了一些东西 - 就像上面 - 没有深入细节关于什么,确切地,他们的意思。我想我真的应该从阅读 elm 站点上的教程开始,这是我的下一个目的地。但如有任何帮助,我们将不胜感激。
Program
是一种类型。这意味着我们可以拥有 Program
类型的值,例如
main: Program () {something: String} msg
main =
Browser.sandbox { init = init, update = update, view = view }
在 Elm 中,main
不是函数。相反,它通常提供几个函数供运行时调用:
- 首先,运行时调用
init
,传入任何标志并初始化模型。
- 然后调用
view
,将模型作为参数传递,生成 HTML 进行显示。
- 每当您的程序需要对某事做出反应(例如按钮单击等事件)时,运行时都会使用当前模型调用
update
并显示一条消息指示发生了什么。 update
return 一个新模型,运行时相应地更新其状态,然后调用 view
更新 DOM。
并不是所有的 Elm 程序都需要所有这些,可能还有其他的(比如订阅),但要点是,而不是让一个 main
函数在你的程序运行时调用(如在许多其他语言中),Elm 程序依赖于 Elm 运行时来管理它们的生命周期。
现在更多关于 Program
类型的参数(称为 类型变量 )。需要一些时间来习惯 Elm 作为一种纯函数式语言处理类型的方式。
也许 List a
类型是一个更相关的例子。 Elm 的列表只能包含相同类型的元素。此类型被指定为 a
到 List
的参数,因此编译器可以验证我们不会在其中放置任何其他内容。
所以你可以有一个 List String
或 List Int
:
类型的值
messages : List String
messages =
["Hello!", "Goodbye"]
primes : List Int
primes =
[2, 3, 5, 7]
同样,Program
被参数化以指定它接受的标志、模型和消息的种类。这样,Elm 编译器可以验证 view
、update
等在 main
函数中给出的关于它们的参数和 return 类型的行为方式, Elm 运行时可以确保它向您的程序传递正确的参数(例如标志)。
阅读有关类型变量的更多信息 here。
我正在学习 Elm,通过 Fairbank 的"Programming Elm"(https://pragprog.com/book/jfelm/programming-elm), and going through some of the same growing pains as the person who posted
Program is a type parameterized by three type variables
这到底是什么意思?是不是说Program是一个函数,它的参数的类型就是三个类型变量?
因此
main: Program () {something: string} msg
说 Program
只接受空标志、具有给定类型的模型和消息?
(顺便说一句,在这种情况下,main
的类型是什么?也就是说,它是Program类型的函数?)
这本书的好处 "Programming with Elm" 是它可以让你快速入门,但不是很好的地方是它介绍了一些东西 - 就像上面 - 没有深入细节关于什么,确切地,他们的意思。我想我真的应该从阅读 elm 站点上的教程开始,这是我的下一个目的地。但如有任何帮助,我们将不胜感激。
Program
是一种类型。这意味着我们可以拥有 Program
类型的值,例如
main: Program () {something: String} msg
main =
Browser.sandbox { init = init, update = update, view = view }
在 Elm 中,main
不是函数。相反,它通常提供几个函数供运行时调用:
- 首先,运行时调用
init
,传入任何标志并初始化模型。 - 然后调用
view
,将模型作为参数传递,生成 HTML 进行显示。 - 每当您的程序需要对某事做出反应(例如按钮单击等事件)时,运行时都会使用当前模型调用
update
并显示一条消息指示发生了什么。update
return 一个新模型,运行时相应地更新其状态,然后调用view
更新 DOM。
并不是所有的 Elm 程序都需要所有这些,可能还有其他的(比如订阅),但要点是,而不是让一个 main
函数在你的程序运行时调用(如在许多其他语言中),Elm 程序依赖于 Elm 运行时来管理它们的生命周期。
现在更多关于 Program
类型的参数(称为 类型变量 )。需要一些时间来习惯 Elm 作为一种纯函数式语言处理类型的方式。
也许 List a
类型是一个更相关的例子。 Elm 的列表只能包含相同类型的元素。此类型被指定为 a
到 List
的参数,因此编译器可以验证我们不会在其中放置任何其他内容。
所以你可以有一个 List String
或 List Int
:
messages : List String
messages =
["Hello!", "Goodbye"]
primes : List Int
primes =
[2, 3, 5, 7]
同样,Program
被参数化以指定它接受的标志、模型和消息的种类。这样,Elm 编译器可以验证 view
、update
等在 main
函数中给出的关于它们的参数和 return 类型的行为方式, Elm 运行时可以确保它向您的程序传递正确的参数(例如标志)。
阅读有关类型变量的更多信息 here。