{-@ LIQUID "--expect-any-error" @-}
{-@ LIQUID "--reflection" @-}

module T1553 where

negPos :: (a -> ()) -> ()
@ assume negPos : : ( a - > { v :() | 0 = = 1 } ) - > { v :() | 0 = = 1 } @
negPos _ = () 
    
testBad :: a -> () 
@  : : a - > { v :() | 0 = = 1 } @
testBad _ = negPos (\_ -> ()) 
    
@ getUnsound : : ( ) - > { v :() | 0 = = 1 } @
getUnsound :: () -> () 
getUnsound _ = testBad () 
    
posPos :: a -> () -> ()
@ posPos : : a - > { v :() | 0 = = 1 } - > { v :() | 0 = = 1 } @
posPos _ _ = () 
    
testOK :: a -> () 
@ testOK : : a - > { v :() | 0 = = 1 } @
testOK x = posPos x () 

@ LIQUID "--expect-any-error" @
@ LIQUID "--reflection" @

module T1553 where

negPos :: (a -> ()) -> ()
@ assume negPos : : ( a - > { v :() | 0 = = 1 } ) - > { v :() | 0 = = 1 } @
negPos _ = () 
    
testBad :: a -> () 
@  : : a - > { v :() | 0 = = 1 } @
testBad _ = negPos (\_ -> ()) 
    
@ getUnsound : : ( ) - > { v :() | 0 = = 1 } @
getUnsound :: () -> () 
getUnsound _ = testBad () 
    
posPos :: a -> () -> ()
@ posPos : : a - > { v :() | 0 = = 1 } - > { v :() | 0 = = 1 } @
posPos _ _ = () 
    
testOK :: a -> () 
@ testOK : : a - > { v :() | 0 = = 1 } @
testOK x = posPos x () 
