{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-} {-# LANGUAGE AllowAmbiguousTypes #-} -- meth3, meth4 are ambiguous module Roles3 where class C1 a where meth1 :: a -> a class C2 a b where meth2 :: a ~ b => a -> b class C3 a b where type F3 b meth3 :: a -> F3 b -> F3 b type family F4 a class C4 a b where meth4 :: a -> F4 b -> F4 b type Syn1 a = F4 a type Syn2 a = [a]