liquidhaskell-0.7.0.0: tests/pos/T820.hs
{-@ LIQUID "--totality" @-}
{-@ LIQUID "--exactdc" @-}
{-@ LIQUID "--higherorder" @-}
module Data.Foo where
import Language.Haskell.Liquid.ProofCombinators
{-@ data Foo = Foo { foox :: (Int -> Int) , fooy :: Int } @-}
data Foo = Foo { x :: Int -> Int , y :: Int }
{-@ data VerifiedEq a = VerifiedEq {
eq :: a -> a -> Bool
, refl :: x:a -> { v:() | (eq x x) }
, sym :: x:a -> y:a -> { v:() | (eq x y) ==> (eq y x) }
, trans :: x:a -> y:a -> z:a -> { v:() | (eq x y) && (eq y z) ==> (eq x z) }
}
@-}
data VerifiedEq a = VerifiedEq {
eq :: a -> a -> Bool
, refl :: a -> Proof
, sym :: a -> a -> Proof
, trans :: a -> a -> a -> Proof
}
{-@ data VerifiedOrd a = VerifiedOrd {
leq :: (a -> a -> Bool)
, total :: (x:a -> y:a -> { (leq x y) || (leq y x) })
, antisym :: (x:a -> y:a -> { (leq x y) || (leq y x) ==> x == y })
, trans2 :: (x:a -> y:a -> z:a -> { (leq x y) && (leq y z) ==> (leq x z) })
, verifiedEq :: VerifiedEq a
}
@-}
data VerifiedOrd a = VerifiedOrd {
leq :: a -> a -> Bool
, total :: a -> a -> Proof
, antisym :: a -> a -> Proof
, trans2 :: a -> a -> a -> Proof
, verifiedEq :: VerifiedEq a
}