Skip to content

Instantly share code, notes, and snippets.

@davidkaste
Created January 24, 2018 10:31
Show Gist options
  • Select an option

  • Save davidkaste/6642f86d3306c7de7b476467c02130cd to your computer and use it in GitHub Desktop.

Select an option

Save davidkaste/6642f86d3306c7de7b476467c02130cd to your computer and use it in GitHub Desktop.
module ExampleReader where
import Control.Monad.Reader
data Person = Pr { name :: String,
age :: Integer,
address :: String }
type PersonReader = Reader Person String
getName :: PersonReader
getName = do
n <- ask
return $ "Name: " ++ name n
getAge :: PersonReader
getAge = do
n <- ask
return $ "Age: " ++ (show (age n))
getAddress :: PersonReader
getAddress = do
n <- ask
return $ "Address: " ++ address n
showPerson :: PersonReader
showPerson = do
x <- getName
y <- getAge
z <- getAddress
return . unlines $ [x, y, z]
main = putStrLn $ runReader showPerson $ (Pr "David" 32 "Casa meva")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment