27 lines
783 B
Haskell
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")
|