effectful-zoo-0.0.2.0: components/core/Effectful/Zoo/DataLog/Data/DataLogger.hs
module Effectful.Zoo.DataLog.Data.DataLogger
( DataLogger(..),
mkDataLogger,
) where
import Effectful
import Effectful.Dispatch.Static
import HaskellWorks.Prelude
newtype DataLogger i = DataLogger
{ run :: i -> IO ()
} deriving stock Generic
instance Contravariant DataLogger where
contramap f (DataLogger g) = DataLogger (g . f)
mkDataLogger :: ()
=> (i -> Eff r ())
-> Eff r (DataLogger i)
mkDataLogger run =
unsafeConcUnliftIO Persistent Unlimited $ \effToIO ->
pure $ DataLogger $ effToIO . run