© 2026 Hedgehog Software, LLC
db.transaction
function updateProfile<E>(userId: UserId, mutator: (current: Profile) => Effect<Profile, E>) { return Effect.tryPromise({ try: () => { return db.transaction((tx) => { const profile = // get/create profile const updated = Effect.runPromise(mutator(profile)); // drizzle update stuff.. maybe throws TransactionError, etc return update; }); }, catch: ... }) } const addPhoneNumber = Effect.fn("updatePhoneNumber")(function* (id: UserId) { return updateProfile(id, (current) => Effect.gen(....)); });
yield addPhoneNumber(...)
Effect<Profile, TransactionError | InvalidPhoneNumber | Etc