diff --git a/src/algebra/reader.js b/src/algebra/reader.js index 16448b8..875a969 100644 --- a/src/algebra/reader.js +++ b/src/algebra/reader.js @@ -1,7 +1,7 @@ import { id } from './fn.js' import { Algebra, Monad } from './index.js' -/** @import { InferredMorphism } from './types.js' */ +/** @import { InferredMorphism, Morphism } from './types.js' */ /** * @template T @@ -12,9 +12,7 @@ import { Algebra, Monad } from './index.js' export class Reader extends Algebra(Monad) { #run - /** - * @param {InferredMorphism} run - */ + /** @param {InferredMorphism} run */ constructor(run) { super() @@ -51,6 +49,19 @@ export class Reader extends Algebra(Monad) { return new Reader(env => f(this.#run(env)).run(env)) } + /** + * @template R + * @param {Reader<(v: T) => R>} other + * @returns {Reader} + */ + ap(other) { + return new Reader( + // FIXME: type errors + // @ts-ignore + env => other.run(env)(this.run(env)) + ) + } + /** * @param {InferredMorphism} f * @returns {Reader}