primitive-convenience-0.1: src/Control/Monad/Primitive/Convenience.hs
{-# language
FlexibleInstances
, FunctionalDependencies
, MultiParamTypeClasses
, NoImplicitPrelude
, TypeFamilies
, UndecidableInstances
#-}
{-| Convenience typeclass for working with polymorphic @'PrimMonad'@s.
|-}
module Control.Monad.Primitive.Convenience
( MonadPrim
, MonadPrimBase
) where
import Control.Monad.Primitive
-- | 'PrimMonad''s state token type can be annoying to handle
-- in constraints. This typeclass lets users (visually) notice
-- 'PrimState' equality constraints less, by witnessing that
-- @s ~ 'PrimState' m@.
class (PrimMonad m, s ~ PrimState m) => MonadPrim s m | m -> s where
instance (PrimMonad m, s ~ PrimState m) => MonadPrim s m
-- | 'PrimBase''s state token type can be annoying to handle
-- in constraints. This typeclass lets users (visually) notice
-- 'PrimState' equality constraints less, by witnessing that
-- @s ~ 'PrimState' m@.
class (PrimBase m, s ~ PrimState m) => MonadPrimBase s m | m -> s where
instance (PrimBase m, s ~ PrimState m) => MonadPrimBase s m