"type Task x a = Task"任务的Elm实现中是什么意思?



在这个Github示例中,任务类型定义如下:

type Task x a = Task

然后遵循几个使用此类型的函数。

任务类型应该如何理解?

定义类型为

是什么意思?

type Foo a b = Foo

任务是一个特定的情况下,我们依赖于任务的原生javascript实现?

任务是一个特定的情况下,我们依赖于任务的原生javascript实现?

。您会注意到,从模块导出的是类型Task,而不是标签Task(右边的东西),因此您实际上无法访问后者。它是一个占位符,让类型系统满意。

相反,原生JavaScript实现知道任务真正的是什么,这是一个JS对象。任何处理任务的本地模块(Task模块或任何第三方库,如elm-http)都是秘密。但是,Task模块导出了大量的辅助函数,您可以仅使用已发布的库对任务进行大量控制。

澄清编辑:是的,你需要使用第三方库来获得一个在外部世界实际起作用的任务。要实际运行该任务,您需要将其发送到端口;直到你做到这一点,任务只是一个描述要做的工作。

似乎它正在创建一种通配符。

在以下代码中:

import  Html exposing (..)
type Dog a = Fido
myFunc: Dog Int -> String
myFunc myDog =
  "Wouf Wouf" 
main = text (myFunc Fido)

myFunc期望Dog Int。然后,您可以将Fido发送给该方法。