1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE AllowAmbiguousTypes #-} module AssocTypes where class Foo a where type Bar a b type Baz a type Baz a = [(a, a)] bar :: Bar a a bar = undefined instance Foo [a] where type Bar [a] Int = [(a, Bool)] type Bar [a] Bool = [(Int, a)] type Baz [a] = (a, a, a)