榆树是什么" x"在签名类型?

时间:2016-06-16 06:10:07

标签: elm

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

签名为now : Task x Time,您可以看到here

无法弄清楚如何搜索它,因为他们在任何地方使用x作为变量名称,我通常可以在解析器代码中找到合适的位置,但是跟随它会有很多困难。

2 个答案:

答案 0 :(得分:5)

x类型是所谓的type parameter。这意味着该类型尚未定义。

在您的特定情况下,类型Task的定义,Task之后的第一个类型表示异步操作可能失败的类型。

在定义函数时,此类型尚未完全定义。在程序中,您可以自由地使用所需类型的错误类型

答案 1 :(得分: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输出:为此,您需要在MyMsg函数中包含update处理程序。