Skip to content

Commit fe301da

Browse files
committed
belief-system-monad.ts
1 parent 5b40717 commit fe301da

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

TODO.md

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
> - https://github.com/cicada-lang/propagator/issues/3
44
5-
belief-system-monad.ts
65
barometer-belief-system.test.ts
76
`beliefSystemQuery`
87

src/monads/belief-monad.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { bind, fmap, join } from "../monad/index.js"
55
import { setUnion } from "../utils/Set.js"
66
import { isFunction } from "../utils/isFunction.js"
77

8-
defineHandler(fmap, [isFunction, isBelief], (f, ma: Belief<any>) =>
8+
defineHandler(fmap, [isFunction, isBelief], (f, ma) =>
99
Belief(bind(ma.value, f), ma.reason),
1010
)
1111

src/monads/belief-system-monad.ts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { BeliefSystem, isBeliefSystem } from "../belief-system/index.js"
2+
import { Belief } from "../belief/index.js"
3+
import { defineHandler } from "../generic/index.js"
4+
import { fmap, join } from "../monad/index.js"
5+
import { isFunction } from "../utils/isFunction.js"
6+
7+
defineHandler(fmap, [isFunction, isBeliefSystem], (f, ma: BeliefSystem<any>) =>
8+
BeliefSystem(ma.beliefs.map((belief) => fmap(f, belief))),
9+
)
10+
11+
defineHandler(join, [(mma) => isBeliefSystem(mma)], (mma: BeliefSystem<any>) =>
12+
join(
13+
BeliefSystem(
14+
mma.beliefs.flatMap((belief) =>
15+
isBeliefSystem(belief.value)
16+
? belief.value.beliefs.map((innerBelief) =>
17+
Belief(innerBelief, belief.reason),
18+
)
19+
: [belief],
20+
),
21+
),
22+
),
23+
)

src/propagator/definePrimitive.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Cell, addPropagator, put } from "../cell/index.js"
22
import { naryFmap } from "../monad/index.js"
33
import "../monads/belief-monad.js"
4+
import "../monads/belief-system-monad.js"
45
import "../monads/nothing-monad.js"
56
import { schedule } from "../scheduler/index.js"
67
import type { MaybePromise } from "../utils/MaybePromise.js"

0 commit comments

Comments
 (0)