民间故事有IO monad吗

Does folktale have an IO monad?

本文关键字:monad IO 民间故事      更新时间:2023-09-26

我一直在探索民间故事库,发现了大量有用的结构。在通过control.async和data.task使用Tasks后,我想使用IO monad,但似乎找不到。鉴于民间故事如此丰富,我很惊讶,想知道我是否只是没有看到它。

民间传说中有IO monad吗?

在Haskell中,IO monad由运行时提供(并固有地绑定到)。Folktale没有为运行时功能提供功能等价物,但任务和IO具有相同的用途。Haskell中的IO操作可以是异步的,所以我们可以说它甚至比monet.js中的IO monad更类似于Haskell的IO

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

您可以在JS中使用Tasks进行编程,就像在Haskell中使用IO操作进行编程一样。您只需要定义使用Tasks使用的所有不纯净的运行时函数。

例如,以Haskell运行时提供的函数printprint :: 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)