liquidhaskell-0.7.0.0: tests/pos/maybe000.hs
module Foo () where
-- TODO: get this working with the ! annots.
import Language.Haskell.Liquid.Prelude
-- remove the ! and it is safe...
data MaybeS a = NothingS | JustS !a
-- (SAFE) data MaybeS a = NothingS | JustS a
{-@ measure isJustS :: forall a. MaybeS a -> Bool
isJustS (JustS x) = true
isJustS (NothingS) = false
@-}
{-@ measure fromJustS :: forall a. MaybeS a -> a
fromJustS (JustS x) = x
@-}
gloop = poop True
{-@ poop :: z:a -> {v: MaybeS a | fromJustS(v) = z} @-}
poop z = JustS z