Skip to content

Latest commit

 

History

History
54 lines (35 loc) · 2.68 KB

API.md

File metadata and controls

54 lines (35 loc) · 2.68 KB

fromFLType

(FLType[, listOfMethodsThatShouldBeGenerated]) → TypeObject

Полчает тип Fantasy Land — возвращает тип для Static Land.

import {fromFLType} from 'static-land'
import IdFL from 'fantasy-land/id'

const Id = fromFLType(IdFL)

Id.map(x => x + 41, Id.of(1)) // IdFL(42)

runGenerator

(TypeObject, generator) → typeValue

Что-то типа вызова do в Хаскеле для монад Static Land основанных на генераторах.

TypeObject должен реализовать ChainRec или Chain. Если ChainRec доступен, вы можете цикл с большим количеством итераций в генераторе. Функция generator должна yield и return значения, которые TypeObject использует как значения.

import {runGenerator} from 'static-land'

const List = {

  of(x) {
    return [x]
  },

  chain(f, list) {
    return list.reduce((acc, input) => acc.concat(f(input)), [])
  },

}

runGenerator(List, function*() {
  const x = yield [1, 2]
  const y = yield [3, 4]
  return [x * y]
}) // -> [3, 4, 6, 8]

runGenerator(List, function*() {
  const x = yield [1, -2, 3]
  return x > 0 ? [x * 2] : []
}) // -> [2, 6]

Имейте в виду, что для монад, которые представляют несколько значений (например, List или Observable) функция generator может быть выполнена несколько раз, так что убедитесь, что она чистая. Для монад с оним и меньше значений (например, Future или Maybe) можно с уверенностью предположить, что функция generator выполняется только один раз.

Предупреждение: из-за того как работают генераторы в JavaScript, сложно реализовать runGenerator(), которая одновременно работает для любой монады и эффективна по ресурсам. Эта реализация может потреблять много памяти и ресурсов процессора, в некоторых случаях. Рекомендуется использовать её только для образовательных целей и не использовать ее в реальных программах.