javascript - folktale 有 IO monad 吗?

标签 javascript functional-programming folktale

我一直在探索 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/

相关文章:

django - 我可以使用函数式语言开始 Web 开发吗?

javascript - 如何从 Crocks javascript 库中的 Monads 中提取值

javascript - λ : folktale data. 任务 - 应用未知数量的任务

javascript - 使用javascript创建动态多维关联数组

javascript - 如何用 Accordion 制作 slider ?

.net - 功能范式的效率

javascript - 在 Javascript 中,为什么我不能用 f(f) 替换 x => f(f)(x) ?

javascript - `Either` 类型可以转换为 `Task` 类型吗?

javascript - 刷新数据表错误

javascript - 从 iframe 中获取浏览器窗口的可用高度