我一直在探索民间故事图书馆,发现了许多有用的结构。通过control.async和data.task使用任务后,我想使用 IO monad,但似乎找不到它。鉴于民间故事有多么丰富,我很惊讶,想知道我是否只是没有看到它。
民间故事中有 IO 单子吗?
我一直在探索民间故事图书馆,发现了许多有用的结构。通过control.async和data.task使用任务后,我想使用 IO monad,但似乎找不到它。鉴于民间故事有多么丰富,我很惊讶,想知道我是否只是没有看到它。
民间故事中有 IO 单子吗?
在 Haskell 中,IO monad 由运行时提供(并且固有地绑定到)。Folktale 没有为运行时函数提供等效的功能,但是 Task 和 IO 具有相同的目的。Haskell 中的 IO 操作可以是异步的,因此我们可以说它与 Haskell 的 IO 更相似,而不是 monet.js 中的 IO monad。
一个区别是它Task
提供了错误处理,而 IO monad 没有。
您可以在 JS 中使用 Tasks 进行编程,就像在 Haskell 中使用 IO 操作进行编程一样。您只需要定义所有使用 Tasks 使用的不纯运行时函数。
例如,以 Haskell 运行时提供的函数print
, ( print :: Show a => a -> IO ()
) 为例,它只打印其输入并且不返回任何内容。我们可以在 JS 中编写类似的函数,使用任务。它可能看起来像这样。
// Definition
const print = (input) => Task.task(r => {
console.log(String(input))
r.resolve(undefined)
})
// Usage
const main = Task.of("Hello world").chain(print)