jacob
05/13/2019, 10:02 AM/* calculate :: MonadThrow A => HasRepositories F => HasWarehouseService F =>
ShoppingCart -> Kleisli A (F a) ShoppingCart */
fun <F, A> calculate(
AMT: MonadThrow<A>,
FHR: HasRepositories<F>,
FHW: HasWarehouseService<F>,
cart: ShoppingCart
): Kleisli<A, Kind<F, A>, ShoppingCart> {
return calculateDiscount<F, A>(FHR, cart).flatMap(AMT) { cart -> calculateErrors<F, A>(FHW, cart) }
}