packages feed

effectful-zoo-0.0.3.0: components/hedgehog/Effectful/Zoo/Hedgehog/Effect/HedgehogGen.hs

{- HLINT ignore "Eta reduce" -}

{-# OPTIONS_GHC -Wno-orphans #-}

module Effectful.Zoo.Hedgehog.Effect.HedgehogGen
  ( HedgehogGen,
    HedgehogGenEnv(..),
    askHedgehogGenEnv,
    runHedgehogGenProperty,
  ) where

import Effectful
import Effectful.Concurrent.STM
import Effectful.Dispatch.Static
import Effectful.Zoo.Core
import HaskellWorks.Prelude
import Hedgehog qualified as H

-- | An effect for interacting with the filesystem.
data HedgehogGen :: Effect

type instance DispatchOf HedgehogGen = Static WithSideEffects
newtype instance StaticRep HedgehogGen = HedgehogGen HedgehogGenEnv

newtype HedgehogGenEnv
  = HedgehogGenEnv (TMVar (H.PropertyT IO ()))

askHedgehogGenEnv :: ()
  => r <: HedgehogGen
  => Eff r HedgehogGenEnv
askHedgehogGenEnv = do
  HedgehogGen env <- getStaticRep
  pure env

runHedgehogGenProperty :: ()
  => r <: IOE
  => TMVar (H.PropertyT IO ())
  -> Eff (HedgehogGen : r) a
  -> Eff r a
runHedgehogGenProperty tvAction =
  evalStaticRep (HedgehogGen (HedgehogGenEnv tvAction))