liquidhaskell-0.8.10.7: tests/ple/pos/T1371.hs
{-@ LIQUID "--reflection" @-}
{-@ LIQUID "--ple" @-}
module Bug where
data Thing
= N Int
| Op Thing Thing
{- THE BELOW GENERATES A DIVERGING FUNCTION 'define' that KILLS PLE
{-@ reflect foo @-}
{-@ foo :: _ -> _ -> { 1 + 2 == 3 } @-}
foo :: Thing -> Thing -> Thing
foo (N n) (Op e1 e2) = Op e1 (foo (N n) e2)
foo (Op e1 e2) x = Op e1 (foo e2 x)
-- foo e _ = e
-}
{-@ reflect bar @-}
{-@ bar :: _ -> _ -> { 1 + 2 == 3 } @-}
bar :: Thing -> Thing -> Thing
bar (N n) (Op e1 e2) = Op e1 (bar (N n) e2)
bar (Op e1 e2) x = Op e1 (bar e2 x)
bar e _ = e