effectful-zoo-0.0.1.0: components/console/Effectful/Zoo/Console/Data/Writer.hs
module Effectful.Zoo.Console.Data.Writer
( Writer(..),
mkWriter,
) where
import Effectful
import Effectful.Zoo.Core
import HaskellWorks.Prelude
newtype Writer i = Writer
{ run :: i -> IO ()
} deriving stock Generic
instance Contravariant Writer where
contramap f (Writer g) = Writer (g . f)
mkWriter :: ()
=> r <: IOE
=> UnliftStrategy
-> (i -> Eff r ())
-> Eff r (Writer i)
mkWriter strategy run =
withEffToIO strategy $ \effToIO ->
pure $ Writer $ effToIO . run