[Added comments, started coding on (===!). nad**20040617212204] { hunk ./ChasingBottoms/Approx.hs 22 -that the implementation is only guaranteed to perform correctly (with -respect to the paper) on polynomial datatypes; in particular, nested -or mutually recursive types are not handled correctly. +that the implementation is only guaranteed to perform correctly, with +respect to the paper (and modulo any bugs), on polynomial datatypes; +in particular, nested or mutually recursive types are not handled +correctly (with respect to the paper). The specification below is +correct, though. hunk ./ChasingBottoms/SemanticOrd.hs 139 --- f ===! g = case (isBottom f, isBottom g) of --- (True, True) -> property True --- (False, False) -> forAll arbitrary $ \x -> --- f x ==! g x --- _ -> property False +(===!) :: Arbitrary a => (a -> b) -> (a -> b) -> Bool +f ===! g = case (isBottom f, isBottom g) of + (True, True) -> True + (False, False) -> + forAll arbitrary $ \x -> f x ==! g x + _ -> False + +forAll }