packages feed

freer-converse-0.1.0.0: examples/Hello.hs

-- | 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