民间故事有IO monad吗?

时间:2015-11-08 16:55:34

标签: javascript functional-programming folktale

我一直在探索folktale库并找到了大量有用的结构。通过control.asyncdata.task使用任务后,我想使用IO monad,但似乎无法找到它。考虑到民间故事的丰富程度,我很惊讶并且想知道我是否只是没有看到它。

民间故事中是否有IO monad?

1 个答案:

答案 0 :(得分:6)

在Haskell中,IO monad由运行时提供(并且固有地绑定)。 Folktale不提供运行时功能的功能等价物,但是其他任务和IO用于相同的目的。 Haskell 中的IO操作可以是异步的,因此我们可以说它与Haskell的IO更相似,例如,monet.js中的IO monad。

一个区别是Task提供了错误处理,而IO monad则没有。

您可以使用JS中的任务编程,方法与使用IO操作在Haskell中编程的方式相同。您只需要使用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)