-- | A simple console program with getLine and putLine calls. module Hello where import Control.Monad.Freer import Control.Monad.Freer.Internal (send) import Data.Monoid import Data.Text (Text) import Prelude hiding (getLine) data Console a where GetLine :: Console Text PutLine :: Text -> Console () putLine :: Member Console r => Text -> Eff r () putLine = send . PutLine getLine :: Member Console r => Eff r Text getLine = send GetLine hello :: Member Console r => Eff r () hello = do putLine "Who are you?" name <- getLine putLine $ "Hello, " <> name