У сказки есть монада IO?

Я изучал сказочную библиотеку и нашел множество полезных конструкций. После использования Задач через control.async и data.task я хотел использовать монаду ввода-вывода, но, похоже, не могу ее найти. Учитывая, насколько богата сказка, я удивляюсь и удивляюсь, не вижу ли я ее просто так.

Есть ли в народной сказке монада IO?

1 ответ

В Haskell монада ввода-вывода обеспечивается (и неотъемлемо связана с) средой выполнения. Folktale не предоставляет функциональных эквивалентов для функций времени выполнения, но в противном случае Task и IO служат одной и той же цели. Действие IO в Haskell может быть асинхронным, поэтому мы можем сказать, что оно даже больше похоже на IO Haskell, чем, например, монада IO в monet.js.

Одно отличие состоит в том, что Task обеспечивает обработку ошибок, а монада ввода-вывода - нет.

Вы можете программировать, используя Задачи в JS, так же, как вы программируете в Haskell, используя действия ввода-вывода. Вам просто нужно определить все нечистые функции времени выполнения, которые вы используете с помощью Задач.

Например, возьмите функцию print, (print :: Show a => a -> IO ()), предоставляемый средой выполнения Haskell, которая просто печатает свой ввод и ничего не возвращает. Мы можем написать аналогичную функцию в JS, используя задачи. Вероятно, это будет выглядеть примерно так.

// Definition
const print = (input) => Task.task(r => {
    console.log(String(input))
    r.resolve(undefined)
})

// Usage
const main = Task.of("Hello world").chain(print)
Другие вопросы по тегам