packages feed

agda2train-0.0.1.0: src/AgdaInternals.hs

{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
-- | Missing instances for WriterT in Agda's internals.
--
-- NB: we are not exporting any definitions, just typeclass instances.
module AgdaInternals () where

import Data.String

import Control.Monad
import Control.Monad.Writer
import Control.Monad.State

import Agda.TypeChecking.Monad
import Agda.TypeChecking.Warnings
import Agda.TypeChecking.Pretty

instance (Monoid r, Monad m, Semigroup (m Doc)) => Semigroup (WriterT r m Doc) where
  (<>) = liftM2 (<>)
instance (Monoid r, Monad m, IsString (m a)) => IsString (WriterT r m a) where
  fromString s = WriterT $ fmap (,mempty) $ fromString s
instance (Monoid r, MonadStConcreteNames m) => MonadStConcreteNames (WriterT r m) where
  runStConcreteNames m = WriterT $ runStConcreteNames $ StateT $ \s -> do
    ((x,s'),ns) <- runWriterT $ runStateT m s
    return ((x,ns),s')
instance (Monoid r, MonadInteractionPoints m) => MonadInteractionPoints (WriterT r m)
instance (Monoid r, MonadFresh i m) => MonadFresh i (WriterT r m)
instance (Monoid r, MonadWarning m) => MonadWarning (WriterT r m) where
instance (Monoid r, MonadBlock m) => MonadBlock (WriterT r m) where
  catchPatternErr h m = WriterT $ catchPatternErr (runWriterT . h) (runWriterT m)
instance (Monoid r, MonadTCM m, MonadConstraint m) => MonadConstraint (WriterT r m) where
  addConstraint x = lift . addConstraint x
  addAwakeConstraint x = lift . addAwakeConstraint x
  solveConstraint = lift . solveConstraint
  solveSomeAwakeConstraints x = lift . solveSomeAwakeConstraints x
  wakeConstraints = lift . wakeConstraints
  stealConstraints = lift . stealConstraints
  modifyAwakeConstraints = lift . modifyAwakeConstraints
  modifySleepingConstraints = lift . modifySleepingConstraints
instance (Monoid r, MonadTCM m, MonadMetaSolver m) => MonadMetaSolver (WriterT r m) where
  newMeta' x y z k l = lift . newMeta' x y z k l
  assignV x y z w = lift . assignV x y z w
  assignTerm' x y = lift . assignTerm' x y
  etaExpandMeta x = lift . etaExpandMeta x
  updateMetaVar x = lift . updateMetaVar x
  speculateMetas x = WriterT . runWriterT . speculateMetas x