reader fixes
This commit is contained in:
parent
1fec16c29c
commit
b2d5ece8f0
1 changed files with 15 additions and 4 deletions
|
@ -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>}
|
||||||
|
|
Loading…
Add table
Reference in a new issue