liquidhaskell-0.8.10.7: tests/terminate/pos/Ackermann.hs
{-@ LIQUID "--exactdc" @-}
module Ackermann where
data Peano = Z | S Peano
ack :: Peano -> Peano -> Peano
ack Z n = S n
ack (S m) Z = ack m (S Z)
ack sm@(S m) (S n) = ack m (ack sm n)
ackFlipped :: Peano -> Peano -> Peano
ackFlipped n Z = S n
ackFlipped Z (S m) = ackFlipped (S Z) m
ackFlipped (S n) sm@(S m) = ackFlipped (ackFlipped n sm) m