Create a gist now

Instantly share code, notes, and snippets.

type AccountKind = Simple | Valuable | MostValuable
type CustomerStatus =
| Unregistered
| Registered of AccountKind * Years:int
let accountFactor kind =
match kind with
| Simple -> 0.9m
| Valuable -> 0.7m
| MostValuable -> 0.5m
let loyaltyFactor years =
1m - decimal(min years 5) / 100m
let applyDiscount price status =
match status with
| Unregistered -> price
| Registered(kind, years) ->
price * accountFactor kind * loyaltyFactor years
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment