module TypeSyn where type Foo a = a -> a -> Bool foo :: Foo (forall b. b->b) foo f g = f 'a' == g 'a' && f () == g () type Generic i o = forall x. i x -> o x type Id x = x bar :: Generic Id [] bar x = [x] type S a = Int instance Functor S main :: IO () main = do print (foo id id)