packages feed

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
  }