import { Effect } from "effect"
const addServiceCharge = (amount: number) => amount + 1
const applyDiscount = (
total: number,
discountRate: number // The number that comes before the percent e.g. 0-400
): Effect.Effect<number, Error, never> =>
discountRate === 0
? Effect.fail(new Error("discount rate cannot be zero"))
: Effect.succeed(total - (total * discountRate) / 100)
const fetchTransactionAmount = Effect.promise(() => Promise.resolve(100))
const fetchDiscountRate = Effect.promise(() => Promise.resolve(5))
const program = Effect.gen(function*() {
const transactionAmount = yield* fetchTransactionAmount
const discountRate = yield* fetchDiscountRate
const totalAfterDiscount = yield* applyDiscount(
transactionAmount, // ^ maybe some yellow squiggly that
// prompts me to wrap with Effect.either
discountRate
)
const finalTotal = addServiceCharge(totalAfterDiscount)
return `Final total is ${finalTotal}`
})
import { Effect } from "effect"
const addServiceCharge = (amount: number) => amount + 1
const applyDiscount = (
total: number,
discountRate: number // The number that comes before the percent e.g. 0-400
): Effect.Effect<number, Error, never> =>
discountRate === 0
? Effect.fail(new Error("discount rate cannot be zero"))
: Effect.succeed(total - (total * discountRate) / 100)
const fetchTransactionAmount = Effect.promise(() => Promise.resolve(100))
const fetchDiscountRate = Effect.promise(() => Promise.resolve(5))
const program = Effect.gen(function*() {
const transactionAmount = yield* fetchTransactionAmount
const discountRate = yield* fetchDiscountRate
const totalAfterDiscount = yield* applyDiscount(
transactionAmount, // ^ maybe some yellow squiggly that
// prompts me to wrap with Effect.either
discountRate
)
const finalTotal = addServiceCharge(totalAfterDiscount)
return `Final total is ${finalTotal}`
})