4

私は民話ライブラリを探索しており、有用な構成要素が豊富にあることを発見しました。control.asyncおよびdata.taskを介して Tasks を使用した後、IO モナドを使用したかったのですが、見つからないようです。民話の豊かさを考えると、私はそれを見ていないだけなのだろうかと驚いています。

民話に IO モナドはありますか?

4

1 に答える 1

7

Haskell では、IO モナドはランタイムによって提供されます (そして本質的にバインドされます)。Folktale はランタイム関数に相当する機能を提供していませんが、それ以外の場合、タスクと IO は同じ目的を果たします。Haskell の IO アクションは非同期にできるため、たとえば monet.js の IO モナドよりも Haskell の IO に似ていると言えます。

違いの 1 つは、Taskエラー処理を提供するのに対し、IO モナドには提供しないことです。

IO アクションを使用して Haskell でプログラミングするのと同じ方法で、JS でタスクを使用してプログラミングできます。タスクを使用して使用するすべての非純粋なランタイム関数を定義する必要があるだけです。

たとえば、入力を出力するだけで何も返さない、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)
于 2017-01-18T08:35:22.427 に答える