{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
{-# OPTIONS_HADDOCK hide #-}
module Capability.State.Internal.Strategies.Common
( MonadState(..)
, ReaderIORef(..)
, ReaderRef(..)
) where
import Control.Monad.IO.Class (MonadIO)
import Control.Monad.Primitive (PrimMonad)
newtype MonadState (m :: * -> *) (a :: *) = MonadState (m a)
deriving (Functor, Applicative, Monad, MonadIO, PrimMonad)
newtype ReaderIORef m a = ReaderIORef (m a)
deriving (Functor, Applicative, Monad)
newtype ReaderRef m (a :: *) = ReaderRef (m a)
deriving (Functor, Applicative, Monad, MonadIO, PrimMonad)