I'm puzzled that the following is accepted. Is some sort of greatest fixed point computation used for instances? {-# OPTIONS_GHC -fglasgow-exts #-} module M where class C a b where c :: a -> b -> Bool instance C b b => C (Maybe a) b where c x y = c y y f :: Maybe a -> Bool f x = c x x