main Where Let main args. Let n. Match (LIST.fetch args 1) | `nothing (OS.die "Expected a number argument.") | `just.arg Match (Z.read arg) | `nothing (OS.die "Expected a number argument.") | `just.n n ; ; In (STDIO.print_line $ Z.show $ factorial n) Where Let factorial n. Begin (multiplying 1 2) Define multiplying f m. If (m > n) f Goto (multiplying (f * m) (m + 1)) Where Let LIST. Package "list" Let OS. Package "os" Let STDIO. Package "stdio" Let Z. Package "z"