liquidhaskell-0.8.0.2: tests/pos/AdtList3.hs
{-@ LIQUID "--exact-data-cons" @-}
module AdtList where
data LL a = Emp | Cons a (LL a)
{-@ data LL [sz] @-}
{-@ test1 :: n:Int -> m:Int -> {v:() | Cons n (Cons m Emp) == Cons m (Cons n Emp)} -> {n == m} @-}
test1 :: Int -> Int -> () -> ()
test1 _ _ _ = ()
{-@ measure sz @-}
{-@ sz :: LL a -> Nat @-}
sz :: LL a -> Int
sz Emp = 0
sz (Cons x xs) = 1 + sz xs
app :: LL a -> LL a -> LL a
app Emp z = z
app (Cons x xs) z = Cons x (app xs z)