4r/app/Polysemy/Output/IO.hs

27 lines
783 B
Haskell

module Polysemy.Output.IO (
runOutputToIO
, runOutputToStdout
, runOutputToStderr
, putTextO
, putTextLnO
) where
import Relude
import Data.Text (unpack)
import Polysemy (Member, Sem, interpret)
import Polysemy.Embed (Embed, embed)
import Polysemy.Output (Output (Output), output)
import System.IO (hPutStr)
runOutputToIO :: Member (Embed IO) r => Handle -> Sem (Output Text ': r) () -> Sem r ()
runOutputToIO h = interpret \(Output o) -> embed $ hPutStr h $ unpack o
runOutputToStdout, runOutputToStderr :: Member (Embed IO) r => Sem (Output Text ': r) () -> Sem r ()
runOutputToStdout = runOutputToIO stdout
runOutputToStderr = runOutputToIO stderr
putTextO, putTextLnO :: Member (Output Text) r => Text -> Sem r ()
putTextO = output
putTextLnO = output . (<> "\n")