The class
class Num a where
(+) :: a -> a -> a
negate :: a -> adesugars to something like
data Num a = Num { (+) :: a -> a -> a
, negate :: a -> a
}The instance
instance Num Integer where
(+) = integerPlus
negate = integerNegatedesugars to something like
numInteger :: Num Integer
numInteger = Num { (+) = integerPlus
, negate = integerNegate
}The function
inc :: Num a => a -> a
inc n = (+) n 1desugars to something like
inc :: Num a -> a -> a
inc num n = (+) num n 1The action
main = print (inc (42 :: Integer) == 1 + 42)desugars to something like
main = print (inc numInteger 42 == (+) numInteger 1 42)