packages feed

effectful-zoo-0.0.2.0: components/core/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