module ClassesEx class Class1 a func1 :: Class1 a => a -> Bool class Class1 a => Class2 a func2 :: Class2 a => a -> Bool data Data1 Data1 :: Data1 instance Class1 Data1 instance Class2 Data1 data Data2 a Data2 :: a -> Data2 a instance Class1 (Data2 a) instance Eq a => Class2 (Data2 a) func3 :: Class1 a => a -> Bool func4 :: (Eq a, Class2 a) => a -> Bool func5 :: (Class1 a, Class2 b) => a -> b -> Bool