{-@ foo :: Nat -> Int @-}
foo :: Int -> Int
foo n = go n
  where 
    go 0          = 1
    go (d :: Int) = go (d-1)


{-@ loop :: twit:Nat -> l:Nat -> u:{v:Nat | v = l + twit} -> Int @-}
foo :: Int -> Int
foo n = go n
  where 
    go 0          = 1
    go (d :: Int) = go (d-1)


{-@ loop :: twit:Nat -> l:Nat -> u:{v:Nat | v = l + twit} -> Int @-}
foo n = go n
  where 
    go 0          = 1
    go (d :: Int) = go (d-1)


{-@ loop :: twit:Nat -> l:Nat -> u:{v:Nat | v = l + twit} -> Int @-}