liquidhaskell-0.8.0.2: tests/todo/Invariants.hs
module Invariant where
data F a = F {fx :: a, fy :: a, fzz :: a}
| G {fx :: a, fy :: a}
{-@ data F a = F {fx :: a, fy :: a, fz :: a}
| G {fx :: a, fy :: a}
@-}
{-@ invariant {v : F a | (fy v) = (fx v) } @-}
-- F :: x:a -> y:a -> z:a -> { prove this } -> F a
bar :: a -> F a -> F a
bar _ f@(F x y z) = f{fx = y}