packages feed

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