reader fixes

This commit is contained in:
Rowan 2025-04-06 20:34:12 -05:00
parent 1fec16c29c
commit b2d5ece8f0

View file

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