{-# LANGUAGE OverloadedRecordDot #-} data Happy = Happy {name :: String, age :: Int, happy :: Bool} data Building = Building {address :: String, owner :: Happy} main :: IO () main = do putStrLn test man :: Happy man = Happy {name = "Happy", age = 1, happy = True} home :: Building home = Building {address = "No. 10 Privet Dr.", owner = man} home2 :: Building home2 = Building {address = "No. 6 Beach Ave.", owner = man} home3 :: Building home3 = Building {address = "No. 12 Central Blvd.", owner = man} n:: Int n = 3 test :: String test = (case n of 0 -> owner home 1 -> home2.owner 2 -> owner home3 _ -> man).name