mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-24 16:03:37 +03:00
dd1192ca2c
GitOrigin-RevId: d862c724715cb8a4c2f37d2e0e525d12c46b18eb
26 lines
827 B
Haskell
26 lines
827 B
Haskell
{-# LANGUAGE UndecidableInstances #-}
|
|
|
|
module Control.Monad.Stateless
|
|
( MonadStateless(..)
|
|
) where
|
|
|
|
import Prelude
|
|
|
|
import Control.Monad.Trans.Control
|
|
import Data.Type.Equality
|
|
|
|
class (MonadBaseControl b m, forall a. StatelessProof m a) => MonadStateless b m | m -> b where
|
|
liftWithStateless :: ((forall a. m a -> b a) -> b c) -> m c
|
|
|
|
instance (MonadBaseControl b m, forall a. StatelessProof m a) => MonadStateless b m where
|
|
liftWithStateless f = liftBaseWith $ \lowerBase ->
|
|
let lowerBasePure :: forall a. m a -> b a
|
|
lowerBasePure m = case statelessProof @m @a of
|
|
Refl -> lowerBase m
|
|
in f lowerBasePure
|
|
|
|
class (StM m a ~ a) => StatelessProof m a where
|
|
statelessProof :: StM m a :~: a
|
|
instance (StM m a ~ a) => StatelessProof m a where
|
|
statelessProof = Refl
|