axel-0.0.6: src/Axel/Eff/Console.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Axel.Eff.Console where
import Prelude hiding (putStr)
import qualified Prelude
import Control.Monad.Freer
( type (~>)
, Eff
, LastMember
, Member
, interpretM
, send
)
data Console r where
PutStr :: String -> Console ()
putStr :: (Member Console effs) => String -> Eff effs ()
putStr = send . PutStr
runEff :: (LastMember IO effs) => Eff (Console ': effs) ~> Eff effs
runEff =
interpretM
(\case
PutStr str -> Prelude.putStr str)
putStrLn :: (Member Console effs) => String -> Eff effs ()
putStrLn str = putStr (str <> "\n")