module Main where
import Control.Monad.Reader
data Person = Pr { name :: String,
age :: Integer,
address :: String }
type PersonReader = Reader Person String
getName :: PersonReader
getName = do
n <- asks name
return $ "Name: " ++ n
getAge :: PersonReader
getAge = do
n <- asks age
return $ "Age: " ++ show n
getAddress :: PersonReader
getAddress = do
n <- asks address
return $ "Address: " ++ n
showPerson :: PersonReader
showPerson = do
x <- getName
y <- getAge
z <- getAddress
return . unlines $ [x, y, z]
main = putStrLn $ runReader showPerson $ (Pr "Someone" 32 "HOME")