15 lines
375 B
Text
15 lines
375 B
Text
open monad io unsafe.cell unsafe.console
|
|
|
|
liftM2 f m1 m2 = do
|
|
x1 <- m1
|
|
x2 <- m2
|
|
return (f x1 x2)
|
|
|
|
a k x1 x2 x3 x4 x5 = do
|
|
r <- return $ ref k
|
|
let b = & do k <- return $ pred (valueof r)
|
|
a k b x1 x2 x3 x4
|
|
if k <= 0 then liftM2 (+) x4 x5 else b
|
|
|
|
_ = a 10 (!!1) (!! -1) (!! -1) (!!1) (!!0) >>= (putStr << show) ::: IO
|
|
where (!!) f = & return f ::: IO
|