/
alt3rmann
/
graphql-engine
Обзор
Документация
Войти
/
alt3rmann
/
graphql-engine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
server/src-lib/Control/Monad/Stateless.hs
27 строк
838 B
jkachmar
Yeet some default-extensions
16 мар 2022, 03:40
16 мар 2022, 03:40
647231b
Код
Авторство
О чём код?
{-# 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