-- Family relationships {- Structure of the family: Christine --- Heinz Maria --- Fritz / \ | / \ | Monika --- Herbert Angelika --- Hubert / \ | / \ | Susanne Norbert Andreas -} data Person = Christine | Heinz | Maria | Fritz | Monika | Herbert | Angelika | Hubert | Susanne | Norbert | Andreas deriving (Eq,Show) ehemann :: Person -> Person ehemann Christine = Heinz ehemann Maria = Fritz ehemann Monika = Herbert ehemann Angelika = Hubert mutter :: Person -> Person mutter Herbert = Christine mutter Angelika = Christine mutter Hubert = Maria mutter Susanne = Monika mutter Norbert = Monika mutter Andreas = Angelika -- More general relationships: vater :: Person -> Person vater k = ehemann (mutter k) grossvater :: Person -> Person -> Bool grossvater e g | g == vater (vater e) = True | g == vater (mutter e) = True -- Wer ist der Vater von Andreas? -- > vater Andreas -- Ist Fritz ein Grossvater von Andreas? -- > grossvater Andreas Fritz -- NICHT: Welche Grossvaeter hat Andreas? -- > grossvater Andreas g -- hier ist g eine Variable -- Wunsch: g = Fritz