data Person = Terach | Abraham | Nachor | Haran | Isaac | Lot | Milcah | Yiscah deriving (Eq, Show, Enum) -- Haskell-Programm mit Fakten father :: Person -> Person -> Bool father Terach Abraham = True father Terach Nachor = True father Terach Haran = True father Abraham Isaac = True father Haran Lot = True father Haran Milcah = True father Haran Yiscah = True father _ _ = False male :: Person -> Bool male Terach = True male Abraham = True male Nachor = True male Haran = True male Isaac = True male Lot = True male _ = False female :: Person -> Bool female Milcah = True female Yiscah = True female _ = False son :: Person -> Person -> Bool son x y = (father y x) && male x grandfather :: Person -> Person -> Bool grandfather x y = not (null [z | z <- persons, father x z, father z y]) persons :: [Person] persons = [Terach .. Milcah]