{-# LANGUAGE QuantifiedConstraints, UndecidableInstances #-} module M where data Array instance (forall x. Eq x) => Num Array where a + b = undefined f :: Num Array => Array -> Array f y = y + y g :: Num Array => Array -> Array g z = f z h :: Array -> Array h c = g c