{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}

module Overlapping where

class C a b where
  f :: a -> b -> Bool

instance C a b where
  f _ _ = False

instance {-# OVERLAPPING #-} C a a where
  f _ _ = True

instance {-# OVERLAPS #-} C a a where
  f _ _ = True

instance {-# OVERLAPPABLE #-} C a a where
  f _ _ = True

-- >>> f 'a' 'b'
-- True
--
-- >>> f 'a' "starfish"
-- False