liquidhaskell-0.4.0.0: tests/pos/ListReverse-LType.hs
module Reverse (x) where
import Language.Haskell.Liquid.Prelude
import Prelude hiding (reverse)
data L a = N | C a (L a)
{-@ data L [llen] @-}
{-@ measure llen :: (L a) -> Int
llen(N) = 0
llen(C x xs) = 1 + (llen xs)
@-}
{-@ invariant {v: L a | (llen v) >= 0} @-}
reverse N xs = xs
reverse (C y ys) xs = reverse ys (C y xs)
x = reverse (C 1 (C 2 N))