diff --git a/.changeset/bumpy-pears-push.md b/.changeset/bumpy-pears-push.md new file mode 100644 index 00000000..495947d5 --- /dev/null +++ b/.changeset/bumpy-pears-push.md @@ -0,0 +1,5 @@ +--- +"@effect-atom/atom": patch +--- + +fix Result to consider waiting flag in equality diff --git a/packages/atom/src/Result.ts b/packages/atom/src/Result.ts index f1c3e2c8..181accf5 100644 --- a/packages/atom/src/Result.ts +++ b/packages/atom/src/Result.ts @@ -84,7 +84,7 @@ const ResultProto = { return pipeArguments(this, arguments) }, [Equal.symbol](this: Result, that: Result): boolean { - if (this._tag !== that._tag && this.waiting !== that.waiting) { + if (this._tag !== that._tag || this.waiting !== that.waiting) { return false } switch (this._tag) { diff --git a/packages/atom/test/Result.test.ts b/packages/atom/test/Result.test.ts index 36ca33d1..648eab24 100644 --- a/packages/atom/test/Result.test.ts +++ b/packages/atom/test/Result.test.ts @@ -1,5 +1,5 @@ import * as _ from "@effect-atom/atom/Result" -import { Cause } from "effect" +import { Cause, Equal } from "effect" import { describe, expect, it } from "vitest" describe("Result", () => { @@ -14,4 +14,14 @@ describe("Result", () => { expect(matcher(_.failure(Cause.empty))).toEqual("fail") expect(matcher(_.success(1))).toEqual(1) }) + + it("considers waiting flag in equality", () => { + const success = _.success("value") + const waiting = _.waiting(success) + + expect(Equal.isEqual(success)).toBe(true) + expect(Equal.isEqual(waiting)).toBe(true) + expect(Equal.equals(success, waiting)).toBe(false) + expect((success as any)[Equal.symbol](waiting)).toBe(false) + }) })