liquidhaskell-0.9.0.2.1: tests/pos/T595.hs
module T595 where
import Data.Vector
data Test = Test
{ vec :: Thing
, x0 :: Bool
}
type Thing = [()] -- Vector ()
{-@ data Test = Test
{ vec :: Thing
, x0 :: { v : Bool | ((len vec) < 1) ==> v }
}
@-}
-- The above data declaration should give us the following refined types
-- for the record selectors
{- assume vec :: x:Test -> {v:Thing | v = vec x} @-}
{- assume x0 :: x:Test -> {v:Bool | v = x0 x && ((len (vec x) < 1) => v) } @-}
example :: Test -> ()
example t =
if x0 t
then ()
else vec t !! 0