liquidhaskell-0.8.0.2: tests/import/lib/ReflectLib4.hs
{-@ LIQUID "--exact-data-con" @-}
{-@ LIQUID "--automatic-instances=liquidinstances" @-}
module ReflectLib4 where
-- | Lists ---------------------------------------------------------------------
{-@ data List [llen] @-} -- a = Nil | Cons {lHd :: a, lTl :: List a} @-}
data List a = Nil | Cons {lHd :: a, lTl :: List a}
{-@ measure llen @-}
{-@ llen :: List a -> Nat @-}
llen :: List a -> Int
llen Nil = 0
llen (Cons h t) = 1 + llen t
-- TODO: make this work WITHOUT the invariant
{-@ invariant {v:List a | 0 <= llen v} @-}
{-@ reflect app @-}
app :: List a -> List a -> List a
app Nil ys = ys
app (Cons x xs) ys = Cons x (app xs ys)
{-@ reflect gapp @-}
gapp :: List a -> List a
gapp Nil = Nil
gapp (Cons x xs) = Nil
{-@ test4 :: { gapp Nil = Nil } @-}
test4 = ()