Elm中类型签名中的"x"代表什么?

6

试图找出如何获取当前时间,我找到了方法,但不知道如何读取类型签名。

类型签名是 now : Task x Time 你可以在这里看到。

由于他们在所有地方使用x作为变量名,因此无法确定如何搜索它,通常我可以在解析器代码中找到正确的位置,但很难跟踪它。

2个回答

5
类型x是所谓的类型参数。这意味着该类型尚未定义。
在您的特定情况下,类型任务(Task)的定义中,紧随Task之后的第一个类型表示您的异步操作可能失败的类型。
在函数定义时,此类型尚未完全定义。在您的程序中,您可以自由地使用任何错误类型。

3

定义:

now : Task x Time

意思(大致翻译):

Time.now 是一个任务,执行时会给你以下两种输出之一:

  • 如果失败,则输出类型为 x 的结果。
  • 如果成功,则输出类型为 Time 的结果。

由于 Time.now 任务永远不会失败,因此错误类型无关紧要。 在 Elm 中,小写类型(abxcomparablemsg)表示该类型可以是任何类型,即函数可以使用不同类型的参数。

  • msg 表示消息类型。
  • comparable 表示必须是一种可以比较两个值的类型(例如,如果函数对该类型的两个值进行比较,以确定哪个更大等)。

这对输入类型很有意义。但对于输出类型来说就不太合适了。我想在这种情况下,x 更多地表示“不适用”。Task 类型需要一个错误输出类型,但在这种情况下,它是无关紧要的。

补充说明:要实际获取当前时间,您需要再进行两个步骤:

  1. 执行任务,返回一个 Cmd
    timeCmd = Task.perform identity MyMsg Time.now
    这将执行时间任务,并将结果时间包装在 Cmd MyMsg 中。

  2. 处理 Cmd 输出:为此,您需要在 update 函数中包含一个 MyMsg 处理程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接