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

4
在这个Github示例中,Task类型定义如下: type Task x a = Task 然后有几个使用该类型的函数。
Task类型应该如何理解?
当我们定义一个类型为 type Foo a b = Foo时,这意味着什么?
Task是否是一种特殊情况,依赖于原生javascript实现的Task?
2个回答

6
任务(Task)是一种特定情况,我们依靠本机JavaScript实现来处理任务。确切地说,你会注意到模块中导出的是类型Task,而不是对象Task(在右边的那个部分),因此你无法实际访问后者。它仅仅是一个占位符,以使类型系统正常工作。
相反,本机JavaScript实现知道任务的真正含义,即JS对象。任何处理任务的本机模块(无论是Task模块还是像elm-http这样的第三方库)都知道这个秘密。但是,Task模块导出了大量帮助函数,使你可以使用已经发布的库来控制任务。
澄清编辑:是的,你需要使用第三方库才能获得实际在外部世界中产生效果的任务。要实际运行该任务,你需要将其发送给端口;在这之前,任务只是描述要完成的工作。

如果我理解正确,异步任务只能从JS端创建。是吗? - Martinos
也感觉像任务意味着许多东西:任务的结果和任务本身(异步过程)。我很难理解任务的概念。 - Martinos
2
@Martinos:从Elm用户的角度来看,任务只是数据。它是描述异步过程的值,一旦以正确的方式移交给端口,运行时将解释任务以实际运行它。 - Apanatshka
我想我需要再深思熟虑一下。感谢你的回答。 - Martinos

0

看起来它正在创建一种通配符。

在下面的代码中:

import  Html exposing (..)

type Dog a = Fido

myFunc: Dog Int -> String
myFunc myDog =
  "Wouf Wouf" 

main = text (myFunc Fido)

myFunc 需要一个 Dog Int。然后你可以将 Fido 传递给这个方法。


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