Skip to content

Commit

Permalink
[refactoring] extract assimilateBeliefSystem
Browse files Browse the repository at this point in the history
  • Loading branch information
xieyuheng committed Sep 4, 2024
1 parent 5a386f9 commit 2ae55a1
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 26 deletions.
2 changes: 0 additions & 2 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
[refactoring] extract `assimilateBeliefSystem`

# propagator 支持 dependencies for alternate worldviews

> - https://github.com/cicada-lang/propagator/issues/3
Expand Down
2 changes: 1 addition & 1 deletion src/belief-system/assimilateBelief.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { type Nothing, isNothing } from "../nothing/Nothing.js"
import { BeliefSystem } from "./BeliefSystem.js"
import { isStrongerBelief } from "./isStrongerBelief.js"

export function assimilateOne<A, B>(
export function assimilateBelief<A, B>(
base: BeliefSystem<A>,
belief: Belief<B> | Nothing,
): BeliefSystem<A | B> {
Expand Down
21 changes: 21 additions & 0 deletions src/belief-system/assimilateBeliefSystem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { type Nothing, isNothing } from "../nothing/Nothing.js"
import { assimilateBelief } from "./assimilateBelief.js"
import type { BeliefSystem } from "./BeliefSystem.js"

// The procedure `assimilate` incorporates all the given items, one by
// one, into the given belief system with no deduction of
// consequences.

export function assimilateBeliefSystem<A, B>(
base: BeliefSystem<A>,
target: BeliefSystem<B> | Nothing,
): BeliefSystem<A | B> {
if (isNothing(target)) {
return base
}

return target.beliefs.reduce<BeliefSystem<A | B>>(
(result, belief) => assimilateBelief(result, belief),
base,
)
}
26 changes: 4 additions & 22 deletions src/belief-system/beliefSystemMerge.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { type MergeConflict } from "../merge/index.js"
import { isNothing, type Nothing } from "../nothing/index.js"
import { assimilateOne } from "./assimilateBelief.js"
import { assimilateBelief } from "./assimilateBelief.js"
import { assimilateBeliefSystem } from "./assimilateBeliefSystem.js"
import { BeliefSystem } from "./BeliefSystem.js"
import { strongestBelief } from "./strongestBelief.js"

Expand All @@ -14,25 +14,7 @@ export function beliefSystemMerge<A, B>(
content: BeliefSystem<A>,
increment: BeliefSystem<B>,
): BeliefSystem<A | B> | MergeConflict {
const candidate = assimilate(content, increment)
const candidate = assimilateBeliefSystem(content, increment)
const consequence = strongestBelief(candidate.beliefs)
return assimilateOne(candidate, consequence)
}

// The procedure `assimilate` incorporates all the given items, one by
// one, into the given belief system with no deduction of
// consequences.

function assimilate<A, B>(
base: BeliefSystem<A>,
target: BeliefSystem<B> | Nothing,
): BeliefSystem<A | B> {
if (isNothing(target)) {
return base
}

return target.beliefs.reduce<BeliefSystem<A | B>>(
(result, belief) => assimilateOne(result, belief),
base,
)
return assimilateBelief(candidate, consequence)
}
2 changes: 1 addition & 1 deletion src/belief-system/beliefSystemQuery.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Belief } from "../belief/index.js"
import type { Nothing } from "../nothing/Nothing.js"
import type { BeliefSystem } from "./BeliefSystem.js"
import { assimilateOne as assimilateBelief } from "./assimilateBelief.js"
import { assimilateBelief } from "./assimilateBelief.js"
import { strongestBelief } from "./strongestBelief.js"

export function beliefSystemQuery<A>(
Expand Down

0 comments on commit 2ae55a1

Please sign in to comment.