data Foo = Bar | Baz deriving (Eq, Show) instance Num Foo where _ + _ = Bar _ * _ = Baz abs _ = Bar signum _ = Baz fromInteger 0 = Bar fromInteger 1 = Baz fromInteger _ = Bar negate Bar = Baz negate Baz = Bar x :: Foo x = 0 y :: Foo y = 1 example :: Foo -> Bool example 0 = True example _ = False main :: IO () main = do print x -- Bar print y -- Baz print $ example 3 -- False