mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-20 22:11:45 +03:00
647231b685
Manually enables: * EmptyCase * ExistentialQuantification * QuantifiedConstraints * QuasiQuotes * TemplateHaskell * TypeFamilyDependencies ...in the following components: * 'graphql-engine' library * 'graphql-engine' 'src-test' * 'graphql-engine' 'tests/integration' * 'graphql-engine' tests-hspec' Additionally, performs some light refactoring and documentation. PR-URL: https://github.com/hasura/graphql-engine-mono/pull/3991 GitOrigin-RevId: 514477d3466b01f60eca8935d0fef60dd0756838
28 lines
838 B
Haskell
28 lines
838 B
Haskell
{-# LANGUAGE QuantifiedConstraints #-}
|
|
{-# LANGUAGE UndecidableInstances #-}
|
|
|
|
module Control.Monad.Stateless
|
|
( MonadStateless (..),
|
|
)
|
|
where
|
|
|
|
import Control.Monad.Trans.Control
|
|
import Data.Type.Equality
|
|
import Prelude
|
|
|
|
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
|