{-# 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