packages feed

liquidhaskell-0.4.0.0: tests/pos/inline.hs

module Fixme where

{-@ inline eqq @-}
eqq :: Ord a => a -> a -> Bool
eqq x y = x > y

eqqtest :: Ord a => a -> a -> Bool
{-@ eqqtest :: Eq a => x:a -> y:a -> {v:Bool | Prop v <=> (eqq x y) } @-}
eqqtest x y = x > y

{-@ inline mymax @-}
{-@ inline mymin @-}


mymax, mymin :: Ord a => a -> a -> a
mymax x y = if x >= y then x else y


mymin x y = mymax y x

{-@ measure foo @-}
foo :: Ord a => D a -> a
foo (D x y) = mymax x y
foo (F x)   = x

bar :: Ord a => D a -> a
{-@ bar :: Ord a => x:(D a) -> {v:a |  v = bar x} @-}
bar (D x y) = mymax x y
bar2 :: Ord a => D a -> a
{-@ bar2 :: Ord a => x:(D a) -> {v:a |  v = bar2 x} @-}
bar2 (D x y) = mymin y x




foooo = D 


{-@ measure bar :: (D a) -> a
    bar(D x y) = (mymax x y) 
  @-}

{-@ measure bar2 :: (D a) -> a
    bar2(D x y) = (mymin x y) 
  @-}

data D a = D a a | F a


{-@ mymax3, mymax :: x:a -> y:a -> {v:a | v = mymax x y} @-}
mymax3 :: Ord a => a -> a -> a
mymax3 x y = if x >= y then x else y