我一直在探索 folktale库并找到了大量有用的结构。通过 control.async 使用任务后和 data.task ,我想使用 IO monad,但似乎找不到。鉴于民间故事的丰富程度,我很惊讶并想知道我是否只是没有看到它。
民间故事中有 IO monad 吗?
最佳答案
在 Haskell 中,IO monad 由运行时提供(并且固有地绑定(bind)到)。 Folktale 不提供运行时函数的等价物,但 Task 和 IO 的作用相同。 Haskell 中的 IO 操作可以是异步的,因此我们可以说它比例如 monet.js 中的 IO monad 更类似于 Haskell 的 IO。
一个区别是 Task
提供错误处理,而 IO monad 不提供。
您可以在 JS 中使用 Tasks 进行编程,就像在 Haskell 中使用 IO 操作进行编程一样。您只需要定义所有使用任务的非纯运行时函数。
例如,函数print
, (print::Show a => a -> IO ()
) 由 Haskell 运行时提供,它只打印其输入并且不返回任何内容。我们可以使用 tasks 在 JS 中编写类似的功能。它可能看起来像这样。
// Definition
const print = (input) => Task.task(r => {
console.log(String(input))
r.resolve(undefined)
})
// Usage
const main = Task.of("Hello world").chain(print)
关于javascript - folktale 有 IO monad 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596471/