-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Agda is a dependently typed functional programming language: It has -- inductive families, which are similar to Haskell's GADTs, but they can -- be indexed by values and not just types. It also has parameterised -- modules, mixfix operators, Unicode characters, and an interactive -- Emacs interface (the type checker can assist in the development of -- your code). -- -- Agda is also a proof assistant: It is an interactive system for -- writing and checking proofs. Agda is based on intuitionistic type -- theory, a foundational system for constructive mathematics developed -- by the Swedish logician Per Martin-Löf. It has many similarities with -- other proof assistants based on dependent types, such as Coq, Idris, -- Lean and NuPRL. -- -- This package includes both a command-line program (agda) and an Emacs -- mode. If you want to use the Emacs mode you can set it up by running -- agda-mode setup (see the README). @package Agda @version 2.7.20250510 module Agda.Interaction.ExitCode data AgdaError -- | 1 UnknownError :: AgdaError -- | 42 TCMError :: AgdaError -- | 71 OptionError :: AgdaError -- | 113 CommandError :: AgdaError -- | 154 ImpossibleError :: AgdaError -- | Return the error corresponding to an exit code from the Agda process agdaErrorToInt :: AgdaError -> Int agdaErrorFromInt :: Int -> Maybe AgdaError -- | The computation exitSuccess is equivalent to exitWith -- ExitSuccess, It terminates the program successfully. exitSuccess :: IO a exitAgdaWith :: AgdaError -> IO a instance GHC.Internal.Enum.Bounded Agda.Interaction.ExitCode.AgdaError instance GHC.Internal.Enum.Enum Agda.Interaction.ExitCode.AgdaError instance GHC.Classes.Eq Agda.Interaction.ExitCode.AgdaError instance GHC.Internal.Show.Show Agda.Interaction.ExitCode.AgdaError -- | The list of data files Agda uses. -- -- Because of TemplateHaskell state restrictions, this cannot be define -- in 'Setup'. module Agda.Setup.DataFiles -- | A data file path relative to the project root. dataPath :: FilePath -> FilePath -- | Agda's embedded data files. dataFiles :: [FilePath] -- | The subdirectory in the Agda data directory containing the emacs mode. emacsModeDir :: FilePath -- | The Agda mode's Emacs Lisp files, given in the order in which they -- should be compiled. emacsLispFiles :: [FilePath] -- | Defines CutOff type which is used in -- Agda.Interaction.Options. This module's purpose is to eliminate -- the dependency of Agda.TypeChecking.Monad.Base on the -- termination checker and everything it imports. module Agda.Termination.CutOff -- | Cut off structural order comparison at some depth in termination -- checker? data CutOff -- | c >= 0 means: record decrease up to including -- c+1. CutOff :: !Int -> CutOff DontCutOff :: CutOff -- | The default termination depth. defaultCutOff :: CutOff instance GHC.Classes.Eq Agda.Termination.CutOff.CutOff instance Control.DeepSeq.NFData Agda.Termination.CutOff.CutOff instance GHC.Classes.Ord Agda.Termination.CutOff.CutOff instance GHC.Internal.Show.Show Agda.Termination.CutOff.CutOff -- | Semirings. module Agda.Termination.Semiring -- | HasZero is needed for sparse matrices, to tell which is the -- element that does not have to be stored. It is a cut-down version of -- SemiRing which is definable without the implicit -- ?cutoff. class Eq a => HasZero a zeroElement :: HasZero a => a -- | Semirings. data Semiring a Semiring :: (a -> a -> a) -> (a -> a -> a) -> a -> Semiring a -- | Addition. [add] :: Semiring a -> a -> a -> a -- | Multiplication. [mul] :: Semiring a -> a -> a -> a -- | Zero. The one is never used in matrix multiplication , one :: a -- ^ -- One. [zero] :: Semiring a -> a integerSemiring :: Semiring Integer intSemiring :: Semiring Int -- | The standard semiring on Bools. boolSemiring :: Semiring Bool instance Agda.Termination.Semiring.HasZero GHC.Types.Int instance Agda.Termination.Semiring.HasZero GHC.Num.Integer.Integer -- | Contexts with at most one hole. module Agda.Utils.AffineHole data AffineHole r a -- | A constant term. ZeroHoles :: a -> AffineHole r a -- | A term with one hole and the (old) contents. OneHole :: (r -> a) -> r -> AffineHole r a -- | A term with many holes (error value). ManyHoles :: AffineHole r a instance GHC.Internal.Base.Applicative (Agda.Utils.AffineHole.AffineHole r) instance GHC.Internal.Base.Functor (Agda.Utils.AffineHole.AffineHole r) module Agda.Utils.Applicative -- | Guard: return the action f only if the boolean is -- True (?*>) :: Alternative f => Bool -> f a -> f a -- | Guard: return the value a only if the boolean is -- True (?$>) :: Alternative f => Bool -> a -> f a -- | Branch over a Foldable collection of values. foldA :: (Alternative f, Foldable t) => t a -> f a -- | Branch over a Foldable collection of values using the supplied -- action. foldMapA :: (Alternative f, Foldable t) => (a -> f b) -> t a -> f b -- | Better name for for. forA :: (Traversable t, Applicative f) => t a -> (a -> f b) -> f (t b) liftA4 :: Applicative f => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e -- | Boolean algebras and types isomorphic to Bool. -- -- There are already solutions for Boolean algebras in the Haskell -- ecosystem, but they do not offer easy instantiations for types -- isomorphic to Bool. In particular, if type a is -- isomorphic to Bool, so it satisfies `IsBool a`, we would like -- to instantiate 'Boolean a' by just giving true and -- false. To facilitate this within the limits of the Haskell -- class system, we define the class Boolean mutually with class -- IsBool, so that operations not, (&&), and -- (||) can get default implementations. -- -- Usage: import Prelude hiding ( not, (&&), (||) ) import -- Agda.Utils.Boolean module Agda.Utils.Boolean -- | Boolean algebras. class Boolean a fromBool :: Boolean a => Bool -> a true :: Boolean a => a false :: Boolean a => a not :: Boolean a => a -> a ($dmnot) :: (Boolean a, IsBool a) => a -> a (&&) :: Boolean a => a -> a -> a ($dm&&) :: (Boolean a, IsBool a) => a -> a -> a (||) :: Boolean a => a -> a -> a ($dm||) :: (Boolean a, IsBool a) => a -> a -> a implies :: Boolean a => a -> a -> a -- | Set difference, dual to implies. butNot :: Boolean a => a -> a -> a infixr 3 && infixr 2 || -- | Types isomorphic to Bool. class (Boolean a, Eq a) => IsBool a toBool :: IsBool a => a -> Bool ifThenElse :: IsBool a => a -> b -> b -> b fromBool1 :: IsBool a => (Bool -> Bool) -> a -> a fromBool2 :: IsBool a => (Bool -> Bool -> Bool) -> a -> a -> a instance Agda.Utils.Boolean.Boolean GHC.Types.Bool instance Agda.Utils.Boolean.Boolean b => Agda.Utils.Boolean.Boolean (a -> b) instance Agda.Utils.Boolean.IsBool GHC.Types.Bool -- | Kinds of standard universes: Prop, Type, -- SSet. module Agda.Syntax.Internal.Univ -- | Flavor of standard universe (Prop < Type < SSet,). data Univ -- | Fibrant universe of propositions. UProp :: Univ -- | Fibrant universe. UType :: Univ -- | Non-fibrant universe. USSet :: Univ -- | We have IsFibrant < IsStrict. data IsFibrant -- | Fibrant universe. IsFibrant :: IsFibrant -- | Non-fibrant universe. IsStrict :: IsFibrant -- | The successor universe type of a universe. univUniv :: Univ -> Univ -- | Compute the universe type of a function space from the universe types -- of domain and codomain. funUniv :: Univ -> Univ -> Univ -- | Conclude u1 from funUniv u1 u2 and u2. domainUniv :: Bool -> Univ -> Univ -> Maybe Univ -- | Conclude u2 from funUniv u1 u2 and u1. codomainUniv :: Univ -> Univ -> Maybe Univ -- | Fibrancy of standard universes. univFibrancy :: Univ -> IsFibrant -- | Hacky showing of standard universes, does not take actual names into -- account. showUniv :: Univ -> String instance Agda.Utils.Boolean.Boolean Agda.Syntax.Internal.Univ.IsFibrant instance GHC.Internal.Enum.Bounded Agda.Syntax.Internal.Univ.Univ instance GHC.Internal.Enum.Enum Agda.Syntax.Internal.Univ.Univ instance GHC.Classes.Eq Agda.Syntax.Internal.Univ.IsFibrant instance GHC.Classes.Eq Agda.Syntax.Internal.Univ.Univ instance GHC.Internal.Generics.Generic Agda.Syntax.Internal.Univ.IsFibrant instance GHC.Internal.Generics.Generic Agda.Syntax.Internal.Univ.Univ instance Agda.Utils.Boolean.IsBool Agda.Syntax.Internal.Univ.IsFibrant instance Control.DeepSeq.NFData Agda.Syntax.Internal.Univ.Univ instance GHC.Classes.Ord Agda.Syntax.Internal.Univ.IsFibrant instance GHC.Classes.Ord Agda.Syntax.Internal.Univ.Univ instance GHC.Internal.Show.Show Agda.Syntax.Internal.Univ.IsFibrant instance GHC.Internal.Show.Show Agda.Syntax.Internal.Univ.Univ -- | Agda strings uses Data.Text [1], which can only represent unicode -- scalar values [2], excluding the surrogate code points 3. To -- allow primStringFromList to be injective we make sure -- character values also exclude surrogate code points, mapping them to -- the replacement character U+FFFD. -- -- See #4999 for more information. -- --
-- (op `on` f) x y = f x `op` f y ---- --
-- >>> sortBy (compare `on` length) [[0, 1, 2], [0, 1], [], [0]] -- [[],[0],[0,1],[0,1,2]] ---- --
-- >>> ((+) `on` length) [1, 2, 3] [-1] -- 4 ---- --
-- >>> ((,) `on` (*2)) 2 3 -- (4,6) ---- --
-- ($) :: (a -> b) -> a -> b -- (<$>) :: Functor f => (a -> b) -> f a -> f b ---- -- Whereas $ is function application, <$> is function -- application lifted over a Functor. -- --
-- >>> show <$> Nothing -- Nothing ---- --
-- >>> show <$> Just 3 -- Just "3" ---- -- Convert from an Either Int Int to an -- Either Int String using show: -- --
-- >>> show <$> Left 17 -- Left 17 ---- --
-- >>> show <$> Right 17 -- Right "17" ---- -- Double each element of a list: -- --
-- >>> (*2) <$> [1,2,3] -- [2,4,6] ---- -- Apply even to the second element of a pair: -- --
-- >>> even <$> (2,2) -- (2,True) --(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 <$> -- | Flipped version of <$. -- --
-- >>> Nothing $> "foo" -- Nothing ---- --
-- >>> Just 90210 $> "foo" -- Just "foo" ---- -- Replace the contents of an Either Int -- Int with a constant String, resulting in an -- Either Int String: -- --
-- >>> Left 8675309 $> "foo" -- Left 8675309 ---- --
-- >>> Right 8675309 $> "foo" -- Right "foo" ---- -- Replace each element of a list with a constant String: -- --
-- >>> [1,2,3] $> "foo" -- ["foo","foo","foo"] ---- -- Replace the second element of a pair with a constant String: -- --
-- >>> (1,2) $> "foo" -- (1,"foo") --($>) :: Functor f => f a -> b -> f b infixl 4 $> -- | Flipped version of <$>. -- --
-- (<&>) = flip fmap ---- --
-- >>> Just 2 <&> (+1) -- Just 3 ---- --
-- >>> [1,2,3] <&> (+1) -- [2,3,4] ---- --
-- >>> Right 3 <&> (+1) -- Right 4 --(<&>) :: Functor f => f a -> (a -> b) -> f b infixl 1 <&> instance (Agda.Utils.Functor.Decoration d, Agda.Utils.Functor.Decoration t) => Agda.Utils.Functor.Decoration (Data.Functor.Compose.Compose d t) instance Agda.Utils.Functor.Decoration GHC.Internal.Data.Functor.Identity.Identity instance Agda.Utils.Functor.Decoration ((,) a) -- | A simple overlay over Data.Map to manage unordered sets with -- duplicates. module Agda.Utils.Bag -- | A set with duplicates. Faithfully stores elements which are equal with -- regard to (==). newtype Bag a Bag :: Map a (NonEmpty a) -> Bag a -- | The list contains all occurrences of a (not just the -- duplicates!). Hence, the invariant: the list is never empty. [bag] :: Bag a -> Map a (NonEmpty a) -- | Is the bag empty? null :: Bag a -> Bool -- | Number of elements in the bag. Duplicates count. O(n). size :: Bag a -> Int -- | (bag ! a) finds all elements equal to a. O(log n). -- Total function, returns [] if none are. (!) :: Ord a => Bag a -> a -> [a] -- | O(log n). member :: Ord a => a -> Bag a -> Bool -- | O(log n). notMember :: Ord a => a -> Bag a -> Bool -- | Return the multiplicity of the given element. O(log n + count _ _). count :: Ord a => a -> Bag a -> Int -- | O(1) empty :: Bag a -- | O(1) singleton :: a -> Bag a union :: Ord a => Bag a -> Bag a -> Bag a unions :: Ord a => [Bag a] -> Bag a -- |
-- insert a b = union b (singleton a) --insert :: Ord a => a -> Bag a -> Bag a -- |
-- fromList = unions . map singleton --fromList :: Ord a => [a] -> Bag a -- | Returns the elements of the bag, grouped by equality (==). groups :: Bag a -> [NonEmpty a] -- | Returns the bag, with duplicates. toList :: Bag a -> [a] -- | Returns the bag without duplicates. keys :: Bag a -> [a] -- | Returns the bag, with duplicates. elems :: Bag a -> [a] toAscList :: Bag a -> [a] -- | O(n). map :: Ord b => (a -> b) -> Bag a -> Bag b traverse' :: forall a b m. (Applicative m, Ord b) => (a -> m b) -> Bag a -> m (Bag b) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.Bag.Bag a) instance GHC.Internal.Data.Foldable.Foldable Agda.Utils.Bag.Bag instance GHC.Classes.Ord a => GHC.Internal.Base.Monoid (Agda.Utils.Bag.Bag a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Utils.Bag.Bag a) instance GHC.Classes.Ord a => GHC.Internal.Base.Semigroup (Agda.Utils.Bag.Bag a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.Bag.Bag a) -- | Hash tables. module Agda.Utils.HashTable -- | Hash tables. data HashTable k v -- | An empty hash table. empty :: IO (HashTable k v) -- | Inserts the key and the corresponding value into the hash table. insert :: (Eq k, Hashable k) => HashTable k v -> k -> v -> IO () -- | Tries to find a value corresponding to the key in the hash table. lookup :: (Eq k, Hashable k) => HashTable k v -> k -> IO (Maybe v) -- | Converts the hash table to a list. -- -- The order of the elements in the list is unspecified. toList :: (Eq k, Hashable k) => HashTable k v -> IO [(k, v)] keySet :: Ord k => HashTable k v -> IO (Set k) -- | ASTs for subset of GHC Haskell syntax. module Agda.Utils.Haskell.Syntax data Module Module :: ModuleName -> [ModulePragma] -> [ImportDecl] -> [Decl] -> Module data ModulePragma LanguagePragma :: [Name] -> ModulePragma -- | Unstructured pragma (Andreas, 2017-08-23, issue #2712). OtherPragma :: String -> ModulePragma data ImportDecl ImportDecl :: ModuleName -> Bool -> Maybe (Bool, [ImportSpec]) -> ImportDecl [importModule] :: ImportDecl -> ModuleName [importQualified] :: ImportDecl -> Bool [importSpecs] :: ImportDecl -> Maybe (Bool, [ImportSpec]) data ImportSpec IVar :: Name -> ImportSpec data Decl TypeDecl :: Name -> [TyVarBind] -> Type -> Decl DataDecl :: DataOrNew -> Name -> [TyVarBind] -> [ConDecl] -> [Deriving] -> Decl TypeSig :: [Name] -> Type -> Decl -- | Should not be used when LocalBind could be used. FunBind :: [Match] -> Decl -- | Should only be used in let or where. LocalBind :: Strictness -> Name -> Rhs -> Decl PatSyn :: Pat -> Pat -> Decl FakeDecl :: String -> Decl Comment :: String -> Decl data DataOrNew DataType :: DataOrNew NewType :: DataOrNew data ConDecl ConDecl :: Name -> [(Maybe Strictness, Type)] -> ConDecl data Strictness Lazy :: Strictness Strict :: Strictness type Deriving = (QName, [Type]) data Binds BDecls :: [Decl] -> Binds data Rhs UnGuardedRhs :: Exp -> Rhs GuardedRhss :: [GuardedRhs] -> Rhs data GuardedRhs GuardedRhs :: [Stmt] -> Exp -> GuardedRhs data Match Match :: Name -> [Pat] -> Rhs -> Maybe Binds -> Match data Type TyForall :: [TyVarBind] -> Type -> Type TyFun :: Type -> Type -> Type TyCon :: QName -> Type TyVar :: Name -> Type TyApp :: Type -> Type -> Type FakeType :: String -> Type data Pat PVar :: Name -> Pat PLit :: Literal -> Pat PAsPat :: Name -> Pat -> Pat PWildCard :: Pat PBangPat :: Pat -> Pat PApp :: QName -> [Pat] -> Pat PatTypeSig :: Pat -> Type -> Pat PIrrPat :: Pat -> Pat data Stmt Qualifier :: Exp -> Stmt Generator :: Pat -> Exp -> Stmt data Exp Var :: QName -> Exp Con :: QName -> Exp Lit :: Literal -> Exp InfixApp :: Exp -> QOp -> Exp -> Exp Ann :: Exp -> Type -> Exp App :: Exp -> Exp -> Exp Lambda :: [Pat] -> Exp -> Exp Let :: Binds -> Exp -> Exp If :: Exp -> Exp -> Exp -> Exp Case :: Exp -> [Alt] -> Exp ExpTypeSig :: Exp -> Type -> Exp NegApp :: Exp -> Exp FakeExp :: String -> Exp data Alt Alt :: Pat -> Rhs -> Maybe Binds -> Alt data Literal Int :: Integer -> Literal Frac :: Rational -> Literal Char :: Char -> Literal String :: Text -> Literal data ModuleName ModuleName :: String -> ModuleName data QName Qual :: ModuleName -> Name -> QName UnQual :: Name -> QName data Name Ident :: String -> Name Symbol :: String -> Name data QOp QVarOp :: QName -> QOp data TyVarBind UnkindedVar :: Name -> TyVarBind unit_con :: Exp instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Alt instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Binds instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.ConDecl instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.DataOrNew instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Decl instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Exp instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.GuardedRhs instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Literal instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Match instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.ModuleName instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Name instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Pat instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.QName instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.QOp instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Rhs instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Stmt instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Strictness instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.TyVarBind instance GHC.Classes.Eq Agda.Utils.Haskell.Syntax.Type instance GHC.Classes.Ord Agda.Utils.Haskell.Syntax.ModuleName -- | Strictification of Haskell code module Agda.Compiler.MAlonzo.Strict -- | The function makeStrict makes every function argument, case and -- generator pattern, and LocalBind binding strict (except for -- those patterns that are marked as irrefutable, and anything in a -- FakeDecl or FakeExp). Note that only the outermost -- patterns are made strict. class MakeStrict a makeStrict :: MakeStrict a => a -> a instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Alt instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Binds instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Decl instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Exp instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.GuardedRhs instance Agda.Compiler.MAlonzo.Strict.MakeStrict a => Agda.Compiler.MAlonzo.Strict.MakeStrict [a] instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Match instance Agda.Compiler.MAlonzo.Strict.MakeStrict a => Agda.Compiler.MAlonzo.Strict.MakeStrict (GHC.Internal.Maybe.Maybe a) instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Module instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Pat instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Rhs instance Agda.Compiler.MAlonzo.Strict.MakeStrict Agda.Utils.Haskell.Syntax.Stmt -- | Array utilities. module Agda.Utils.IArray -- | Binary IO. module Agda.Utils.IO.Binary -- | Returns a close function for the file together with the contents. readBinaryFile' :: FilePath -> IO (ByteString, IO ()) module Agda.Utils.IO.Directory -- | copyDirContent src dest recursively copies directory -- src onto dest. -- -- First, a to-do list of copy actions is created. Then, the to-do list -- is carried out. -- -- This avoids copying files we have just created again, which can happen -- if src and dest are not disjoint. (See issue #2705.) copyDirContent :: FilePath -> FilePath -> IO () -- | copyIfChanged src dst makes sure that dst exists and -- has the same content as dst. copyIfChanged :: FilePath -> FilePath -> IO () -- | Search a directory recursively, with recursion controlled by a -- RecursionPredicate. Lazily return a unsorted list of all -- files matching the given FilterPredicate. Any errors that -- occur are ignored, with warnings printed to stderr. findWithInfo :: RecursionPredicate -> FilterPredicate -> FilePath -> IO [FileInfo] -- | Common syntax highlighting functions for Emacs and JSON module Agda.Utils.IO.TempFile -- | Creates a temporary file, writes some stuff, and returns the filepath writeToTempFile :: String -> IO FilePath -- | Text IO using the UTF8 character encoding. module Agda.Utils.IO.UTF8 -- | A kind of exception that can be thrown by readTextFile and -- readFile. data ReadException -- | Reads a UTF8-encoded text file and converts many character sequences -- which may be interpreted as line or paragraph separators into 'n'. -- -- If the file cannot be decoded, then a ReadException is raised. readTextFile :: FilePath -> IO Text -- | Reads a UTF8-encoded text file and converts many character sequences -- which may be interpreted as line or paragraph separators into 'n'. -- -- If the file cannot be decoded, then a ReadException is raised. readFile :: FilePath -> IO String -- | Writes a UTF8-encoded text file. The native convention for line -- endings is used. writeFile :: FilePath -> String -> IO () -- | Writes a UTF8-encoded text file. The native convention for line -- endings is used. writeTextToFile :: FilePath -> Text -> IO () instance GHC.Internal.Exception.Type.Exception Agda.Utils.IO.UTF8.ReadException instance GHC.Internal.Show.Show Agda.Utils.IO.UTF8.ReadException -- | Utilities for Data.IORef. module Agda.Utils.IORef -- | Read IORef, modify it strictly, and return old value. readModifyIORef' :: IORef a -> (a -> a) -> IO a -- | An interface for reporting "impossible" errors module Agda.Utils.Impossible -- | "Impossible" errors, annotated with a file name and a line number -- corresponding to the source code location of the error. data Impossible -- | We reached a program point which should be unreachable. Impossible :: CallStack -> Impossible -- | Impossible with a different error message. Used when we reach -- a program point which can in principle be reached, but not for a -- certain run. Unreachable :: CallStack -> Impossible -- | We reached a program point without all the required primitives or -- BUILTIN to proceed forward. ImpMissingDefinitions neededDefs -- forThis ImpMissingDefinitions :: [String] -> String -> Impossible -- | Abort by throwing an "impossible" error. You should not use this -- function directly. Instead use IMPOSSIBLE throwImpossible :: Impossible -> a -- | Monads in which we can catch an "impossible" error, if possible. class CatchImpossible (m :: Type -> Type) -- | Catch any Impossible exception. catchImpossible :: CatchImpossible m => m a -> (Impossible -> m a) -> m a -- | Catch only Impossible exceptions selected by the filter. catchImpossibleJust :: CatchImpossible m => (Impossible -> Maybe b) -> m a -> (b -> m a) -> m a -- | Version of catchImpossible with argument order suiting short -- handlers. handleImpossible :: CatchImpossible m => (Impossible -> m a) -> m a -> m a -- | Version of catchImpossibleJust with argument order suiting -- short handlers. handleImpossibleJust :: CatchImpossible m => (Impossible -> Maybe b) -> (b -> m a) -> m a -> m a -- | Construct a value of Impossible reporting the location where -- you call this function. impossible :: HasCallStack => Impossible -- | Throw an Impossible error reporting the location where you -- place __IMPOSSIBLE__. __IMPOSSIBLE__ :: HasCallStack => a -- | Throw an Impossible error reporting the *caller's* call site. __IMPOSSIBLE__1 :: HasCallStack => a -- | Throw an Unreachable error reporting the *caller's* call site. -- Note that this call to "withFileAndLine" will be filtered out due its -- filter on the srcLocModule. __UNREACHABLE__ :: HasCallStack => a instance Agda.Utils.Impossible.CatchImpossible GHC.Types.IO instance GHC.Classes.Eq Agda.Utils.Impossible.Impossible instance GHC.Internal.Exception.Type.Exception Agda.Utils.Impossible.Impossible instance Control.DeepSeq.NFData Agda.Utils.Impossible.Impossible instance GHC.Classes.Ord Agda.Utils.Impossible.Impossible instance GHC.Internal.Show.Show Agda.Utils.Impossible.Impossible -- | An empty type with some useful instances. module Agda.Utils.Empty data Empty absurd :: Empty -> a -- | toImpossible e extracts the Impossible value raised -- via IMPOSSIBLE to create the element e of -- type Empty. It proceeds by evaluating e to weak head -- normal form and catching the exception. We are forced to wrap things -- in a Maybe because of catchImpossible's type. toImpossible :: Empty -> IO Impossible instance GHC.Classes.Eq Agda.Utils.Empty.Empty instance Control.DeepSeq.NFData Agda.Utils.Empty.Empty instance GHC.Classes.Ord Agda.Utils.Empty.Empty instance GHC.Internal.Show.Show Agda.Utils.Empty.Empty -- | Representation of Set Bool as a 4-element -- enum type. -- -- All operations in constant time and space. -- -- Mimics the interface of Set. -- -- Import as: import qualified Agda.Utils.BoolSet as BoolSet import -- Agda.Utils.BoolSet (BoolSet) module Agda.Utils.BoolSet -- | Isomorphic to Set Bool. data BoolSet (\\) :: BoolSet -> BoolSet -> BoolSet complement :: BoolSet -> BoolSet delete :: Bool -> BoolSet -> BoolSet difference :: BoolSet -> BoolSet -> BoolSet elems :: BoolSet -> [Bool] -- | The empty set. empty :: BoolSet fromList :: [Bool] -> BoolSet fromAscList :: [Bool] -> BoolSet fromDistinctAscList :: [Bool] -> BoolSet insert :: Bool -> BoolSet -> BoolSet intersection :: BoolSet -> BoolSet -> BoolSet isSubsetOf :: BoolSet -> BoolSet -> Bool lookupMin :: BoolSet -> Maybe Bool member :: Bool -> BoolSet -> Bool -- | not . member b. notMember :: Bool -> BoolSet -> Bool null :: BoolSet -> Bool -- | A singleton set. singleton :: Bool -> BoolSet size :: BoolSet -> Int toList :: BoolSet -> [Bool] toAscList :: BoolSet -> [Bool] -- | toSingleton s == Just b iff s == singleton b. toSingleton :: BoolSet -> Maybe Bool -- | The full set. total :: BoolSet union :: BoolSet -> BoolSet -> BoolSet instance GHC.Internal.Enum.Bounded Agda.Utils.BoolSet.BoolSet instance GHC.Internal.Enum.Enum Agda.Utils.BoolSet.BoolSet instance GHC.Classes.Eq Agda.Utils.BoolSet.BoolSet instance GHC.Classes.Ord Agda.Utils.BoolSet.BoolSet instance GHC.Internal.Show.Show Agda.Utils.BoolSet.BoolSet -- | Possibly infinite sets of integers (but with finitely many consecutive -- segments). Used for checking guard coverage in int/nat cases in the -- treeless compiler. module Agda.Utils.IntSet.Infinite -- | Represents a set of integers. Invariants: - All cannot be the argument -- to Below or Above - at most one IntsBelow - at -- most one IntsAbove - if `Below lo` and `Below hi`, then `lo -- < hi` - if `Below lo .. (Some xs)` then `all (> lo) xs` - if -- `Above hi .. (Some xs)` then `all (< hi - 1) xs` data IntSet -- | No integers. empty :: IntSet -- | All integers. full :: IntSet -- | All integers `< n` below :: Integer -> IntSet -- | All integers `>= n` above :: Integer -> IntSet -- | A single integer. singleton :: Integer -> IntSet difference :: IntSet -> IntSet -> IntSet -- | Membership member :: Integer -> IntSet -> Bool -- | If finite, return the list of elements. toFiniteList :: IntSet -> Maybe [Integer] -- | Invariant. invariant :: IntSet -> Bool instance GHC.Classes.Eq Agda.Utils.IntSet.Infinite.IntSet instance GHC.Internal.Base.Monoid Agda.Utils.IntSet.Infinite.IntSet instance GHC.Internal.Base.Semigroup Agda.Utils.IntSet.Infinite.IntSet instance GHC.Internal.Show.Show Agda.Utils.IntSet.Infinite.IntSet -- | A cut-down implementation of lenses, with names taken from Edward -- Kmett's lens package. module Agda.Utils.Lens -- | Modify a part of the state monadically, and return some result. (%%=) :: MonadState o m => Lens' o i -> (i -> m (i, r)) -> m r infix 4 %%= -- | Modify a part of the state. (%=) :: MonadState o m => Lens' o i -> (i -> i) -> m () infix 4 %= -- | Modify a part of the state monadically. (%==) :: MonadState o m => Lens' o i -> (i -> m i) -> m () infix 4 %== -- | Write a part of the state. (.=) :: MonadState o m => Lens' o i -> i -> m () infix 4 .= -- | Get inner part i of structure o as designated by -- Lens' o i. (^.) :: o -> Lens' o i -> i infixl 8 ^. -- | Focus on given element in a set. contains :: Ord k => k -> Lens' (Set k) Bool -- | Focus on a part of the state for a stateful computation. focus :: forall (m :: Type -> Type) o i a. Monad m => Lens' o i -> StateT i m a -> StateT o m a -- | Build a lens out of an isomorphism. iso :: (o -> i) -> (i -> o) -> Lens' o i -- | Access a map value at a given key. key :: Ord k => k -> Lens' (Map k v) (Maybe v) lFst :: forall a b f. Functor f => (a -> f a) -> (a, b) -> f (a, b) lSnd :: forall a b f. Functor f => (b -> f b) -> (a, b) -> f (a, b) -- | Build a lens from a getter and a setter. lens :: LensGet o i -> LensSet o i -> Lens' o i -- | Only sound if the lenses are disjoint! lensProduct :: Lens' s a -> Lens' s b -> Lens' s (a, b) -- | Modify a part of the state in a subcomputation. locally :: MonadReader o m => Lens' o i -> (i -> i) -> m a -> m a locally' :: ((o -> o) -> m a -> m a) -> Lens' o i -> (i -> i) -> m a -> m a -- | Modify a part of the state locally. locallyState :: MonadState o m => Lens' o i -> (i -> i) -> m r -> m r -- | Modify inner part i of structure o using a function -- i -> i. over :: Lens' o i -> LensMap o i -- | Set inner part i of structure o as designated by -- Lens' o i. set :: Lens' o i -> LensSet o i -- | Read a part of the state. use :: MonadState o m => Lens' o i -> m i -- | Ask for part of read-only state. view :: MonadReader o m => Lens' o i -> m i -- | Van Laarhoven style homogeneous lenses. Mnemoic: "Lens outer inner", -- same type argument order as 'get :: o -> i'. type Lens' o i = forall (f :: Type -> Type). Functor f => i -> f i -> o -> f o type LensGet o i = o -> i type LensMap o i = i -> i -> o -> o type LensSet o i = i -> o -> o -- | Flipped version of <$>. -- --
-- (<&>) = flip fmap ---- --
-- >>> Just 2 <&> (+1) -- Just 3 ---- --
-- >>> [1,2,3] <&> (+1) -- [2,3,4] ---- --
-- >>> Right 3 <&> (+1) -- Right 4 --(<&>) :: Functor f => f a -> (a -> b) -> f b infixl 1 <&> -- | Fanout: send the input to both argument arrows and combine their -- output. -- -- The default definition may be overridden with a more efficient version -- if desired. -- --
-- ╭───────╮ c -- b │ ┌─ f ─┼───> -- >───┼─┤ │ -- │ └─ g ─┼───> -- ╰───────╯ c' --(&&&) :: Arrow a => a b c -> a b c' -> a b (c, c') infixr 3 &&& module Agda.Utils.IndexedList -- | Existential wrapper for indexed types. data Some (a :: k -> Type) [Some] :: forall {k} (a :: k -> Type) (i :: k). a i -> Some a -- | Unpacking a wrapped value. withSome :: Some b -> (forall (i :: k). () => b i -> a) -> a -- | Lists indexed by a type-level list. A value of type All p -- [x₁..xₙ] is a sequence of values of types p x₁, .., -- p xₙ. data All (a :: x -> Type) (b :: [x]) [Nil] :: forall {x} (a :: x -> Type). All a ('[] :: [x]) [Cons] :: forall {x} (a :: x -> Type) (x1 :: x) (xs :: [x]). a x1 -> All a xs -> All a (x1 ': xs) -- | Constructing an indexed list from a plain list. makeAll :: forall {x} a (b :: x -> Type). (a -> Some b) -> [a] -> Some (All b) -- | Turning an indexed list back into a plain list. forgetAll :: forall {x} b a (xs :: [x]). (forall (x1 :: x). () => b x1 -> a) -> All b xs -> [a] -- | An index into a type-level list. data Index (a :: [x]) (b :: x) [Zero] :: forall {x} (b :: x) (xs :: [x]). Index (b ': xs) b [Suc] :: forall {x} (xs :: [x]) (b :: x) (y :: x). Index xs b -> Index (y ': xs) b -- | Indices are just natural numbers. forgetIndex :: forall {x1} (xs :: [x1]) (x2 :: x1). Index xs x2 -> Int -- | Mapping over an indexed list. mapWithIndex :: forall {x} (xs :: [x]) p q. (forall (x1 :: x). () => Index xs x1 -> p x1 -> q x1) -> All p xs -> All q xs -- | If you have an index you can get a lens for the given element. lIndex :: forall {x1} (xs :: [x1]) (x2 :: x1) (p :: x1 -> Type). Index xs x2 -> Lens' (All p xs) (p x2) -- | Looking up an element in an indexed list. lookupIndex :: forall {x1} p (xs :: [x1]) (x2 :: x1). All p xs -> Index xs x2 -> p x2 -- | All indices into an indexed list. allIndices :: forall {x} (p :: x -> Type) (xs :: [x]). All p xs -> All (Index xs) xs -- | Examples how to use Agda.Utils.Lens. module Agda.Utils.Lens.Examples data Record a b Record :: a -> b -> Record a b [field1] :: Record a b -> a [field2] :: Record a b -> b -- | (View source:) This is how you implement a lens for a record field. lensField1 :: forall a b f. Functor f => (a -> f a) -> Record a b -> f (Record a b) lensField2 :: forall a b f. Functor f => (b -> f b) -> Record a b -> f (Record a b) module Agda.Utils.Map -- | Update monadically the value at one position (must exist!). adjustM :: (Functor f, Ord k) => (v -> f v) -> k -> Map k v -> f (Map k v) -- | Wrapper for adjustM for convenience. adjustM' :: (Functor f, Ord k) => (v -> f (a, v)) -> k -> Map k v -> f (a, Map k v) -- | Filter a map based on the keys. filterKeys :: (k -> Bool) -> Map k a -> Map k a -- | Non-empty maps. -- -- Provides type Map1 of non-empty maps. -- -- Import: @ -- -- import Agda.Utils.Map1 (Map1) import qualified Agda.Utils.Map1 as Map1 -- -- @ module Agda.Utils.Map1 ifNull :: Map k a -> b -> (Map1 k a -> b) -> b -- | A more general type would be Null m => Map k a -> (Map1 k a -- -> m) -> m but this type is problematic as we do not have a -- general instance Applicative m => Null (m ()). unlessNull :: Applicative m => Map k a -> (Map1 k a -> m ()) -> m () unlessNullM :: Monad m => m (Map k a) -> (Map1 k a -> m ()) -> m () type Map1 = NEMap (!) :: Ord k => NEMap k a -> k -> a (!?) :: Ord k => NEMap k a -> k -> Maybe a pattern IsEmpty :: Map k a pattern IsNonEmpty :: NEMap k a -> Map k a (\\) :: Ord k => NEMap k a -> NEMap k b -> Map k a absurdNEMap :: NEMap Void a -> b adjust :: Ord k => (a -> a) -> k -> NEMap k a -> NEMap k a adjustAt :: (k -> a -> a) -> Int -> NEMap k a -> NEMap k a adjustMax :: (a -> a) -> NEMap k a -> NEMap k a adjustMaxWithKey :: (k -> a -> a) -> NEMap k a -> NEMap k a adjustMin :: (a -> a) -> NEMap k a -> NEMap k a adjustMinWithKey :: (k -> a -> a) -> NEMap k a -> NEMap k a adjustWithKey :: Ord k => (k -> a -> a) -> k -> NEMap k a -> NEMap k a alter :: Ord k => (Maybe a -> Maybe a) -> k -> NEMap k a -> Map k a alter' :: Ord k => (Maybe a -> a) -> k -> NEMap k a -> NEMap k a alterF :: (Ord k, Functor f) => (Maybe a -> f (Maybe a)) -> k -> NEMap k a -> f (Map k a) alterF' :: (Ord k, Functor f) => (Maybe a -> f a) -> k -> NEMap k a -> f (NEMap k a) assocs :: NEMap k a -> NonEmpty (k, a) delete :: Ord k => k -> NEMap k a -> Map k a deleteAt :: Int -> NEMap k a -> Map k a deleteFindMax :: NEMap k a -> ((k, a), Map k a) deleteFindMin :: NEMap k a -> ((k, a), Map k a) deleteMax :: NEMap k a -> Map k a deleteMin :: NEMap k a -> Map k a difference :: Ord k => NEMap k a -> NEMap k b -> Map k a differenceWith :: Ord k => (a -> b -> Maybe a) -> NEMap k a -> NEMap k b -> Map k a differenceWithKey :: Ord k => (k -> a -> b -> Maybe a) -> NEMap k a -> NEMap k b -> Map k a drop :: Int -> NEMap k a -> Map k a dropWhileAntitone :: (k -> Bool) -> NEMap k a -> Map k a elemAt :: Int -> NEMap k a -> (k, a) filter :: (a -> Bool) -> NEMap k a -> Map k a filterWithKey :: (k -> a -> Bool) -> NEMap k a -> Map k a findIndex :: Ord k => k -> NEMap k a -> Int findMax :: NEMap k a -> (k, a) findMin :: NEMap k a -> (k, a) findWithDefault :: Ord k => a -> k -> NEMap k a -> a foldl1' :: (a -> a -> a) -> NEMap k a -> a foldlWithKey :: (a -> k -> b -> a) -> a -> NEMap k b -> a foldlWithKey' :: (a -> k -> b -> a) -> a -> NEMap k b -> a foldr1' :: (a -> a -> a) -> NEMap k a -> a foldrWithKey :: (k -> a -> b -> b) -> b -> NEMap k a -> b foldrWithKey' :: (k -> a -> b -> b) -> b -> NEMap k a -> b fromAscList :: Eq k => NonEmpty (k, a) -> NEMap k a fromAscListWith :: Eq k => (a -> a -> a) -> NonEmpty (k, a) -> NEMap k a fromAscListWithKey :: Eq k => (k -> a -> a -> a) -> NonEmpty (k, a) -> NEMap k a fromDescList :: Eq k => NonEmpty (k, a) -> NEMap k a fromDescListWith :: Eq k => (a -> a -> a) -> NonEmpty (k, a) -> NEMap k a fromDescListWithKey :: Eq k => (k -> a -> a -> a) -> NonEmpty (k, a) -> NEMap k a fromDistinctAscList :: NonEmpty (k, a) -> NEMap k a fromDistinctDescList :: NonEmpty (k, a) -> NEMap k a fromListWith :: Ord k => (a -> a -> a) -> NonEmpty (k, a) -> NEMap k a fromListWithKey :: Ord k => (k -> a -> a -> a) -> NonEmpty (k, a) -> NEMap k a fromSet :: (k -> a) -> NESet k -> NEMap k a insert :: Ord k => k -> a -> NEMap k a -> NEMap k a insertLookupWithKey :: Ord k => (k -> a -> a -> a) -> k -> a -> NEMap k a -> (Maybe a, NEMap k a) insertMap :: Ord k => k -> a -> Map k a -> NEMap k a insertMapMax :: k -> a -> Map k a -> NEMap k a insertMapMin :: k -> a -> Map k a -> NEMap k a insertMapWith :: Ord k => (a -> a -> a) -> k -> a -> Map k a -> NEMap k a insertMapWithKey :: Ord k => (k -> a -> a -> a) -> k -> a -> Map k a -> NEMap k a insertWithKey :: Ord k => (k -> a -> a -> a) -> k -> a -> NEMap k a -> NEMap k a intersection :: Ord k => NEMap k a -> NEMap k b -> Map k a intersectionWith :: Ord k => (a -> b -> c) -> NEMap k a -> NEMap k b -> Map k c intersectionWithKey :: Ord k => (k -> a -> b -> c) -> NEMap k a -> NEMap k b -> Map k c isProperSubmapOf :: (Ord k, Eq a) => NEMap k a -> NEMap k a -> Bool isProperSubmapOfBy :: Ord k => (a -> b -> Bool) -> NEMap k a -> NEMap k b -> Bool isSubmapOf :: (Ord k, Eq a) => NEMap k a -> NEMap k a -> Bool isSubmapOfBy :: Ord k => (a -> b -> Bool) -> NEMap k a -> NEMap k b -> Bool keys :: NEMap k a -> NonEmpty k keysSet :: NEMap k a -> NESet k lookup :: Ord k => k -> NEMap k a -> Maybe a lookupGE :: Ord k => k -> NEMap k a -> Maybe (k, a) lookupGT :: Ord k => k -> NEMap k a -> Maybe (k, a) lookupIndex :: Ord k => k -> NEMap k a -> Maybe Int lookupLE :: Ord k => k -> NEMap k a -> Maybe (k, a) lookupLT :: Ord k => k -> NEMap k a -> Maybe (k, a) mapAccum :: (a -> b -> (a, c)) -> a -> NEMap k b -> (a, NEMap k c) mapAccumRWithKey :: (a -> k -> b -> (a, c)) -> a -> NEMap k b -> (a, NEMap k c) mapAccumWithKey :: (a -> k -> b -> (a, c)) -> a -> NEMap k b -> (a, NEMap k c) mapEither :: (a -> Either b c) -> NEMap k a -> These (NEMap k b) (NEMap k c) mapEitherWithKey :: (k -> a -> Either b c) -> NEMap k a -> These (NEMap k b) (NEMap k c) mapKeys :: Ord k2 => (k1 -> k2) -> NEMap k1 a -> NEMap k2 a mapKeysMonotonic :: (k1 -> k2) -> NEMap k1 a -> NEMap k2 a mapKeysWith :: Ord k2 => (a -> a -> a) -> (k1 -> k2) -> NEMap k1 a -> NEMap k2 a mapMaybe :: (a -> Maybe b) -> NEMap k a -> Map k b mapMaybeWithKey :: (k -> a -> Maybe b) -> NEMap k a -> Map k b mapWithKey :: (k -> a -> b) -> NEMap k a -> NEMap k b maxView :: NEMap k a -> (a, Map k a) member :: Ord k => k -> NEMap k a -> Bool minView :: NEMap k a -> (a, Map k a) notMember :: Ord k => k -> NEMap k a -> Bool partition :: (a -> Bool) -> NEMap k a -> These (NEMap k a) (NEMap k a) partitionWithKey :: (k -> a -> Bool) -> NEMap k a -> These (NEMap k a) (NEMap k a) restrictKeys :: Ord k => NEMap k a -> Set k -> Map k a spanAntitone :: (k -> Bool) -> NEMap k a -> These (NEMap k a) (NEMap k a) split :: Ord k => k -> NEMap k a -> Maybe (These (NEMap k a) (NEMap k a)) splitAt :: Int -> NEMap k a -> These (NEMap k a) (NEMap k a) splitLookup :: Ord k => k -> NEMap k a -> These a (These (NEMap k a) (NEMap k a)) splitRoot :: NEMap k a -> NonEmpty (NEMap k a) take :: Int -> NEMap k a -> Map k a takeWhileAntitone :: (k -> Bool) -> NEMap k a -> Map k a toAscList :: NEMap k a -> NonEmpty (k, a) toDescList :: NEMap k a -> NonEmpty (k, a) traverseMaybeWithKey :: Applicative t => (k -> a -> t (Maybe b)) -> NEMap k a -> t (Map k b) traverseMaybeWithKey1 :: Apply t => (k -> a -> t (Maybe b)) -> NEMap k a -> t (Map k b) unionWith :: Ord k => (a -> a -> a) -> NEMap k a -> NEMap k a -> NEMap k a unionWithKey :: Ord k => (k -> a -> a -> a) -> NEMap k a -> NEMap k a -> NEMap k a unionsWith :: (Foldable1 f, Ord k) => (a -> a -> a) -> f (NEMap k a) -> NEMap k a unsafeFromMap :: Map k a -> NEMap k a update :: Ord k => (a -> Maybe a) -> k -> NEMap k a -> Map k a updateAt :: (k -> a -> Maybe a) -> Int -> NEMap k a -> Map k a updateLookupWithKey :: Ord k => (k -> a -> Maybe a) -> k -> NEMap k a -> (Maybe a, Map k a) updateMax :: (a -> Maybe a) -> NEMap k a -> Map k a updateMaxWithKey :: (k -> a -> Maybe a) -> NEMap k a -> Map k a updateMin :: (a -> Maybe a) -> NEMap k a -> Map k a updateMinWithKey :: (k -> a -> Maybe a) -> NEMap k a -> Map k a updateWithKey :: Ord k => (k -> a -> Maybe a) -> k -> NEMap k a -> Map k a withoutKeys :: Ord k => NEMap k a -> Set k -> Map k a elems :: NEMap k a -> NonEmpty a foldMapWithKey :: Semigroup m => (k -> a -> m) -> NEMap k a -> m foldl :: (a -> b -> a) -> a -> NEMap k b -> a foldl' :: (a -> b -> a) -> a -> NEMap k b -> a foldl1 :: (a -> a -> a) -> NEMap k a -> a foldr :: (a -> b -> b) -> b -> NEMap k a -> b foldr' :: (a -> b -> b) -> b -> NEMap k a -> b foldr1 :: (a -> a -> a) -> NEMap k a -> a fromList :: Ord k => NonEmpty (k, a) -> NEMap k a insertWith :: Ord k => (a -> a -> a) -> k -> a -> NEMap k a -> NEMap k a map :: (a -> b) -> NEMap k a -> NEMap k b nonEmptyMap :: Map k a -> Maybe (NEMap k a) singleton :: k -> a -> NEMap k a size :: NEMap k a -> Int toList :: NEMap k a -> NonEmpty (k, a) toMap :: NEMap k a -> Map k a traverseWithKey :: Applicative t => (k -> a -> t b) -> NEMap k a -> t (NEMap k b) traverseWithKey1 :: Apply t => (k -> a -> t b) -> NEMap k a -> t (NEMap k b) union :: Ord k => NEMap k a -> NEMap k a -> NEMap k a unions :: (Foldable1 f, Ord k) => f (NEMap k a) -> NEMap k a valid :: Ord k => NEMap k a -> Bool withNonEmpty :: r -> (NEMap k a -> r) -> Map k a -> r data NEMap k a -- | Extend Maybe by common operations for the Maybe type. -- -- Note: since this module is usually imported unqualified, we do not use -- short names, but all names contain Maybe, Just, or -- 'Nothing. module Agda.Utils.Maybe -- | Lazy version of allJust . sequence. (allJust = -- mapM for the Maybe monad.) Only executes monadic effect -- while isJust. allJustM :: Monad m => [m (Maybe a)] -> m (Maybe [a]) -- | Retain object when tag is True. boolToMaybe :: Bool -> a -> Maybe a -- | Version of maybe with different argument ordering. Often, we -- want to case on a Maybe, do something interesting in the -- Just case, but only a default action in the Nothing -- case. Then, the argument ordering of caseMaybe is preferable. -- --
-- caseMaybe m d f = flip (maybe d) m f --caseMaybe :: Maybe a -> b -> (a -> b) -> b -- | Monadic version of caseMaybe. That is, maybeM with a -- different argument ordering. caseMaybeM :: Monad m => m (Maybe a) -> m b -> (a -> m b) -> m b -- | Filtering a singleton list. -- --
-- filterMaybe p a = listToMaybe (filter p [a]) --filterMaybe :: (a -> Bool) -> a -> Maybe a -- | Version of mapMaybe with different argument ordering. forMaybe :: [a] -> (a -> Maybe b) -> [b] -- | Monadic version of fromMaybe. fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a -- | caseMaybe with flipped branches. ifJust :: Maybe a -> (a -> b) -> b -> b -- | caseMaybeM with flipped branches. ifJustM :: Monad m => m (Maybe a) -> (a -> m b) -> m b -> m b -- | Lift a maybe to an Alternative. liftMaybe :: Alternative f => Maybe a -> f a -- | Monadic version of maybe. maybeM :: Monad m => m b -> (a -> m b) -> m (Maybe a) -> m b -- | Like span, takes the prefix of a list satisfying a predicate. -- Returns the run of Justs until the first Nothing, and -- the tail of the list. spanMaybe :: (a -> Maybe b) -> [a] -> ([b], [a]) -- | unionWith for collections of size <= 1. unionMaybeWith :: (a -> a -> a) -> Maybe a -> Maybe a -> Maybe a -- | unionsWith for collections of size <= 1. unionsMaybeWith :: (a -> a -> a) -> [Maybe a] -> Maybe a -- | Unzipping a list of length <= 1. unzipMaybe :: Maybe (a, b) -> (Maybe a, Maybe b) -- | A more telling name for forM_ for the Maybe collection -- type. Or: caseMaybe without the Nothing case. whenJust :: Monad m => Maybe a -> (a -> m ()) -> m () -- | caseMaybeM without the Nothing case. whenJustM :: Monad m => m (Maybe a) -> (a -> m ()) -> m () -- | Pendent to whenJust. whenNothing :: Monad m => Maybe a -> m () -> m () -- | caseMaybeM without the Just case. whenNothingM :: Monad m => m (Maybe a) -> m () -> m () module Agda.Utils.Memo -- | Simple, non-reentrant memoisation. memo :: MonadState s m => Lens' s (Maybe a) -> m a -> m a -- | Recursive memoisation, second argument is the value you get on -- recursive calls. memoRec :: MonadState s m => Lens' s (Maybe a) -> a -> m a -> m a memoUnsafe :: Ord a => (a -> b) -> a -> b memoUnsafeH :: (Eq a, Hashable a) => (a -> b) -> a -> b -- | More monoids. module Agda.Utils.Monoid -- | Maximum of on-negative (small) natural numbers. newtype MaxNat MaxNat :: Int -> MaxNat [getMaxNat] :: MaxNat -> Int instance GHC.Internal.Enum.Enum Agda.Utils.Monoid.MaxNat instance GHC.Classes.Eq Agda.Utils.Monoid.MaxNat instance GHC.Internal.Base.Monoid Agda.Utils.Monoid.MaxNat instance GHC.Internal.Num.Num Agda.Utils.Monoid.MaxNat instance GHC.Classes.Ord Agda.Utils.Monoid.MaxNat instance GHC.Internal.Base.Semigroup Agda.Utils.Monoid.MaxNat instance GHC.Internal.Show.Show Agda.Utils.Monoid.MaxNat module Agda.Utils.PartialOrd -- | The result of comparing two things (of the same type). data PartialOrdering -- | Less than. POLT :: PartialOrdering -- | Less or equal than. POLE :: PartialOrdering -- | Equal POEQ :: PartialOrdering -- | Greater or equal. POGE :: PartialOrdering -- | Greater than. POGT :: PartialOrdering -- | No information (incomparable). POAny :: PartialOrdering -- | Comparing the information content of two elements of -- PartialOrdering. More precise information is smaller. -- -- Includes equality: x leqPO x == True. leqPO :: PartialOrdering -> PartialOrdering -> Bool -- | Opposites. -- -- related a po b iff related b (oppPO po) a. oppPO :: PartialOrdering -> PartialOrdering -- | Combining two pieces of information (picking the least information). -- Used for the dominance ordering on tuples. -- -- orPO is associative, commutative, and idempotent. -- orPO has dominant element POAny, but no neutral -- element. orPO :: PartialOrdering -> PartialOrdering -> PartialOrdering -- | Chains (transitivity) x R y S z. -- -- seqPO is associative, commutative, and idempotent. -- seqPO has dominant element POAny and neutral element -- (unit) POEQ. seqPO :: PartialOrdering -> PartialOrdering -> PartialOrdering -- | Embed Ordering. fromOrdering :: Ordering -> PartialOrdering -- | Represent a non-empty disjunction of Orderings as -- PartialOrdering. fromOrderings :: [Ordering] -> PartialOrdering -- | A PartialOrdering information is a disjunction of -- Ordering informations. toOrderings :: PartialOrdering -> [Ordering] type Comparable a = a -> a -> PartialOrdering -- | Decidable partial orderings. class PartialOrd a comparable :: PartialOrd a => Comparable a -- | Any Ord is a PartialOrd. comparableOrd :: Ord a => Comparable a -- | Are two elements related in a specific way? -- -- related a o b holds iff comparable a b is contained -- in o. related :: PartialOrd a => a -> PartialOrdering -> a -> Bool -- | Pointwise comparison wrapper. newtype Pointwise a Pointwise :: a -> Pointwise a [pointwise] :: Pointwise a -> a -- | Inclusion comparison wrapper. newtype Inclusion a Inclusion :: a -> Inclusion a [inclusion] :: Inclusion a -> a instance GHC.Internal.Enum.Bounded Agda.Utils.PartialOrd.PartialOrdering instance GHC.Internal.Enum.Enum Agda.Utils.PartialOrd.PartialOrdering instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.PartialOrd.Inclusion a) instance GHC.Classes.Eq Agda.Utils.PartialOrd.PartialOrdering instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.PartialOrd.Pointwise a) instance GHC.Internal.Base.Functor Agda.Utils.PartialOrd.Inclusion instance GHC.Internal.Base.Functor Agda.Utils.PartialOrd.Pointwise instance GHC.Internal.Base.Monoid Agda.Utils.PartialOrd.PartialOrdering instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Utils.PartialOrd.Inclusion a) instance (Agda.Utils.PartialOrd.PartialOrd a, Agda.Utils.PartialOrd.PartialOrd b) => Agda.Utils.PartialOrd.PartialOrd (GHC.Internal.Data.Either.Either a b) instance GHC.Classes.Ord a => Agda.Utils.PartialOrd.PartialOrd (Agda.Utils.PartialOrd.Inclusion [a]) instance GHC.Classes.Ord a => Agda.Utils.PartialOrd.PartialOrd (Agda.Utils.PartialOrd.Inclusion (Data.Set.Internal.Set a)) instance Agda.Utils.PartialOrd.PartialOrd GHC.Types.Int instance Agda.Utils.PartialOrd.PartialOrd GHC.Num.Integer.Integer instance Agda.Utils.PartialOrd.PartialOrd a => Agda.Utils.PartialOrd.PartialOrd (GHC.Internal.Maybe.Maybe a) instance Agda.Utils.PartialOrd.PartialOrd Agda.Utils.PartialOrd.PartialOrdering instance Agda.Utils.PartialOrd.PartialOrd a => Agda.Utils.PartialOrd.PartialOrd (Agda.Utils.PartialOrd.Pointwise [a]) instance (Agda.Utils.PartialOrd.PartialOrd a, Agda.Utils.PartialOrd.PartialOrd b) => Agda.Utils.PartialOrd.PartialOrd (a, b) instance Agda.Utils.PartialOrd.PartialOrd () instance GHC.Internal.Base.Semigroup Agda.Utils.PartialOrd.PartialOrdering instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.PartialOrd.Inclusion a) instance GHC.Internal.Show.Show Agda.Utils.PartialOrd.PartialOrdering instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.PartialOrd.Pointwise a) -- | Partially ordered monoids. module Agda.Utils.POMonoid -- | Partially ordered semigroup. -- -- Law: composition must be monotone. -- --
-- related x POLE x' && related y POLE y' ==> -- related (x <> y) POLE (x' <> y') --class (PartialOrd a, Semigroup a) => POSemigroup a -- | Partially ordered monoid. -- -- Law: composition must be monotone. -- --
-- related x POLE x' && related y POLE y' ==> -- related (x <> y) POLE (x' <> y') --class (PartialOrd a, Semigroup a, Monoid a) => POMonoid a -- | Completing POMonoids with inverses to form a Galois connection. -- -- Law: composition and inverse composition form a Galois connection. -- --
-- related (inverseCompose p x) POLE y == related x POLE (p <> y) --class POMonoid a => LeftClosedPOMonoid a inverseCompose :: LeftClosedPOMonoid a => a -> a -> a -- | hasLeftAdjoint x checks whether x^-1 := x -- inverseCompose mempty is such that x -- inverseCompose y == x^-1 <> y for any y. hasLeftAdjoint :: LeftClosedPOMonoid a => a -> Bool module Agda.Utils.SemiRing -- | Semirings (https://en.wikipedia.org/wiki/Semiring). class SemiRing a ozero :: SemiRing a => a oone :: SemiRing a => a oplus :: SemiRing a => a -> a -> a otimes :: SemiRing a => a -> a -> a -- | Star semirings -- (https://en.wikipedia.org/wiki/Semiring#Star_semirings). class SemiRing a => StarSemiRing a ostar :: StarSemiRing a => a -> a instance Agda.Utils.SemiRing.SemiRing a => Agda.Utils.SemiRing.SemiRing (GHC.Internal.Maybe.Maybe a) instance Agda.Utils.SemiRing.SemiRing () instance Agda.Utils.SemiRing.StarSemiRing a => Agda.Utils.SemiRing.StarSemiRing (GHC.Internal.Maybe.Maybe a) instance Agda.Utils.SemiRing.StarSemiRing () -- | Some semigroup instances used in several places module Agda.Utils.Semigroup -- | The class of semigroups (types with an associative binary operation). -- -- Instances should satisfy the following: -- -- -- -- You can alternatively define sconcat instead of -- (<>), in which case the laws are: -- --
-- >>> [1,2,3] <> [4,5,6] -- [1,2,3,4,5,6] ---- --
-- >>> Just [1, 2, 3] <> Just [4, 5, 6] -- Just [1,2,3,4,5,6] ---- --
-- >>> putStr "Hello, " <> putStrLn "World!" -- Hello, World! --(<>) :: Semigroup a => a -> a -> a infixr 6 <> instance (GHC.Internal.Base.Monad m, GHC.Internal.Base.Semigroup doc) => GHC.Internal.Base.Semigroup (Control.Monad.Trans.Except.ExceptT e m doc) instance (GHC.Internal.Base.Monad m, GHC.Internal.Base.Semigroup doc) => GHC.Internal.Base.Semigroup (Control.Monad.Trans.Maybe.MaybeT m doc) instance (GHC.Internal.Base.Applicative m, GHC.Internal.Base.Semigroup doc) => GHC.Internal.Base.Semigroup (Control.Monad.Trans.Reader.ReaderT s m doc) instance (GHC.Internal.Base.Monad m, GHC.Internal.Base.Semigroup doc) => GHC.Internal.Base.Semigroup (Control.Monad.Trans.State.Lazy.StateT s m doc) instance (GHC.Internal.Base.Monad m, GHC.Internal.Base.Semigroup doc, GHC.Internal.Base.Monoid w) => GHC.Internal.Base.Semigroup (Control.Monad.Trans.Writer.Lazy.WriterT w m doc) -- | Non-empty sets. -- -- Provides type Set1 of non-empty sets. -- -- Import: @ -- -- import Agda.Utils.Set1 (Set1) import qualified Agda.Utils.Set1 as Set1 -- -- @ module Agda.Utils.Set1 ifNull :: Set a -> b -> (Set1 a -> b) -> b -- | Lossless toSet. Opposite of nonEmptySet. toSet' :: Maybe (Set1 a) -> Set a -- | A more general type would be Null m => Set a -> (Set1 a -- -> m) -> m but this type is problematic as we do not have a -- general instance Applicative m => Null (m ()). unlessNull :: Applicative m => Set a -> (Set1 a -> m ()) -> m () unlessNullM :: Monad m => m (Set a) -> (Set1 a -> m ()) -> m () type Set1 = NESet pattern IsEmpty :: Set a pattern IsNonEmpty :: NESet a -> Set a (\\) :: Ord a => NESet a -> NESet a -> Set a cartesianProduct :: NESet a -> NESet b -> NESet (a, b) delete :: Ord a => a -> NESet a -> Set a deleteAt :: Int -> NESet a -> Set a deleteFindMax :: NESet a -> (a, Set a) deleteFindMin :: NESet a -> (a, Set a) deleteMax :: NESet a -> Set a deleteMin :: NESet a -> Set a difference :: Ord a => NESet a -> NESet a -> Set a disjoint :: Ord a => NESet a -> NESet a -> Bool disjointUnion :: NESet a -> NESet b -> NESet (Either a b) drop :: Int -> NESet a -> Set a dropWhileAntitone :: (a -> Bool) -> NESet a -> Set a elemAt :: Int -> NESet a -> a elems :: NESet a -> NonEmpty a filter :: (a -> Bool) -> NESet a -> Set a findIndex :: Ord a => a -> NESet a -> Int findMax :: NESet a -> a findMin :: NESet a -> a foldl1' :: (a -> a -> a) -> NESet a -> a foldr1' :: (a -> a -> a) -> NESet a -> a fromAscList :: Eq a => NonEmpty a -> NESet a fromDescList :: Eq a => NonEmpty a -> NESet a fromDistinctAscList :: NonEmpty a -> NESet a fromDistinctDescList :: NonEmpty a -> NESet a insert :: Ord a => a -> NESet a -> NESet a insertSet :: Ord a => a -> Set a -> NESet a insertSetMax :: a -> Set a -> NESet a insertSetMin :: a -> Set a -> NESet a intersection :: Ord a => NESet a -> NESet a -> Set a isProperSubsetOf :: Ord a => NESet a -> NESet a -> Bool isSubsetOf :: Ord a => NESet a -> NESet a -> Bool lookupGE :: Ord a => a -> NESet a -> Maybe a lookupGT :: Ord a => a -> NESet a -> Maybe a lookupIndex :: Ord a => a -> NESet a -> Maybe Int lookupLE :: Ord a => a -> NESet a -> Maybe a lookupLT :: Ord a => a -> NESet a -> Maybe a map :: Ord b => (a -> b) -> NESet a -> NESet b mapMonotonic :: (a -> b) -> NESet a -> NESet b member :: Ord a => a -> NESet a -> Bool notMember :: Ord a => a -> NESet a -> Bool partition :: (a -> Bool) -> NESet a -> These (NESet a) (NESet a) powerSet :: NESet a -> NESet (NESet a) spanAntitone :: (a -> Bool) -> NESet a -> These (NESet a) (NESet a) split :: Ord a => a -> NESet a -> Maybe (These (NESet a) (NESet a)) splitAt :: Int -> NESet a -> These (NESet a) (NESet a) splitMember :: Ord a => a -> NESet a -> (Bool, Maybe (These (NESet a) (NESet a))) splitRoot :: NESet a -> NonEmpty (NESet a) take :: Int -> NESet a -> Set a takeWhileAntitone :: (a -> Bool) -> NESet a -> Set a toAscList :: NESet a -> NonEmpty a toDescList :: NESet a -> NonEmpty a unsafeFromSet :: Set a -> NESet a foldl :: (a -> b -> a) -> a -> NESet b -> a foldl' :: (a -> b -> a) -> a -> NESet b -> a foldr :: (a -> b -> b) -> b -> NESet a -> b foldr' :: (a -> b -> b) -> b -> NESet a -> b fromList :: Ord a => NonEmpty a -> NESet a nonEmptySet :: Set a -> Maybe (NESet a) singleton :: a -> NESet a size :: NESet a -> Int toList :: NESet a -> NonEmpty a toSet :: NESet a -> Set a union :: Ord a => NESet a -> NESet a -> NESet a unions :: (Foldable1 f, Ord a) => f (NESet a) -> NESet a valid :: Ord a => NESet a -> Bool withNonEmpty :: r -> (NESet a -> r) -> Set a -> r -- | A variant of foldl that has no base case, and thus may only be -- applied to non-empty structures. -- -- This function is non-total and will raise a runtime exception if the -- structure happens to be empty. -- --
-- foldl1 f = foldl1 f . toList ---- --
-- >>> foldl1 (+) [1..4] -- 10 ---- --
-- >>> foldl1 (+) [] -- *** Exception: Prelude.foldl1: empty list ---- --
-- >>> foldl1 (+) Nothing -- *** Exception: foldl1: empty structure ---- --
-- >>> foldl1 (-) [1..4] -- -8 ---- --
-- >>> foldl1 (&&) [True, False, True, True] -- False ---- --
-- >>> foldl1 (||) [False, False, True, True] -- True ---- --
-- >>> foldl1 (+) [1..] -- * Hangs forever * --foldl1 :: Foldable t => (a -> a -> a) -> t a -> a -- | A variant of foldr that has no base case, and thus may only be -- applied to non-empty structures. -- -- This function is non-total and will raise a runtime exception if the -- structure happens to be empty. -- --
-- >>> foldr1 (+) [1..4] -- 10 ---- --
-- >>> foldr1 (+) [] -- Exception: Prelude.foldr1: empty list ---- --
-- >>> foldr1 (+) Nothing -- *** Exception: foldr1: empty structure ---- --
-- >>> foldr1 (-) [1..4] -- -2 ---- --
-- >>> foldr1 (&&) [True, False, True, True] -- False ---- --
-- >>> foldr1 (||) [False, False, True, True] -- True ---- --
-- >>> foldr1 (+) [1..] -- * Hangs forever * --foldr1 :: Foldable t => (a -> a -> a) -> t a -> a data NESet a module Agda.Utils.Suffix -- | Is the character one of the subscripts '₀'-'₉'? isSubscriptDigit :: Char -> Bool -- | Converts '0'-'9' to '₀'-'₉' -- -- Precondition: The digit needs to be in range. toSubscriptDigit :: Char -> Char -- | Converts '₀'-'₉' to '0'-'9'. -- -- Precondition: The digit needs to be in range. fromSubscriptDigit :: Char -> Char -- | Classification of identifier variants. data Suffix -- | Identifier ends in Integer many primes. Prime :: Integer -> Suffix -- | Identifier ends in number Integer (ordinary digits). Index :: Integer -> Suffix -- | Identifier ends in number Integer (subscript digits). Subscript :: Integer -> Suffix -- | Increase the suffix by one. nextSuffix :: Suffix -> Suffix -- | Parse suffix. suffixView :: String -> (String, Maybe Suffix) -- | Print suffix. renderSuffix :: Suffix -> String addSuffix :: String -> Suffix -> String -- | Tools for 3-way partitioning. module Agda.Utils.Three -- | Enum type with 3 elements. data Three One :: Three Two :: Three Three :: Three -- | Partition a list into 3 groups. -- -- Preserves the relative order or elements. partition3 :: (a -> Three) -> [a] -> ([a], [a], [a]) -- | Disjoint sum of three. data Either3 a b c In1 :: a -> Either3 a b c In2 :: b -> Either3 a b c In3 :: c -> Either3 a b c -- | Partition a list into 3 groups. -- -- Preserves the relative order or elements. partitionEithers3 :: [Either3 a b c] -> ([a], [b], [c]) mapEither3M :: Applicative m => (a -> m (Either3 b c d)) -> [a] -> m ([b], [c], [d]) forEither3M :: Applicative m => [a] -> (a -> m (Either3 b c d)) -> m ([b], [c], [d]) instance GHC.Internal.Enum.Bounded Agda.Utils.Three.Three instance GHC.Internal.Enum.Enum Agda.Utils.Three.Three instance (GHC.Classes.Eq a, GHC.Classes.Eq b, GHC.Classes.Eq c) => GHC.Classes.Eq (Agda.Utils.Three.Either3 a b c) instance GHC.Classes.Eq Agda.Utils.Three.Three instance (GHC.Classes.Ord a, GHC.Classes.Ord b, GHC.Classes.Ord c) => GHC.Classes.Ord (Agda.Utils.Three.Either3 a b c) instance GHC.Classes.Ord Agda.Utils.Three.Three instance (GHC.Internal.Show.Show a, GHC.Internal.Show.Show b, GHC.Internal.Show.Show c) => GHC.Internal.Show.Show (Agda.Utils.Three.Either3 a b c) instance GHC.Internal.Show.Show Agda.Utils.Three.Three module Agda.Utils.Tuple -- | Bifunctoriality for pairs. (-*-) :: (a -> c) -> (b -> d) -> (a, b) -> (c, d) infix 2 -*- -- |
-- mapFst f = f -*- id --mapFst :: (a -> c) -> (a, b) -> (c, b) -- |
-- mapSnd g = id -*- g --mapSnd :: (b -> d) -> (a, b) -> (a, d) -- | Lifted pairing. (/\) :: (a -> b) -> (a -> c) -> a -> (b, c) infix 3 /\ -- | Order a pair. sortPair :: Ord a => (a, a) -> (a, a) fst3 :: (a, b, c) -> a snd3 :: (a, b, c) -> b thd3 :: (a, b, c) -> c -- | Swap the components of a pair. swap :: (a, b) -> (b, a) uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d uncurry4 :: (a -> b -> c -> d -> e) -> (a, b, c, d) -> e -- | Monadic version of -*-. mapPairM :: Applicative m => (a -> m c) -> (b -> m d) -> (a, b) -> m (c, d) -- | Monadic mapFst. mapFstM :: Functor m => (a -> m c) -> (a, b) -> m (c, b) -- | Monadic mapSnd. mapSndM :: Functor m => (b -> m d) -> (a, b) -> m (a, d) data Pair a Pair :: a -> a -> Pair a instance GHC.Internal.Base.Applicative Agda.Utils.Tuple.Pair instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.Tuple.Pair a) instance GHC.Internal.Data.Foldable.Foldable Agda.Utils.Tuple.Pair instance GHC.Internal.Base.Functor Agda.Utils.Tuple.Pair instance GHC.Internal.Generics.Generic (Agda.Utils.Tuple.Pair a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Utils.Tuple.Pair a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.Tuple.Pair a) instance GHC.Internal.Data.Traversable.Traversable Agda.Utils.Tuple.Pair -- | Utility functions for lists. module Agda.Utils.List -- | A variant of !! that might provide more informative error -- messages if the index is out of bounds. -- -- Precondition: The index should not be out of bounds. (!!) :: HasCallStack => [a] -> Int -> a -- | Lookup function (safe). O(min n index). (!!!) :: [a] -> Int -> Maybe a -- | Analogous to zip, combines two lists by taking the union using These -- (strict). align :: [a] -> [b] -> [These a b] -- | Check whether all consecutive elements of a list satisfy the given -- relation. O(n). allConsecutive :: (a -> a -> Bool) -> [a] -> Bool -- | Remove the first representative for each list element. Thus, returns -- all duplicate copies. O(n log n). -- -- allDuplicates xs == sort $ xs \ nub xs. allDuplicates :: Ord a => [a] -> [a] -- | Checks if all the elements in the list are equal. Assumes that the -- Eq instance stands for an equivalence relation. O(n). allEqual :: Eq a => [a] -> Bool -- | A version of asum that avoids a final empty. It is -- right-folding just like asum. -- -- Precondition: the right-unit law holds, i.e. m | A.empty = -- m. asum :: Alternative m => [m a] -> m a -- | A right-folding asum for nonempty lists, never producing -- empty. asum1 :: Alternative m => m a -> [m a] -> m a -- | Breaks a list just after an element satisfying the predicate is -- found. -- --
-- >>> breakAfter even [1,3,5,2,4,7,8] -- ([1,3,5,2],[4,7,8]) --breakAfter :: (a -> Bool) -> [a] -> ([a], [a]) -- | Breaks a list just after an element satisfying the predicate is -- found. -- --
-- >>> breakAfter1 even 1 [3,5,2,4,7,8] -- (1 :| [3,5,2],[4,7,8]) --breakAfter1 :: (a -> Bool) -> a -> [a] -> (List1 a, [a]) -- | Case distinction for lists, with list first. O(1). -- -- Cf. ifNull. caseList :: [a] -> b -> (a -> [a] -> b) -> b -- | Case distinction for lists, with list first. O(1). -- -- Cf. ifNull. caseListM :: Monad m => m [a] -> m b -> (a -> [a] -> m b) -> m b -- | Chop up a list in chunks of a given length. O(n). chop :: Int -> [a] -> [[a]] -- | Chop a list at the positions when the predicate holds. Contrary to -- wordsBy, consecutive separator elements will result in an -- empty segment in the result. O(n). -- --
-- intercalate [x] (chopWhen (== x) xs) == xs --chopWhen :: (a -> Bool) -> [a] -> [[a]] -- | Compute the common prefix of two lists. O(min n m). commonPrefix :: Eq a => [a] -> [a] -> Prefix a -- | Compute the common suffix of two lists. O(n + m). commonSuffix :: Eq a => [a] -> [a] -> Suffix a -- | Check whether all elements in a list are distinct from each other. -- Assumes that the Eq instance stands for an equivalence -- relation. -- -- O(n²) in the worst case distinct xs == True. distinct :: Eq a => [a] -> Bool -- | downFrom n = [n-1,..1,0]. O(n). downFrom :: Integral a => a -> [a] -- | Drops from both lists simultaneously until one list is empty. O(min n -- m). dropCommon :: [a] -> [b] -> (Suffix a, Suffix b) -- | Drop from the end of a list. O(length). -- --
-- dropEnd n = reverse . drop n . reverse ---- -- Forces the whole list even for n==0. dropEnd :: Int -> [a] -> Prefix a -- | dropFrom marker xs drops everything from xs starting -- with (and including) marker. -- -- If the marker does not appear, the string is returned unchanged. -- -- The following two properties hold provided marker has no -- overlap with xs: -- --
-- dropFrom marker (xs ++ marker ++ ys) == xs -- dropFrom marker xs == xs --dropFrom :: Eq a => List1 a -> [a] -> [a] -- | Returns an (arbitrary) representative for each list element that -- occurs more than once. O(n log n). duplicates :: Ord a => [a] -> [a] -- | Implemented using dynamic programming and Data.Array. O(n*m). editDistance :: Eq a => [a] -> [a] -> Int -- | Implemented using tree recursion, don't run me at home! O(3^(min n -- m)). editDistanceSpec :: Eq a => [a] -> [a] -> Int -- | An optimised version of distinct. O(n log n). -- -- Precondition: The list's length must fit in an Int. fastDistinct :: Ord a => [a] -> Bool -- | Like filter, but additionally return the last partition of the -- list where the predicate is False everywhere. O(n). filterAndRest :: (a -> Bool) -> [a] -> ([a], Suffix a) -- | Find the longest suffix of the first string xs that is a -- prefix of the second string ys. So, basically, find the -- overlap where the strings can be glued together. Returns the index -- where the overlap starts and the length of the overlap. The length of -- the overlap plus the index is the length of the first string. Note -- that in the worst case, the empty overlap (length xs,0) is -- returned. -- -- Worst-case time complexity is quadratic: O(min(n,m)²) where -- n = length xs and m = length ys. -- -- There might be asymptotically better implementations following -- Knuth-Morris-Pratt (KMP), but for rather short lists this is good -- enough. findOverlap :: Eq a => [a] -> [a] -> (Int, Int) -- | Find an element satisfying a predicate and return it with its index. -- O(n) in the worst case, e.g. findWithIndex f xs = Nothing. -- -- TODO: more efficient implementation!? findWithIndex :: (a -> Bool) -> [a] -> Maybe (a, Int) -- | A generalised variant of elemIndex. O(n). genericElemIndex :: (Eq a, Integral i) => a -> [a] -> Maybe i -- | Check membership for the same list often. Use partially applied to -- create membership predicate hasElem xs :: a -> Bool. -- --
-- headWithDefault 42 [] = 42 -- headWithDefault 42 [1,2,3] = 1 --headWithDefault :: a -> [a] -> a -- | All ways of removing one element from a list. O(n²). holes :: [a] -> [(a, [a])] -- | Lookup function with default value for index out of range. O(min n -- index). -- -- The name is chosen akin to genericIndex. indexWithDefault :: a -> [a] -> Int -> a -- | init of non-empty list, safe. O(n). init1 a as = init -- (a:as) init1 :: a -> [a] -> [a] -- | init and last in one go, safe. O(n). initLast :: [a] -> Maybe ([a], a) -- | init and last of non-empty list, safe. O(n). -- initLast1 a as = (init (a:as), last (a:as) initLast1 :: a -> [a] -> ([a], a) -- | init, safe. O(n). initMaybe :: [a] -> Maybe [a] -- | init, safe. O(n). initWithDefault :: [a] -> [a] -> [a] -- | Last element of non-empty list (safe). O(n). last1 a as = last (a -- : as) last1 :: a -> [a] -> a -- | Last two elements (safe). O(n). last2 :: [a] -> Maybe (a, a) -- | last2' x y zs computes the last two elements of -- x:y:zs. O(n). last2' :: a -> a -> [a] -> (a, a) -- | Last element (safe). O(n). lastMaybe :: [a] -> Maybe a -- | Last element (safe). Returns a default list on empty lists. O(n). lastWithDefault :: a -> [a] -> a -- | Case distinction for lists, with list last. O(1). listCase :: b -> (a -> [a] -> b) -> [a] -> b -- | Like mapMaybe, but additionally return the last partition of -- the list where the function always returns Nothing. O(n). mapMaybeAndRest :: (a -> Maybe b) -> [a] -> ([b], Suffix a) -- | Maybe cons. O(1). mcons ma as = maybeToList ma ++ as mcons :: Maybe a -> [a] -> [a] mergeStrictlyOrderedBy :: (a -> a -> Bool) -> [a] -> [a] -> Maybe [a] -- | Partition a list into first and later occurrences of elements (modulo -- some quotient given by a representation function). -- -- Time: O(n log n). -- -- Specification: -- --
-- nubAndDuplicatesOn f xs = (ys, xs List.\\ ys) -- where ys = nubOn f xs --nubAndDuplicatesOn :: Ord b => (a -> b) -> [a] -> ([a], [a]) -- | A variant of nubOn that is parametrised by a function that is -- used to select which element from a group of equal elements that is -- returned. The returned elements keep the order that they had in the -- input list. -- -- Precondition: The length of the input list must be at most -- maxBound :: Int. nubFavouriteOn :: forall a b c. (Ord b, Eq c, Hashable c) => (a -> b) -> (a -> c) -> [a] -> [a] -- | Non-efficient, monadic nub. O(n²). nubM :: Monad m => (a -> a -> m Bool) -> [a] -> m [a] -- | Efficient variant of nubBy for lists, using a set to store -- already seen elements. O(n log n) -- -- Specification: -- --
-- nubOn f xs == 'nubBy' ((==) `'on'` f) xs. --nubOn :: Ord b => (a -> b) -> [a] -> [a] -- | Partition a list into Nothings and Justs. O(n). -- --
-- partitionMaybe f = partitionEithers . map ( a -> maybe (Left a) Right (f a)) ---- -- Note: mapMaybe f = snd . partitionMaybe f. partitionMaybe :: (a -> Maybe b) -> [a] -> ([a], [b]) -- | Append a single element at the end. Time: O(length); use only on small -- lists. snoc :: [a] -> a -> [a] -- | Check whether a list is sorted. O(n). -- -- Assumes that the Ord instance implements a partial order. sorted :: Ord a => [a] -> Bool -- | Split off the largest suffix whose elements satisfy a predicate. O(n). -- -- spanEnd p xs = (ys, zs) where xs = ys ++ zs and -- all p zs and maybe True (not . p) (lastMaybe yz). spanEnd :: (a -> Bool) -> [a] -> (Prefix a, Suffix a) -- | A generalized version of span. O(length . fst . spanJust -- f). spanJust :: (a -> Maybe b) -> [a] -> (Prefix b, Suffix a) -- | splitExactlyAt n xs = Just (ys, zs) iff xs = ys ++ -- zs and genericLength ys = n. splitExactlyAt :: Integral n => n -> [a] -> Maybe (Prefix a, Suffix a) -- | Check if a list has a given prefix. If so, return the list minus the -- prefix. O(length prefix). stripPrefixBy :: (a -> a -> Bool) -> Prefix a -> [a] -> Maybe (Suffix a) -- | stripReversedSuffix rsuf xs = Just pre iff xs = pre ++ -- reverse suf. O(n). stripReversedSuffix :: Eq a => ReversedSuffix a -> [a] -> Maybe (Prefix a) -- | stripSuffix suf xs = Just pre iff xs = pre ++ suf. -- O(n). stripSuffix :: Eq a => Suffix a -> [a] -> Maybe (Prefix a) -- | Returns a list with one boolean for each non-empty suffix of the list, -- starting with the longest suffix (the entire list). Each boolean is -- True exactly when every element in the corresponding suffix -- satisfies the predicate. -- -- An example: suffixesSatisfying isLower AbCde -- = [False, False, False, True, True] -- -- For total predicates p and finite and total lists xs -- the following holds: suffixesSatisfying p xs = map -- (all p) (init (tails xs)) suffixesSatisfying :: (a -> Bool) -> [a] -> [Bool] -- | Tail function (safe). O(1). tailMaybe :: [a] -> Maybe [a] -- | Tail function (safe). Returns a default list on empty lists. O(1). tailWithDefault :: [a] -> [a] -> [a] -- | A generalized version of takeWhile. (Cf. mapMaybe -- vs. filter). @O(length . takeWhileJust f). -- -- takeWhileJust f = fst . spanJust f. takeWhileJust :: (a -> Maybe b) -> [a] -> Prefix b -- | Efficient variant of nubBy for finite lists. O(n log n). -- --
-- uniqOn f == 'List.sortBy' (compare `'on'` f) . 'nubBy' ((==) `'on'` f) ---- -- If there are several elements with the same f-representative, -- the first of these is kept. uniqOn :: Ord b => (a -> b) -> [a] -> [a] unzipWith :: (a -> (b, c)) -> [a] -> ([b], [c]) -- | Update nth element of a list, if it exists. O(min index n). -- -- Precondition: the index is >= 0. updateAt :: Int -> (a -> a) -> [a] -> [a] -- | Update the first element of a list, if it exists. O(1). updateHead :: (a -> a) -> [a] -> [a] -- | Update the last element of a list, if it exists. O(n). updateLast :: (a -> a) -> [a] -> [a] -- | Requires both lists to have the same length. O(n). -- -- Otherwise, Nothing is returned. zipWith' :: (a -> b -> c) -> [a] -> [b] -> Maybe [c] -- | Like zipWith but keep the rest of the second list as-is (in -- case the second list is longer). O(n). -- --
-- zipWithKeepRest f as bs == zipWith f as bs ++ drop (length as) bs --zipWithKeepRest :: (a -> b -> b) -> [a] -> [b] -> [b] type Prefix a = [a] type ReversedSuffix a = [a] -- | Internal state for stripping suffix. data StrSufSt a -- | Error. SSSMismatch :: StrSufSt a -- | "Negative string" to remove from end. List may be empty. SSSStrip :: ReversedSuffix a -> StrSufSt a -- | "Positive string" (result). Non-empty list. SSSResult :: [a] -> StrSufSt a type Suffix a = [a] -- | <math>. Decompose a list into its head and tail. -- --
-- >>> uncons [] -- Nothing ---- --
-- >>> uncons [1] -- Just (1,[]) ---- --
-- >>> uncons [1, 2, 3] -- Just (1,[2,3]) --uncons :: [a] -> Maybe (a, [a]) -- | Logically consistent comparison of floating point numbers. module Agda.Utils.Float -- | Return Just x if it's a finite number, otherwise return Nothing. asFinite :: Double -> Maybe Double isPosInf :: Double -> Bool isNegInf :: Double -> Bool isPosZero :: Double -> Bool isNegZero :: Double -> Bool -- | Checks whether or not the Double is within a safe range of operation. isSafeInteger :: Double -> Bool doubleEq :: Double -> Double -> Bool doubleLe :: Double -> Double -> Bool doubleLt :: Double -> Double -> Bool intToDouble :: Integral a => a -> Double doublePlus :: Double -> Double -> Double doubleMinus :: Double -> Double -> Double doubleTimes :: Double -> Double -> Double doubleNegate :: Double -> Double doubleDiv :: Double -> Double -> Double doublePow :: Double -> Double -> Double doubleSqrt :: Double -> Double doubleExp :: Double -> Double doubleLog :: Double -> Double doubleSin :: Double -> Double doubleCos :: Double -> Double doubleTan :: Double -> Double doubleASin :: Double -> Double doubleACos :: Double -> Double doubleATan :: Double -> Double doubleATan2 :: Double -> Double -> Double doubleSinh :: Double -> Double doubleCosh :: Double -> Double doubleTanh :: Double -> Double doubleASinh :: Double -> Double doubleACosh :: Double -> Double doubleATanh :: Double -> Double doubleRound :: Double -> Maybe Integer doubleFloor :: Double -> Maybe Integer doubleCeiling :: Double -> Maybe Integer -- | Denotational equality for floating point numbers, checks bitwise -- equality. -- -- NOTE: Denotational equality distinguishes NaNs, so its results may -- vary depending on the architecture and compilation flags. -- Unfortunately, this is a problem with floating-point numbers in -- general. doubleDenotEq :: Double -> Double -> Bool -- | I guess "denotational orderings" are now a thing? The point is that we -- need an Ord instance which provides a total ordering, and is -- consistent with the denotational equality. -- -- NOTE: The ordering induced via doubleToWord64 is total, and is -- consistent with doubleDenotEq. However, it is *deeply* -- unintuitive. For one, it considers all negative numbers to be larger -- than positive numbers. doubleDenotOrd :: Double -> Double -> Ordering doubleToWord64 :: Double -> Maybe Word64 -- | Decode a Double to an integer ratio. doubleToRatio :: Double -> (Integer, Integer) -- | Encode an integer ratio as a double. ratioToDouble :: Integer -> Integer -> Double -- | Decode a Double to its mantissa and its exponent, normalised such that -- the mantissa is the smallest possible number without loss of accuracy. doubleDecode :: Double -> Maybe (Integer, Integer) -- | Encode a mantissa and an exponent as a Double. doubleEncode :: Integer -> Integer -> Maybe Double -- | Remove suffix .0 from printed floating point number. toStringWithoutDotZero :: Double -> String -- | Additional functions for association lists. module Agda.Utils.AssocList -- | Lookup keys in the same association list often. Use partially applied -- to create partial function apply m :: k -> Maybe v. -- --
-- >>> lookup 2 [] -- Nothing ---- --
-- >>> lookup 2 [(1, "first")] -- Nothing ---- --
-- >>> lookup 2 [(1, "first"), (2, "second"), (3, "third")] -- Just "second" --lookup :: Eq a => a -> [(a, b)] -> Maybe b module Agda.Utils.TypeLevel -- | All p as ensures that the constraint p is satisfied -- by all the types in as. (Types is between -- scare-quotes here because the code is actually kind polymorphic) type family All (p :: k -> Constraint) (as :: [k]) -- | On Booleans type family If (b :: Bool) (l :: k) (r :: k) :: k -- | On Lists type family Foldr (c :: k -> l -> l) (n :: l) (as :: [k]) :: l -- | Version of Foldr taking a defunctionalised argument so that -- we can use partially applied functions. type family Foldr' (c :: Function k Function l l -> Type -> Type) (n :: l) (as :: [k]) :: l type family Map (f :: Function k l -> Type) (as :: [k]) :: [l] data ConsMap0 (a :: Function k l -> Type) (b :: Function k Function [l] [l] -> Type) data ConsMap1 (a :: Function k l -> Type) (b :: k) (c :: Function [l] [l]) type family Constant b (as :: [k]) :: [Type] -- | Arrows [a1,..,an] r corresponds to a1 -> .. -> an -- -> r | Products [a1,..,an] corresponds to (a1, -- (..,( an, ())..)) type Arrows (as :: [Type]) r = Foldr (->) r as type Products (as :: [Type]) = Foldr (,) () as data StrictPair a b Pair :: a -> b -> StrictPair a b type StrictProducts (as :: [Type]) = Foldr StrictPair () as strictCurry :: (StrictPair a b -> c) -> a -> b -> c strictUncurry :: (a -> b -> c) -> StrictPair a b -> c -- | IsBase t is 'True whenever t is *not* a -- function space. type family IsBase t :: Bool -- | Using IsBase we can define notions of Domains and -- CoDomains which *reduce* under positive information -- IsBase t ~ 'True even though the shape of t is not -- formally exposed type family Domains t :: [Type] type family Domains' t :: [Type] type family CoDomain t type family CoDomain' t -- | Currying as b witnesses the isomorphism between Arrows as -- b and Products as -> b. It is defined as a type class -- rather than by recursion on a singleton for as so all of that -- these conversions are inlined at compile time for concrete arguments. class Currying (as :: [Type]) b uncurrys :: Currying as b => Proxy as -> Proxy b -> Arrows as b -> Products as -> b currys :: Currying as b => Proxy as -> Proxy b -> (Products as -> b) -> Arrows as b class StrictCurrying (as :: [Type]) b strictUncurrys :: StrictCurrying as b => Proxy as -> Proxy b -> Arrows as b -> StrictProducts as -> b strictCurrys :: StrictCurrying as b => Proxy as -> Proxy b -> (StrictProducts as -> b) -> Arrows as b data Function a b data Constant0 (c :: Function a Function b a -> Type) data Constant1 c (d :: Function b a) type family Apply (t :: Function k l -> Type) (u :: k) :: l instance Agda.Utils.TypeLevel.Currying as b => Agda.Utils.TypeLevel.Currying (a : as) b instance Agda.Utils.TypeLevel.Currying '[] b instance Agda.Utils.TypeLevel.StrictCurrying as b => Agda.Utils.TypeLevel.StrictCurrying (a : as) b instance Agda.Utils.TypeLevel.StrictCurrying '[] b -- | Type level literals, inspired by GHC.TypeLits. module Agda.Utils.TypeLits -- | Singleton for type level booleans. data SBool (b :: Bool) [STrue] :: SBool 'True [SFalse] :: SBool 'False eraseSBool :: forall (b :: Bool). SBool b -> Bool -- | A known boolean is one we can obtain a singleton for. Concrete values -- are trivially known. class KnownBool (b :: Bool) boolSing :: KnownBool b => SBool b boolVal :: forall proxy (b :: Bool). KnownBool b => proxy b -> Bool instance Agda.Utils.TypeLits.KnownBool 'GHC.Types.False instance Agda.Utils.TypeLits.KnownBool 'GHC.Types.True module Agda.Utils.Unsafe -- | Checks if two arguments are equal as pointers in memory. Please note, -- that this function is a hack, and it can worsen the behavior of -- compiler. See -- https://gitlab.haskell.org/ghc/ghc/-/blob/d151546e59a50158f25c3df6728b00d3c27bb4b9/compiler/GHC/Builtin/primops.txt.pp#L3455. unsafeComparePointers :: a -> a -> Bool -- | Overloaded null and empty for collections and -- sequences. module Agda.Utils.Null class Null a empty :: Null a => a -- | Satisfying null empty == True. null :: Null a => a -> Bool -- | The default implementation of null compares with empty, -- first trying pointer equality, then falling back to Eq -- equality. ($dmnull) :: (Null a, Eq a) => a -> Bool ifNull :: Null a => a -> b -> (a -> b) -> b ifNotNull :: Null a => a -> (a -> b) -> b -> b ifNullM :: (Monad m, Null a) => m a -> m b -> (a -> m b) -> m b ifNotNullM :: (Monad m, Null a) => m a -> (a -> m b) -> m b -> m b whenNull :: (Monad m, Null a) => a -> m () -> m () unlessNull :: (Monad m, Null a) => a -> (a -> m ()) -> m () whenNullM :: (Monad m, Null a) => m a -> m () -> m () unlessNullM :: (Monad m, Null a) => m a -> (a -> m ()) -> m () applyUnlessNull :: Null a => a -> (a -> b -> b) -> b -> b -- | Disjunction (interpreting null _ as False). catchNull :: Null a => a -> a -> a instance Agda.Utils.Null.Null (Agda.Utils.Bag.Bag a) instance Agda.Utils.Null.Null GHC.Types.Bool instance Agda.Utils.Null.Null Data.ByteString.Lazy.Internal.ByteString instance Agda.Utils.Null.Null Data.ByteString.Internal.Type.ByteString instance Agda.Utils.Null.Null (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance Agda.Utils.Null.Null (Data.EnumMap.Base.EnumMap k a) instance Agda.Utils.Null.Null (Data.EnumSet.EnumSet a) instance (Agda.Utils.Null.Null (m a), GHC.Internal.Base.Monad m) => Agda.Utils.Null.Null (Control.Monad.Trans.Except.ExceptT e m a) instance Agda.Utils.Null.Null (Data.HashMap.Internal.HashMap k a) instance Agda.Utils.Null.Null (Data.HashSet.Internal.HashSet a) instance Agda.Utils.Null.Null a => Agda.Utils.Null.Null (GHC.Types.IO a) instance Agda.Utils.Null.Null a => Agda.Utils.Null.Null (GHC.Internal.Data.Functor.Identity.Identity a) instance Agda.Utils.Null.Null (Data.IntMap.Internal.IntMap a) instance Agda.Utils.Null.Null Data.IntSet.Internal.IntSet instance Agda.Utils.Null.Null [a] instance Agda.Utils.Null.Null (Data.Map.Internal.Map k a) instance Agda.Utils.Null.Null (GHC.Internal.Maybe.Maybe a) instance (Agda.Utils.Null.Null (m a), GHC.Internal.Base.Monad m) => Agda.Utils.Null.Null (Control.Monad.Trans.Maybe.MaybeT m a) instance (Agda.Utils.Null.Null (m a), GHC.Internal.Base.Monad m) => Agda.Utils.Null.Null (Control.Monad.Trans.Reader.ReaderT r m a) instance Agda.Utils.Null.Null (Data.Sequence.Internal.Seq a) instance Agda.Utils.Null.Null (Data.Set.Internal.Set a) instance (Agda.Utils.Null.Null (m a), GHC.Internal.Base.Monad m) => Agda.Utils.Null.Null (Control.Monad.Trans.State.Lazy.StateT s m a) instance Agda.Utils.Null.Null Data.Text.Internal.Text instance (Agda.Utils.Null.Null a, Agda.Utils.Null.Null b) => Agda.Utils.Null.Null (a, b) instance (Agda.Utils.Null.Null a, Agda.Utils.Null.Null b, Agda.Utils.Null.Null c) => Agda.Utils.Null.Null (a, b, c) instance (Agda.Utils.Null.Null a, Agda.Utils.Null.Null b, Agda.Utils.Null.Null c, Agda.Utils.Null.Null d) => Agda.Utils.Null.Null (a, b, c, d) instance Agda.Utils.Null.Null () instance (Agda.Utils.Null.Null (m a), GHC.Internal.Base.Monad m, GHC.Internal.Base.Monoid w) => Agda.Utils.Null.Null (Control.Monad.Trans.Writer.Lazy.WriterT w m a) -- | Small sets represented as a bitmask for fast membership checking. -- -- With the exception of converting to/from lists, all operations are -- O(1). -- -- Mimics the interface of Set. -- -- Import as: import qualified Agda.Utils.SmallSet as SmallSet -- import Agda.Utils.SmallSet (SmallSet) module Agda.Utils.SmallSet newtype SmallSet a SmallSet :: Word64 -> SmallSet a [theSmallSet] :: SmallSet a -> Word64 -- | An element in a small set. -- -- This must implement Bounded and Ix, and contain at most -- 64 values. class (Bounded a, Ix a) => SmallSetElement a -- | The Ix class is used to map a contiguous subrange of values in -- a type onto integers. It is used primarily for array indexing (see the -- array package). -- -- The first argument (l,u) of each of these operations is a -- pair specifying the lower and upper bounds of a contiguous subrange of -- values. -- -- An implementation is entitled to assume the following laws about these -- operations: -- --
-- caseMaybe m err f = flip (maybe err) m f --caseMaybe :: Maybe a -> b -> (a -> b) -> b -- | Monadic version of caseMaybe. That is, maybeM with a -- different argument ordering. caseMaybeM :: Monad m => m (Maybe a) -> m b -> (a -> m b) -> m b -- | Filtering a singleton list. -- --
-- filterMaybe p a = listToMaybe (filter p [a]) --filterMaybe :: (a -> Bool) -> a -> Maybe a -- | Version of mapMaybe with different argument ordering. forMaybe :: [a] -> (a -> Maybe b) -> [b] -- | Monadic version of fromMaybe. fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a -- | caseMaybeM with flipped branches. ifJustM :: Monad m => m (Maybe a) -> (a -> m b) -> m b -> m b lensMaybeLazy :: forall a f. Functor f => (Maybe a -> f (Maybe a)) -> Maybe a -> f (Maybe a) -- | Monadic version of maybe. maybeM :: Monad m => m b -> (a -> m b) -> m (Maybe a) -> m b -- | unionWith for collections of size <= 1. unionMaybeWith :: (a -> a -> a) -> Maybe a -> Maybe a -> Maybe a -- | Unzipping a list of length <= 1. unzipMaybe :: Maybe (a, b) -> (Maybe a, Maybe b) -- | A more telling name for forM for the Maybe collection -- type. Or: caseMaybe without the Nothing case. whenJust :: Monad m => Maybe a -> (a -> m ()) -> m () -- | caseMaybeM without the Nothing case. whenJustM :: Monad m => m (Maybe a) -> (a -> m ()) -> m () instance GHC.Internal.Base.Applicative Data.Strict.Maybe.Maybe instance Agda.Utils.Null.Null (Data.Strict.Maybe.Maybe a) -- | Strict tries (based on Data.Map.Strict and -- Agda.Utils.Maybe.Strict). -- -- Note that if delete or adjust are used, one may end up -- with non-canonical subtries, i.e., those that do not contain any value -- (Data.List.null . toList) but may be Eq-different to -- other empty tries (/= empty). module Agda.Utils.Trie -- | Finite map from [k] to v. -- -- With the strict Maybe type, Trie is also strict in -- v. data Trie k v Trie :: !Maybe v -> !Map k (Trie k v) -> Trie k v empty :: Null a => a -- | Singleton trie. singleton :: [k] -> v -> Trie k v -- | everyPrefix k v is a trie where every prefix of k -- (including k itself) is mapped to v. everyPrefix :: [k] -> v -> Trie k v -- | Insert. Overwrites existing value if present. -- --
-- insert = insertWith ( new old -> new) --insert :: Ord k => [k] -> v -> Trie k v -> Trie k v -- | Insert with function merging new value with old value. insertWith :: Ord k => (v -> v -> v) -> [k] -> v -> Trie k v -> Trie k v -- | Left biased union. -- -- union = unionWith ( new old -> new). union :: Ord k => Trie k v -> Trie k v -> Trie k v -- | Pointwise union with merge function for values. unionWith :: Ord k => (v -> v -> v) -> Trie k v -> Trie k v -> Trie k v -- | Adjust value at key, leave subtree intact. -- -- Disclaimer: may return a non-canoncial trie because it does not clean -- up subtries that become empty. adjust :: Ord k => [k] -> (Maybe v -> Maybe v) -> Trie k v -> Trie k v -- | Delete value at key, but leave subtree intact. -- -- Disclaimer: may return a non-canoncial trie because it does not clean -- up subtries that become empty. delete :: Ord k => [k] -> Trie k v -> Trie k v -- | Convert to ascending list. toList :: Ord k => Trie k v -> [([k], v)] -- | Convert to ascending list. toAscList :: Ord k => Trie k v -> [([k], v)] -- | Convert to list where nodes at the same level are ordered according to -- the given ordering. toListOrderedBy :: Ord k => (v -> v -> Ordering) -> Trie k v -> [([k], v)] -- | Returns the value associated with the given key, if any. lookup :: Ord k => [k] -> Trie k v -> Maybe v -- | Is the given key present in the trie? member :: Ord k => [k] -> Trie k v -> Bool -- | Collect all values along a given path. lookupPath :: Ord k => [k] -> Trie k v -> [v] -- | Get the subtrie rooted at the given key. lookupTrie :: Ord k => [k] -> Trie k v -> Trie k v -- | Create new values based on the entire subtrie. Almost, but not quite -- comonad extend. mapSubTries :: Ord k => (Trie k u -> Maybe v) -> Trie k u -> Trie k v -- | Filter a trie. filter :: Ord k => (v -> Bool) -> Trie k v -> Trie k v -- | Key lens. valueAt :: Ord k => [k] -> Lens' (Trie k v) (Maybe v) instance (GHC.Classes.Eq v, GHC.Classes.Eq k) => GHC.Classes.Eq (Agda.Utils.Trie.Trie k v) instance GHC.Internal.Data.Foldable.Foldable (Agda.Utils.Trie.Trie k) instance GHC.Internal.Base.Functor (Agda.Utils.Trie.Trie k) instance (Control.DeepSeq.NFData k, Control.DeepSeq.NFData v) => Control.DeepSeq.NFData (Agda.Utils.Trie.Trie k v) instance Agda.Utils.Null.Null (Agda.Utils.Trie.Trie k v) instance (GHC.Internal.Show.Show v, GHC.Internal.Show.Show k) => GHC.Internal.Show.Show (Agda.Utils.Trie.Trie k v) -- | Non-empty lists. -- -- Better name List1 for non-empty lists, plus missing -- functionality. -- -- Import: @ -- -- {-# LANGUAGE PatternSynonyms #-} -- -- import Agda.Utils.List1 (List1, pattern (:|)) import qualified -- Agda.Utils.List1 as List1 -- -- @ module Agda.Utils.List1 -- | Checks if all the elements in the list are equal. Assumes that the -- Eq instance stands for an equivalence relation. O(n). allEqual :: Eq a => List1 a -> Bool -- | Breaks a list just after an element satisfying the predicate is -- found. -- --
-- >>> breakAfter even [1,3,5,2,4,7,8] -- (1 :| [3,5,2],[4,7,8]) --breakAfter :: (a -> Bool) -> List1 a -> (List1 a, [a]) -- | Like catMaybes. catMaybes :: List1 (Maybe a) -> [a] -- | Concatenate one or more non-empty lists. concat :: [List1 a] -> [a] concatMap1 :: (a -> List1 b) -> List1 a -> List1 b -- | Like find. find :: (a -> Bool) -> List1 a -> Maybe a -- | List foldr but with a base case for the singleton list. foldr :: (a -> b -> b) -> (a -> b) -> List1 a -> b -- | Safe version of fromList. fromListSafe :: List1 a -> [a] -> List1 a -- | More precise type for groupBy'. -- -- A variant of groupBy which applies the predicate to consecutive -- pairs. O(n). groupBy' :: (a -> a -> Bool) -> [a] -> [List1 a] -- | Group consecutive items that share the same first component. groupByFst :: Eq a => [(a, b)] -> [(a, List1 b)] -- | Group consecutive items that share the same first component. groupByFst1 :: Eq a => List1 (a, b) -> List1 (a, List1 b) -- | groupOn f = groupBy ((==) `on` f) . -- sortBy (compare `on` f). O(n log n). groupOn :: Ord b => (a -> b) -> [a] -> [List1 a] groupOn1 :: Ord b => (a -> b) -> List1 a -> List1 (List1 a) ifNotNull :: [a] -> (List1 a -> b) -> b -> b ifNull :: [a] -> b -> (List1 a -> b) -> b -- | Return the last element and the rest. initLast :: List1 a -> ([a], a) -- | Last two elements (safe). O(n). last2 :: List1 a -> Maybe (a, a) -- | Like lefts. lefts :: List1 (Either a b) -> [a] -- | Focus on the first element of a non-empty list. O(1). lensHead :: Functor f => (a -> f a) -> List1 a -> f (List1 a) -- | Focus on the last element of a non-empty list. O(n). lensLast :: Functor f => (a -> f a) -> List1 a -> f (List1 a) -- | Lift a function on non-empty lists to a function on lists. -- -- This is in essence fmap for Maybe, if we take [a] = -- Maybe (List1 a). liftList1 :: (List1 a -> List1 b) -> [a] -> [b] -- | Like mapMaybe. mapMaybe :: (a -> Maybe b) -> List1 a -> [b] -- | Non-efficient, monadic nub. O(n²). nubM :: Monad m => (a -> a -> m Bool) -> List1 a -> m (List1 a) -- | Like partitionEithers. partitionEithers :: List1 (Either a b) -> ([a], [b]) -- | Like rights. rights :: List1 (Either a b) -> [b] -- | Build a list with one element. -- -- More precise type for snoc. snoc :: [a] -> a -> List1 a -- | Lossless toList, opposite of nonEmpty. toList' :: Maybe (List1 a) -> [a] -- | Like union. Duplicates in the first list are not removed. -- O(nm). union :: Eq a => List1 a -> List1 a -> List1 a -- | The more general type Null m => [a] -> (List1 a -> m) -- -> m often causes type inference to fail, as we do not in -- general have instance Applicative m => Null (m ()). unlessNull :: Applicative m => [a] -> (List1 a -> m ()) -> m () unlessNullM :: Monad m => m [a] -> (List1 a -> m ()) -> m () -- | Like unwords. unwords :: List1 String -> String -- | Like unzipWith. unzipWith :: (a -> (b, c)) -> List1 a -> (List1 b, List1 c) -- | Update the first element of a non-empty list. O(1). updateHead :: (a -> a) -> List1 a -> List1 a -- | Update the last element of a non-empty list. O(n). updateLast :: (a -> a) -> List1 a -> List1 a -- | Split a list into sublists. Generalisation of the prelude function -- words. Same as wordsBy and wordsBy, but with -- the non-emptyness guarantee on the chunks. O(n). -- --
-- words xs == wordsBy isSpace xs --wordsBy :: (a -> Bool) -> [a] -> [List1 a] -- | Like zipWithM. zipWithM :: Applicative m => (a -> b -> m c) -> List1 a -> List1 b -> m (List1 c) -- | Like zipWithM. zipWithM_ :: Applicative m => (a -> b -> m c) -> List1 a -> List1 b -> m () type List1 = NonEmpty type String1 = List1 Char -- | xs !! n returns the element of the stream xs at -- index n. Note that the head of the stream has index 0. -- -- Beware: a negative or out-of-bounds index will cause an error. (!!) :: HasCallStack => NonEmpty a -> Int -> a infixl 9 !! -- | Prepend an element to the stream. (<|) :: a -> NonEmpty a -> NonEmpty a infixr 5 <| -- | A monomorphic version of <> for NonEmpty. -- --
-- >>> append (1 :| []) (2 :| [3]) -- 1 :| [2,3] --append :: NonEmpty a -> NonEmpty a -> NonEmpty a -- | Attach a list at the end of a NonEmpty. -- --
-- >>> appendList (1 :| [2,3]) [] -- 1 :| [2,3] ---- --
-- >>> appendList (1 :| [2,3]) [4,5] -- 1 :| [2,3,4,5] --appendList :: NonEmpty a -> [a] -> NonEmpty a -- | The break p function is equivalent to span -- (not . p). break :: (a -> Bool) -> NonEmpty a -> ([a], [a]) -- | Use compareLength xs n as a safer and faster -- alternative to compare (length xs) n. -- Similarly, it's better to write compareLength xs 10 == LT -- instead of length xs < 10. -- -- While length would force and traverse the entire spine of -- xs (which could even diverge if xs is infinite), -- compareLength traverses at most n elements to -- determine its result. -- --
-- >>> compareLength ('a' :| []) 1 -- EQ -- -- >>> compareLength ('a' :| ['b']) 3 -- LT -- -- >>> compareLength (0 :| [1..]) 100 -- GT -- -- >>> compareLength undefined 0 -- GT -- -- >>> compareLength ('a' :| 'b' : undefined) 1 -- GT --compareLength :: NonEmpty a -> Int -> Ordering -- | Synonym for <|. cons :: a -> NonEmpty a -> NonEmpty a -- | cycle xs returns the infinite repetition of -- xs: -- --
-- cycle (1 :| [2,3]) = 1 :| [2,3,1,2,3,...] --cycle :: NonEmpty a -> NonEmpty a -- | drop n xs drops the first n elements off the -- front of the sequence xs. drop :: Int -> NonEmpty a -> [a] -- | dropWhile p xs returns the suffix remaining after -- takeWhile p xs. dropWhile :: (a -> Bool) -> NonEmpty a -> [a] -- | filter p xs removes any elements from xs that -- do not satisfy p. filter :: (a -> Bool) -> NonEmpty a -> [a] -- | The group function takes a stream and returns a list of streams -- such that flattening the resulting list is equal to the argument. -- Moreover, each stream in the resulting list contains only equal -- elements, and consecutive equal elements of the input end up in the -- same stream of the output list. For example, in list notation: -- --
-- >>> group "Mississippi" -- ['M' :| "",'i' :| "",'s' :| "s",'i' :| "",'s' :| "s",'i' :| "",'p' :| "p",'i' :| ""] --group :: (Foldable f, Eq a) => f a -> [NonEmpty a] -- | group1 operates like group, but uses the knowledge that -- its input is non-empty to produce guaranteed non-empty output. group1 :: Eq a => NonEmpty a -> NonEmpty (NonEmpty a) -- | groupAllWith operates like groupWith, but sorts the list -- first so that each equivalence class has, at most, one list in the -- output groupAllWith :: Ord b => (a -> b) -> [a] -> [NonEmpty a] -- | groupAllWith1 is to groupWith1 as groupAllWith is -- to groupWith groupAllWith1 :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty (NonEmpty a) -- | groupBy operates like group, but uses the provided -- equality predicate instead of ==. groupBy :: Foldable f => (a -> a -> Bool) -> f a -> [NonEmpty a] -- | groupBy1 is to group1 as groupBy is to -- group. groupBy1 :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty (NonEmpty a) -- | groupWith operates like group, but uses the provided -- projection when comparing for equality groupWith :: (Foldable f, Eq b) => (a -> b) -> f a -> [NonEmpty a] -- | groupWith1 is to group1 as groupWith is to -- group groupWith1 :: Eq b => (a -> b) -> NonEmpty a -> NonEmpty (NonEmpty a) -- | Extract the first element of the stream. head :: NonEmpty a -> a -- | Extract everything except the last element of the stream. init :: NonEmpty a -> [a] -- | The inits function takes a stream xs and returns all -- the finite prefixes of xs, starting with the shortest. The -- result is NonEmpty because the result always contains the empty -- list as the first element. -- --
-- inits [1,2,3] == [] :| [[1], [1,2], [1,2,3]] -- inits [1] == [] :| [[1]] -- inits [] == [] :| [] --inits :: Foldable f => f a -> NonEmpty [a] -- | The inits1 function takes a NonEmpty stream xs -- and returns all the NonEmpty finite prefixes of xs, -- starting with the shortest. -- --
-- inits1 (1 :| [2,3]) == (1 :| []) :| [1 :| [2], 1 :| [2,3]] -- inits1 (1 :| []) == (1 :| []) :| [] --inits1 :: NonEmpty a -> NonEmpty (NonEmpty a) -- | insert x xs inserts x into the last position -- in xs where it is still less than or equal to the next -- element. In particular, if the list is sorted beforehand, the result -- will also be sorted. insert :: (Foldable f, Ord a) => a -> f a -> NonEmpty a -- | 'intersperse x xs' alternates elements of the list with copies of -- x. -- --
-- intersperse 0 (1 :| [2,3]) == 1 :| [0,2,0,3] --intersperse :: a -> NonEmpty a -> NonEmpty a -- | The isPrefixOf function returns True if the first -- argument is a prefix of the second. isPrefixOf :: Eq a => [a] -> NonEmpty a -> Bool -- | iterate f x produces the infinite sequence of repeated -- applications of f to x. -- --
-- iterate f x = x :| [f x, f (f x), ..] --iterate :: (a -> a) -> a -> NonEmpty a -- | Extract the last element of the stream. last :: NonEmpty a -> a -- | Number of elements in NonEmpty list. length :: NonEmpty a -> Int -- | Map a function over a NonEmpty stream. map :: (a -> b) -> NonEmpty a -> NonEmpty b -- | nonEmpty efficiently turns a normal list into a NonEmpty -- stream, producing Nothing if the input is empty. nonEmpty :: [a] -> Maybe (NonEmpty a) -- | The nub function removes duplicate elements from a list. In -- particular, it keeps only the first occurrence of each element. (The -- name nub means 'essence'.) It is a special case of -- nubBy, which allows the programmer to supply their own -- inequality test. nub :: Eq a => NonEmpty a -> NonEmpty a -- | The nubBy function behaves just like nub, except it uses -- a user-supplied equality predicate instead of the overloaded == -- function. nubBy :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty a -- | The partition function takes a predicate p and a -- stream xs, and returns a pair of lists. The first list -- corresponds to the elements of xs for which p holds; -- the second corresponds to the elements of xs for which -- p does not hold. -- --
-- 'partition' p xs = ('filter' p xs, 'filter' (not . p) xs) --partition :: (a -> Bool) -> NonEmpty a -> ([a], [a]) -- | The permutations function returns the list of all permutations -- of the argument. permutations :: [a] -> NonEmpty [a] -- | permutations1 operates like permutations, but uses the -- knowledge that its input is non-empty to produce output where every -- element is non-empty. -- --
-- permutations1 = fmap fromList . permutations . toList --permutations1 :: NonEmpty a -> NonEmpty (NonEmpty a) -- | Attach a list at the beginning of a NonEmpty. -- --
-- >>> prependList [] (1 :| [2,3]) -- 1 :| [2,3] ---- --
-- >>> prependList [negate 1, 0] (1 :| [2, 3]) -- -1 :| [0,1,2,3] --prependList :: [a] -> NonEmpty a -> NonEmpty a -- | repeat x returns a constant stream, where all elements -- are equal to x. repeat :: a -> NonEmpty a -- | reverse a finite NonEmpty stream. reverse :: NonEmpty a -> NonEmpty a -- | scanl is similar to foldl, but returns a stream of -- successive reduced values from the left: -- --
-- scanl f z [x1, x2, ...] == z :| [z `f` x1, (z `f` x1) `f` x2, ...] ---- -- Note that -- --
-- last (scanl f z xs) == foldl f z xs. --scanl :: Foldable f => (b -> a -> b) -> b -> f a -> NonEmpty b -- | scanl1 is a variant of scanl that has no starting value -- argument: -- --
-- scanl1 f [x1, x2, ...] == x1 :| [x1 `f` x2, x1 `f` (x2 `f` x3), ...] --scanl1 :: (a -> a -> a) -> NonEmpty a -> NonEmpty a -- | scanr is the right-to-left dual of scanl. Note that -- --
-- head (scanr f z xs) == foldr f z xs. --scanr :: Foldable f => (a -> b -> b) -> b -> f a -> NonEmpty b -- | scanr1 is a variant of scanr that has no starting value -- argument. scanr1 :: (a -> a -> a) -> NonEmpty a -> NonEmpty a -- | Construct a NonEmpty list from a single element. singleton :: a -> NonEmpty a -- | some1 x sequences x one or more times. some1 :: Alternative f => f a -> f (NonEmpty a) -- | Sort a stream. sort :: Ord a => NonEmpty a -> NonEmpty a -- | sortBy for NonEmpty, behaves the same as sortBy sortBy :: (a -> a -> Ordering) -> NonEmpty a -> NonEmpty a -- | Sort a NonEmpty on a user-supplied projection of its elements. -- See sortOn for more detailed information. -- --
-- >>> sortOn fst $ (2, "world") :| [(4, "!"), (1, "Hello")] -- (1,"Hello") :| [(2,"world"),(4,"!")] ---- --
-- >>> sortOn List.length ("jim" :| ["creed", "pam", "michael", "dwight", "kevin"]) -- "jim" :| ["pam","creed","kevin","dwight","michael"] ---- --
-- >>> sortBy (comparing fst) $ (3, 1) :| [(2, 2), (1, 3)] -- (1,3) :| [(2,2),(3,1)] ---- -- Or, for the exact same API as sortOn, you can use `sortBy . -- comparing`: -- --
-- >>> (sortBy . comparing) fst $ (3, 1) :| [(2, 2), (1, 3)] -- (1,3) :| [(2,2),(3,1)] ---- -- sortWith is an alias for `sortBy . comparing`. sortOn :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty a -- | sortWith for NonEmpty, behaves the same as: -- --
-- sortBy . comparing --sortWith :: Ord o => (a -> o) -> NonEmpty a -> NonEmpty a -- | span p xs returns the longest prefix of xs -- that satisfies p, together with the remainder of the stream. -- --
-- 'span' p xs == ('takeWhile' p xs, 'dropWhile' p xs) -- xs == ys ++ zs where (ys, zs) = 'span' p xs --span :: (a -> Bool) -> NonEmpty a -> ([a], [a]) -- | splitAt n xs returns a pair consisting of the prefix -- of xs of length n and the remaining stream -- immediately following this prefix. -- --
-- 'splitAt' n xs == ('take' n xs, 'drop' n xs) -- xs == ys ++ zs where (ys, zs) = 'splitAt' n xs --splitAt :: Int -> NonEmpty a -> ([a], [a]) -- | Extract the possibly-empty tail of the stream. tail :: NonEmpty a -> [a] -- | The tails function takes a stream xs and returns all -- the suffixes of xs, starting with the longest. The result is -- NonEmpty because the result always contains the empty list as -- the last element. -- --
-- tails [1,2,3] == [1,2,3] :| [[2,3], [3], []] -- tails [1] == [1] :| [[]] -- tails [] == [] :| [] --tails :: Foldable f => f a -> NonEmpty [a] -- | The tails1 function takes a NonEmpty stream xs -- and returns all the non-empty suffixes of xs, starting with -- the longest. -- --
-- tails1 (1 :| [2,3]) == (1 :| [2,3]) :| [2 :| [3], 3 :| []] -- tails1 (1 :| []) == (1 :| []) :| [] --tails1 :: NonEmpty a -> NonEmpty (NonEmpty a) -- | take n xs returns the first n elements of -- xs. take :: Int -> NonEmpty a -> [a] -- | takeWhile p xs returns the longest prefix of the -- stream xs for which the predicate p holds. takeWhile :: (a -> Bool) -> NonEmpty a -> [a] -- | transpose for NonEmpty, behaves the same as -- transpose The rows/columns need not be the same length, in -- which case > transpose . transpose /= id transpose :: NonEmpty (NonEmpty a) -> NonEmpty (NonEmpty a) -- | uncons produces the first element of the stream, and a stream -- of the remaining elements, if any. uncons :: NonEmpty a -> (a, Maybe (NonEmpty a)) -- | unfold produces a new stream by repeatedly applying the -- unfolding function to the seed value to produce an element of type -- b and a new seed value. When the unfolding function returns -- Nothing instead of a new seed value, the stream ends. -- | Deprecated: Use unfoldr unfold :: (a -> (b, Maybe a)) -> a -> NonEmpty b -- | The unfoldr function is analogous to Data.List's -- unfoldr operation. unfoldr :: (a -> (b, Maybe a)) -> a -> NonEmpty b -- | Compute n-ary logic exclusive OR operation on NonEmpty list. xor :: NonEmpty Bool -> Bool -- | The zip function takes two streams and returns a stream of -- corresponding pairs. zip :: NonEmpty a -> NonEmpty b -> NonEmpty (a, b) -- | The zipWith function generalizes zip. Rather than -- tupling the elements, the elements are combined using the function -- passed as the first argument. zipWith :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c -- | Non-empty (and non-strict) list type. data NonEmpty a (:|) :: a -> [a] -> NonEmpty a infixr 5 :| -- | The IsList class and its methods are intended to be used in -- conjunction with the OverloadedLists extension. class IsList l where { -- | The Item type function returns the type of items of the -- structure l. type Item l; } -- | The fromList function constructs the structure l from -- the given list of Item l fromList :: IsList l => [Item l] -> l -- | The fromListN function takes the input list's length and -- potentially uses it to construct the structure l more -- efficiently compared to fromList. If the given number does not -- equal to the input list's length the behaviour of fromListN is -- not specified. -- --
-- fromListN (length xs) xs == fromList xs --fromListN :: IsList l => Int -> [Item l] -> l -- | The toList function extracts a list of Item l from the -- structure l. It should satisfy fromList . toList = id. toList :: IsList l => l -> [Item l] -- | The Item type function returns the type of items of the -- structure l. type family Item l -- | Generalization of Data.List.unzip. -- --
-- >>> unzip (Just ("Hello", "World")) -- (Just "Hello",Just "World") ---- --
-- >>> unzip [("I", "love"), ("really", "haskell")] -- (["I","really"],["love","haskell"]) --unzip :: Functor f => f (a, b) -> (f a, f b) -- | Collection size. -- -- For TermSize see Agda.Syntax.Internal. module Agda.Utils.Size -- | The size of a collection (i.e., its length). class Sized a -- | Strict size computation. -- -- Anti-patterns: size xs == n where n is 0, -- 1 or another number that is likely smaller than size -- xs. Similar for size xs >= 1 etc. Use natSize -- instead. -- -- See -- https://wiki.haskell.org/Haskell_programming_tips#Don.27t_ask_for_the_length_of_a_list_when_you_don.27t_need_it -- . size :: Sized a => a -> Int ($dmsize) :: forall (t :: Type -> Type) b. (Sized a, Foldable t, t b ~ a) => a -> Int -- | Lazily compute a (possibly infinite) size. -- -- Use when comparing a size against a fixed number. natSize :: Sized a => a -> Peano ($dmnatSize) :: forall (t :: Type -> Type) b. (Sized a, Foldable t, t b ~ a) => a -> Peano -- | Thing decorated with its size. The thing should fit into main memory, -- thus, the size is an Int. data SizedThing a SizedThing :: !Int -> a -> SizedThing a [theSize] :: SizedThing a -> !Int [sizedThing] :: SizedThing a -> a -- | Cache the size of an object. sizeThing :: Sized a => a -> SizedThing a data Peano Zero :: Peano Succ :: Peano -> Peano instance Agda.Utils.Null.Null a => Agda.Utils.Null.Null (Agda.Utils.Size.SizedThing a) instance Agda.Utils.Size.Sized (Data.HashMap.Internal.HashMap k a) instance Agda.Utils.Size.Sized (Data.HashSet.Internal.HashSet a) instance Agda.Utils.Size.Sized (Data.IntMap.Internal.IntMap a) instance Agda.Utils.Size.Sized Data.IntSet.Internal.IntSet instance Agda.Utils.Size.Sized [a] instance Agda.Utils.Size.Sized (Data.Map.Internal.Map k a) instance Agda.Utils.Size.Sized (Agda.Utils.List1.List1 a) instance Agda.Utils.Size.Sized (Data.Sequence.Internal.Seq a) instance Agda.Utils.Size.Sized (Data.Set.Internal.Set a) instance Agda.Utils.Size.Sized (Agda.Utils.Size.SizedThing a) module Agda.Utils.String -- | quote adds double quotes around the string, replaces newline -- characters with n, and escapes double quotes and backslashes -- within the string. This is different from the behaviour of -- show: -- --
-- > putStrLn $ show "\x2200" -- "\8704" -- > putStrLn $ quote "\x2200" -- "∀" ---- -- (The code examples above have been tested using version 4.2.0.0 of the -- base library.) quote :: String -> String -- | Turns the string into a Haskell string literal, avoiding escape codes. haskellStringLiteral :: String -> String -- | Adds hyphens around the given string -- --
-- >>> putStrLn $ delimiter "Title" -- ———— Title ————————————————————————————————————————————————— --delimiter :: String -> String -- | Adds a final newline if there is not already one. addFinalNewLine :: String -> String -- | Indents every line the given number of steps. indent :: Integral i => i -> String -> String -- | unwords, but remove empty words first. unwords1 :: [String] -> String -- | Append an "s" to the second argument if the first has -- cardinality /= 1. pluralS :: Sized a => a -> String -> String -- | Show a number using comma to separate powers of 1,000. showThousandSep :: Show a => a -> String -- | Remove leading whitespace. ltrim :: String -> String -- | Remove trailing whitespace. rtrim :: String -> String -- | Remove leading and trailing whitesapce. trim :: String -> String instance (GHC.Internal.Data.String.IsString (m a), GHC.Internal.Base.Monad m) => GHC.Internal.Data.String.IsString (Control.Monad.Trans.Except.ExceptT e m a) instance (GHC.Internal.Data.String.IsString (m a), GHC.Internal.Base.Monad m) => GHC.Internal.Data.String.IsString (Control.Monad.Trans.Maybe.MaybeT m a) instance GHC.Internal.Data.String.IsString Agda.Utils.List1.String1 instance (GHC.Internal.Data.String.IsString (m a), GHC.Internal.Base.Monad m) => GHC.Internal.Data.String.IsString (Control.Monad.Trans.Reader.ReaderT r m a) instance (GHC.Internal.Data.String.IsString (m a), GHC.Internal.Base.Monad m) => GHC.Internal.Data.String.IsString (Control.Monad.Trans.State.Lazy.StateT s m a) instance (GHC.Internal.Data.String.IsString (m a), GHC.Internal.Base.Monad m, GHC.Internal.Base.Monoid w) => GHC.Internal.Data.String.IsString (Control.Monad.Trans.Writer.Lazy.WriterT w m a) -- | Auxiliary functions for the IO monad. module Agda.Utils.IO -- | Catch Exceptions in an extension of the IO monad. class CatchIO (m :: Type -> Type) catchIO :: (CatchIO m, Exception e) => m a -> (e -> m a) -> m a -- | Print an IOException without the call stack. showIOException :: Exception e => e -> String instance Agda.Utils.IO.CatchIO m => Agda.Utils.IO.CatchIO (Control.Monad.Trans.Except.ExceptT e m) instance Agda.Utils.IO.CatchIO GHC.Types.IO instance Agda.Utils.IO.CatchIO m => Agda.Utils.IO.CatchIO (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.Utils.IO.CatchIO m => Agda.Utils.IO.CatchIO (Control.Monad.Trans.Writer.Lazy.WriterT w m) module Agda.Utils.Permutation -- | Partial permutations. Examples: -- -- permute [1,2,0] [x0,x1,x2] = [x1,x2,x0] (proper permutation). -- -- permute [1,0] [x0,x1,x2] = [x1,x0] (partial permuation). -- -- permute [1,0,1,2] [x0,x1,x2] = [x1,x0,x1,x2] (not a -- permutation because not invertible). -- -- Agda typing would be: Perm : {m : Nat}(n : Nat) -> Vec (Fin n) -- m -> Permutation m is the size of the -- permutation. data Permutation Perm :: Int -> [Int] -> Permutation [permRange] :: Permutation -> Int [permPicks] :: Permutation -> [Int] -- | permute [1,2,0] [x0,x1,x2] = [x1,x2,x0] More precisely, -- permute indices list = sublist, generates sublist -- from list by picking the elements of list as indicated by -- indices. permute [1,3,0] [x0,x1,x2,x3] = [x1,x3,x0] -- -- Agda typing: permute (Perm {m} n is) : Vec A m -> Vec A n -- -- Precondition for permute (Perm _ is) xs: Every -- index in is must be non-negative and, if xs is -- finite, then every index must also be smaller than the length of -- xs. -- -- The implementation is supposed to be extensionally equal to the -- following one (if different exceptions are identified), but in some -- cases more efficient: permute (Perm _ is) xs = map -- (xs !!) is permute :: Permutation -> [a] -> [a] -- | Invert a Permutation on a partial finite int map. inversePermute -- perm f = f' such that permute perm f' = f -- -- Example, with map represented as [Maybe a]: f = -- [Nothing, Just a, Just b ] perm = Perm 4 [3,0,2] f' = [ Just a , -- Nothing , Just b , Nothing ] Zipping perm with -- f gives [(0,a),(2,b)], after compression with -- catMaybes. This is an IntMap which can easily -- written out into a substitution again. class InversePermute a b inversePermute :: InversePermute a b => Permutation -> a -> b -- | Identity permutation. idP :: Int -> Permutation -- | Restrict a permutation to work on n elements, discarding -- picks >=n. takeP :: Int -> Permutation -> Permutation -- | Pick the elements that are not picked by the permutation. droppedP :: Permutation -> Permutation -- | liftP k takes a Perm {m} n to a Perm {m+k} -- (n+k). Analogous to liftS, but Permutations operate on de -- Bruijn LEVELS, not indices. liftP :: Int -> Permutation -> Permutation -- |
-- permute (compose p1 p2) == permute p1 . permute p2 --composeP :: Permutation -> Permutation -> Permutation -- | invertP err p is the inverse of p where defined, -- otherwise defaults to err. composeP p (invertP err p) == -- p invertP :: Int -> Permutation -> Permutation -- | Turn a possible non-surjective permutation into a surjective -- permutation. compactP :: Permutation -> Permutation -- |
-- permute (reverseP p) xs == -- reverse $ permute p $ reverse xs ---- -- Example: permute (reverseP (Perm 4 [1,3,0])) [x0,x1,x2,x3] == -- permute (Perm 4 $ map (3-) [0,3,1]) [x0,x1,x2,x3] == permute (Perm 4 -- [3,0,2]) [x0,x1,x2,x3] == [x3,x0,x2] == reverse [x2,x0,x3] == reverse -- $ permute (Perm 4 [1,3,0]) [x3,x2,x1,x0] == reverse $ permute (Perm 4 -- [1,3,0]) $ reverse [x0,x1,x2,x3] -- -- With reverseP, you can convert a permutation on de Bruijn -- indices to one on de Bruijn levels, and vice versa. reverseP :: Permutation -> Permutation -- | permPicks (flipP p) = permute p (downFrom (permRange p)) or -- permute (flipP (Perm n xs)) [0..n-1] = permute (Perm n xs) -- (downFrom n) -- -- Can be use to turn a permutation from (de Bruijn) levels to levels to -- one from levels to indices. -- -- See numberPatVars. flipP :: Permutation -> Permutation -- | expandP i n π in the domain of π replace the -- ith element by n elements. expandP :: Int -> Int -> Permutation -> Permutation -- | Stable topologic sort. The first argument decides whether its first -- argument is an immediate parent to its second argument. topoSort :: (a -> a -> Bool) -> [a] -> Maybe Permutation topoSortM :: Monad m => (a -> a -> m Bool) -> [a] -> m (Maybe Permutation) -- | Delayed dropping which allows undropping. data Drop a Drop :: Int -> a -> Drop a -- | Non-negative number of things to drop. [dropN] :: Drop a -> Int -- | Where to drop from. [dropFrom] :: Drop a -> a -- | Things that support delayed dropping. class DoDrop a doDrop :: DoDrop a => Drop a -> a dropMore :: DoDrop a => Int -> Drop a -> Drop a unDrop :: DoDrop a => Int -> Drop a -> Drop a instance Agda.Utils.Permutation.DoDrop [a] instance Agda.Utils.Permutation.DoDrop Agda.Utils.Permutation.Permutation instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.Permutation.Drop a) instance GHC.Classes.Eq Agda.Utils.Permutation.Permutation instance GHC.Internal.Data.Foldable.Foldable Agda.Utils.Permutation.Drop instance GHC.Internal.Base.Functor Agda.Utils.Permutation.Drop instance GHC.Internal.Generics.Generic Agda.Utils.Permutation.Permutation instance Agda.Utils.Permutation.InversePermute (GHC.Types.Int -> a) [GHC.Internal.Maybe.Maybe a] instance Agda.Utils.Permutation.InversePermute [GHC.Internal.Maybe.Maybe a] (Data.IntMap.Internal.IntMap a) instance Agda.Utils.Permutation.InversePermute [GHC.Internal.Maybe.Maybe a] [(GHC.Types.Int, a)] instance Agda.Utils.Permutation.InversePermute [GHC.Internal.Maybe.Maybe a] [GHC.Internal.Maybe.Maybe a] instance Control.DeepSeq.NFData Agda.Utils.Permutation.Permutation instance Agda.Utils.Null.Null Agda.Utils.Permutation.Permutation instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Utils.Permutation.Drop a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.Permutation.Drop a) instance GHC.Internal.Show.Show Agda.Utils.Permutation.Permutation instance Agda.Utils.Size.Sized Agda.Utils.Permutation.Permutation instance GHC.Internal.Data.Traversable.Traversable Agda.Utils.Permutation.Drop module Agda.Utils.ProfileOptions -- | Various things that can be measured when checking an Agda development. -- Turned on with the `--profile` flag, for instance `--profile=sharing` -- to turn on the Sharing option. Internal, Modules, -- and Definitions are mutually exclusive. -- -- NOTE: Changing this data type requires bumping the interface version -- number in currentInterfaceVersion. data ProfileOption -- | Measure time taken by various parts of the system (type checking, -- serialization, etc) Internal :: ProfileOption -- | Measure time spent on individual (Agda) modules Modules :: ProfileOption -- | Measure time spent on individual (Agda) definitions Definitions :: ProfileOption -- | Measure things related to sharing Sharing :: ProfileOption -- | Collect detailed statistics about serialization Serialize :: ProfileOption -- | Collect statistics about constraint solving Constraints :: ProfileOption -- | Count number of created metavariables Metas :: ProfileOption -- | Measure time of interactive commands Interactive :: ProfileOption -- | Collect statistics about conversion checking Conversion :: ProfileOption -- | Collect statistics about instance search Instances :: ProfileOption -- | A set of ProfileOptions data ProfileOptions -- | The empty set of profiling options. noProfileOptions :: ProfileOptions -- | Parse and add a profiling option to a set of profiling options. -- Returns Left with a helpful error message if the option doesn't -- parse or if it's incompatible with existing options. The special -- string "all" adds all options compatible with the given set and -- prefering the first of incompatible options. So `--profile=all` sets -- Internal over Modules and Definitions, but -- `--profile=modules --profile=all` sets Modules and not -- Internal. addProfileOption :: String -> ProfileOptions -> Either String ProfileOptions -- | Check if a given profiling option is present in a set of profiling -- options. containsProfileOption :: ProfileOption -> ProfileOptions -> Bool -- | Use only for serialization. profileOptionsToList :: ProfileOptions -> [ProfileOption] -- | Use only for serialization. profileOptionsFromList :: [ProfileOption] -> ProfileOptions -- | Strings accepted by addProfileOption validProfileOptionStrings :: [String] instance GHC.Internal.Enum.Bounded Agda.Utils.ProfileOptions.ProfileOption instance GHC.Internal.Enum.Enum Agda.Utils.ProfileOptions.ProfileOption instance GHC.Classes.Eq Agda.Utils.ProfileOptions.ProfileOption instance GHC.Classes.Eq Agda.Utils.ProfileOptions.ProfileOptions instance GHC.Internal.Generics.Generic Agda.Utils.ProfileOptions.ProfileOption instance Control.DeepSeq.NFData Agda.Utils.ProfileOptions.ProfileOption instance Control.DeepSeq.NFData Agda.Utils.ProfileOptions.ProfileOptions instance Agda.Utils.Null.Null Agda.Utils.ProfileOptions.ProfileOptions instance GHC.Classes.Ord Agda.Utils.ProfileOptions.ProfileOption instance GHC.Internal.Show.Show Agda.Utils.ProfileOptions.ProfileOption instance GHC.Internal.Show.Show Agda.Utils.ProfileOptions.ProfileOptions -- | Lists of length at least 2. -- -- Import as: import Agda.Utils.List2 (List2(List2)) import -- qualified Agda.Utils.List2 as List2 module Agda.Utils.List2 -- | O(length first list). append :: List1 a -> List1 a -> List2 a -- | O(length first list). appendList :: List2 a -> [a] -> List2 a break :: (a -> Bool) -> List2 a -> ([a], [a]) -- | Concatenate at least 2 lists of length at least 1. concat21 :: List2 (List1 a) -> List2 a -- | O(1). cons :: a -> List1 a -> List2 a -- | Unsafe! O(1). fromList1 :: List1 a -> List2 a -- | Any List1 is either a singleton or a List2. O(1). fromList1Either :: List1 a -> Either a (List2 a) -- | Safe. O(1). fromList1Maybe :: List1 a -> Maybe (List2 a) -- | Safe. O(1). fromListMaybe :: [a] -> Maybe (List2 a) -- | Safe. O(1). head :: List2 a -> a -- | Safe. O(n). init :: List2 a -> List1 a -- | O(n). snoc :: List1 a -> a -> List2 a -- | Safe. O(1). tail :: List2 a -> List1 a -- | Safe. O(1). toList1 :: List2 a -> List1 a -- | Inverse of fromList1Either. O(1). toList1Either :: Either a (List2 a) -> List1 a -- | Lists of length ≥2. data List2 a List2 :: a -> a -> [a] -> List2 a -- | The toList function extracts a list of Item l from the -- structure l. It should satisfy fromList . toList = id. toList :: IsList l => l -> [Item l] instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.List2.List2 a) instance GHC.Internal.Data.Foldable.Foldable Agda.Utils.List2.List2 instance GHC.Internal.Base.Functor Agda.Utils.List2.List2 instance GHC.Internal.IsList.IsList (Agda.Utils.List2.List2 a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Utils.List2.List2 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Utils.List2.List2 a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.List2.List2 a) instance GHC.Internal.Data.Traversable.Traversable Agda.Utils.List2.List2 -- | Utilities for the Either type. module Agda.Utils.Either -- | Loop while we have an exception. whileLeft :: Monad m => (a -> Either b c) -> (a -> b -> m a) -> (a -> c -> m d) -> a -> m d -- | Monadic version of either with a different argument ordering. caseEitherM :: Monad m => m (Either a b) -> (a -> m c) -> (b -> m c) -> m c -- | 'Either _ b' is a functor. mapLeft :: (a -> c) -> Either a b -> Either c b -- | 'Either a' is a functor. mapRight :: (b -> d) -> Either a b -> Either a d -- | Either is bitraversable. Note: From base >= -- 4.10.0.0 already present in Bitraversable. traverseEither :: Functor f => (a -> f c) -> (b -> f d) -> Either a b -> f (Either c d) -- | Return True if the given value is a Left-value, -- False otherwise. -- --
-- >>> isLeft (Left "foo") -- True -- -- >>> isLeft (Right 3) -- False ---- -- Assuming a Left value signifies some sort of error, we can use -- isLeft to write a very simple error-reporting function that -- does absolutely nothing in the case of success, and outputs "ERROR" if -- any error occurred. -- -- This example shows how isLeft might be used to avoid pattern -- matching when one does not care about the value contained in the -- constructor: -- --
-- >>> import Control.Monad ( when ) -- -- >>> let report e = when (isLeft e) $ putStrLn "ERROR" -- -- >>> report (Right 1) -- -- >>> report (Left "parse error") -- ERROR --isLeft :: Either a b -> Bool -- | Return True if the given value is a Right-value, -- False otherwise. -- --
-- >>> isRight (Left "foo") -- False -- -- >>> isRight (Right 3) -- True ---- -- Assuming a Left value signifies some sort of error, we can use -- isRight to write a very simple reporting function that only -- outputs "SUCCESS" when a computation has succeeded. -- -- This example shows how isRight might be used to avoid pattern -- matching when one does not care about the value contained in the -- constructor: -- --
-- >>> import Control.Monad ( when ) -- -- >>> let report e = when (isRight e) $ putStrLn "SUCCESS" -- -- >>> report (Left "parse error") -- -- >>> report (Right 1) -- SUCCESS --isRight :: Either a b -> Bool -- | Analogue of fromMaybe. fromLeft :: (b -> a) -> Either a b -> a -- | Analogue of fromMaybe. fromRight :: (a -> b) -> Either a b -> b -- | Analogue of fromMaybeM. fromLeftM :: Monad m => (b -> m a) -> m (Either a b) -> m a -- | Analogue of fromMaybeM. fromRightM :: Monad m => (a -> m b) -> m (Either a b) -> m b -- | Safe projection from Left. -- --
-- maybeLeft (Left a) = Just a -- maybeLeft Right{} = Nothing --maybeLeft :: Either a b -> Maybe a -- | Safe projection from Right. -- --
-- maybeRight (Right b) = Just b -- maybeRight Left{} = Nothing --maybeRight :: Either a b -> Maybe b -- | Returns Just input_with_tags_stripped if all elements -- are to the Left, and otherwise Nothing. allLeft :: [Either a b] -> Maybe [a] -- | Returns Just input_with_tags_stripped if all elements -- are to the right, and otherwise Nothing. -- --
-- allRight xs == -- if all isRight xs then -- Just (map ((Right x) -> x) xs) -- else -- Nothing --allRight :: [Either a b] -> Maybe [b] -- | Groups a list into alternating chunks of Left and Right -- values groupByEither :: [Either a b] -> [Either (List1 a) (List1 b)] -- | Convert Maybe to Either e, given an error -- e for the Nothing case. maybeToEither :: e -> Maybe a -> Either e a -- | Swap tags Left and Right. swapEither :: Either a b -> Either b a module Agda.Utils.Monad -- | Strict ap (<*!>) :: Monad m => m (a -> b) -> m a -> m b infixl 4 <*!> -- | Binary bind. (==<<) :: Monad m => (a -> b -> m c) -> (m a, m b) -> m c allM :: (Foldable f, Monad m) => (a -> m Bool) -> f a -> m Bool -- | Lazy monadic disjunction with Either truth values. Returns -- the last error message if all fail. altM1 :: Monad m => (a -> m (Either err b)) -> [a] -> m (Either err b) -- | Lazy monadic conjunction. and2M :: Monad m => m Bool -> m Bool -> m Bool andM :: (Foldable f, Monad m) => f (m Bool) -> m Bool anyM :: (Foldable f, Monad m) => (a -> m Bool) -> f a -> m Bool -- | Bracket without failure. Typically used to preserve state. bracket_ :: Monad m => m a -> (a -> m ()) -> m b -> m b -- | Generalises the catMaybes function from lists to an arbitrary -- MonadPlus. catMaybesMP :: MonadPlus m => m (Maybe a) -> m a concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b] -- | A monadic version of dropWhileEnd :: (a -> Bool) -> -- [a] -> m [a]. Effects happen starting at the end of the list -- until p becomes false. dropWhileEndM :: Monad m => (a -> m Bool) -> [a] -> m [a] -- | A monadic version of dropWhile :: (a -> Bool) -> [a] -- -> [a]. dropWhileM :: Monad m => (a -> m Bool) -> [a] -> m [a] embedWriter :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => Writer w a -> WriterT w m a existsM :: (Foldable f, Monad m) => f a -> (a -> m Bool) -> m Bool -- | Finally for the Error class. Errors in the finally part take -- precedence over prior errors. finally :: MonadError e m => m a -> m () -> m a -- | Generalized version of for_ :: Applicative m => [a] -> (a -- -> m ()) -> m () forM' :: (Foldable t, Applicative m, Monoid b) => t a -> (a -> m b) -> m b forMM :: (Traversable t, Monad m) => m (t a) -> (a -> m b) -> m (t b) forMM_ :: (Foldable t, Monad m) => m (t a) -> (a -> m ()) -> m () -- | The for version of mapMaybeM. forMaybeM :: Monad m => [a] -> (a -> m (Maybe b)) -> m [b] -- | The for version of mapMaybeMM. forMaybeMM :: Monad m => m [a] -> (a -> m (Maybe b)) -> m [b] forallM :: (Foldable f, Monad m) => f a -> (a -> m Bool) -> m Bool -- | Translates Maybe to MonadPlus. fromMaybeMP :: MonadPlus m => Maybe a -> m a guard :: (IsBool b, MonadPlus m) => b -> m () -- | Monadic guard. guardM :: (Monad m, MonadPlus m) => m Bool -> m () -- | Like guard, but raise given error when condition fails. guardWithError :: MonadError e m => e -> Bool -> m () -- | Monadic if-then-else. ifM :: Monad m => m Bool -> m a -> m a -> m a -- |
-- ifNotM mc = ifM (not $ mc) --ifNotM :: Monad m => m Bool -> m a -> m a -> m a -- | Restore state after computation. localState :: MonadState s m => m a -> m a -- | Generalized version of traverse_ :: Applicative m => (a -> m -- ()) -> [a] -> m () Executes effects and collects results in -- left-to-right order. Works best with left-associative monoids. -- -- Note that there is an alternative -- --
-- mapM' f t = foldr mappend mempty $ mapM f t ---- -- that collects results in right-to-left order (effects still -- left-to-right). It might be preferable for right associative monoids. mapM' :: (Foldable t, Applicative m, Monoid b) => (a -> m b) -> t a -> m b mapMM :: (Traversable t, Monad m) => (a -> m b) -> m (t a) -> m (t b) mapMM_ :: (Foldable t, Monad m) => (a -> m ()) -> m (t a) -> m () -- | A monadic version of mapMaybe :: (a -> Maybe b) -> -- [a] -> [b]. mapMaybeM :: Monad m => (a -> m (Maybe b)) -> [a] -> m [b] -- | A version of mapMaybeM with a computation for the -- input list. mapMaybeMM :: Monad m => (a -> m (Maybe b)) -> m [a] -> m [b] -- | Lazy monadic disjunction. or2M :: Monad m => m Bool -> m Bool -> m Bool -- | Lazy monadic disjunction with accumulation of errors in a monoid. -- Errors are discarded if we succeed. orEitherM :: (Monoid e, Monad m, Functor m) => [m (Either e b)] -> m (Either e b) orM :: (Foldable f, Monad m) => f (m Bool) -> m Bool -- | A `monadic' version of @partition :: (a -> Bool) -- -> [a] -> ([a],[a]) partitionM :: (Functor m, Applicative m) => (a -> m Bool) -> [a] -> m ([a], [a]) -- | Branch over elements of a monadic Foldable data structure. scatterMP :: (MonadPlus m, Foldable t) => m (t a) -> m a -- | Output a single value. tell1 :: (Monoid ws, Singleton w ws, MonadWriter ws m) => w -> m () -- | Run a command, catch the exception and return it. tryCatch :: (MonadError e m, Functor m) => m () -> m (Maybe e) -- | Try a computation, return Nothing if an Error occurs. tryMaybe :: (MonadError e m, Functor m) => m a -> m (Maybe a) unless :: (IsBool b, Monad m) => b -> m () -> m () unlessM :: Monad m => m Bool -> m () -> m () when :: (IsBool b, Monad m) => b -> m () -> m () whenM :: Monad m => m Bool -> m () -> m () -- | The join function is the conventional monad join operator. It -- is used to remove one level of monadic structure, projecting its bound -- argument into the outer level. -- -- 'join bss' can be understood as the do -- expression -- --
-- do bs <- bss -- bs ---- --
-- >>> join [[1, 2, 3], [4, 5, 6], [7, 8, 9]] -- [1,2,3,4,5,6,7,8,9] ---- --
-- >>> join (Just (Just 3)) -- Just 3 ---- -- A common use of join is to run an IO computation -- returned from an STM transaction, since STM transactions -- can't perform IO directly. Recall that -- --
-- atomically :: STM a -> IO a ---- -- is used to run STM transactions atomically. So, by specializing -- the types of atomically and join to -- --
-- atomically :: STM (IO b) -> IO (IO b) -- join :: IO (IO b) -> IO b ---- -- we can compose them as -- --
-- join . atomically :: STM (IO b) -> IO b ---- -- to run an STM transaction and the IO action it returns. join :: Monad m => m (m a) -> m a -- | Promote a function to a monad, scanning the monadic arguments from -- left to right. -- --
-- >>> liftM2 (+) [0,1] [0,2] -- [0,2,1,3] ---- --
-- >>> liftM2 (+) (Just 1) Nothing -- Nothing ---- --
-- >>> liftM2 (+) (+ 3) (* 2) 5 -- 18 --liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r -- | Promote a function to a monad, scanning the monadic arguments from -- left to right (cf. liftM2). liftM3 :: Monad m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r -- | Promote a function to a monad, scanning the monadic arguments from -- left to right (cf. liftM2). liftM4 :: Monad m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r -- | Strict version of <$>. (<$!>) :: Monad m => (a -> b) -> m a -> m b infixl 4 <$!> -- | Right-to-left composition of Kleisli arrows. -- (>=>), with the arguments flipped. -- -- Note how this operator resembles function composition -- (.): -- --
-- (.) :: (b -> c) -> (a -> b) -> a -> c -- (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c --(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c infixr 1 <=< -- | Left-to-right composition of Kleisli arrows. -- -- '(bs >=> cs) a' can be understood as the -- do expression -- --
-- do b <- bs a -- cs b ---- -- or in terms of (>>=) as -- --
-- bs a >>= cs --(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c infixr 1 >=> -- | This generalizes the list-based filter function. -- --
-- runIdentity (filterM (Identity . p) xs) == filter p xs ---- --
-- >>> filterM (\x -> do -- putStrLn ("Keep: " ++ show x ++ "?") -- answer <- getLine -- pure (answer == "y")) -- [1, 2, 3] -- Keep: 1? -- y -- Keep: 2? -- n -- Keep: 3? -- y -- [1,3] ---- --
-- >>> filterM (\x -> do -- putStr (show x) -- x' <- readLn -- pure (x == x')) -- [1, 2, 3] -- 12 -- 22 -- 33 -- [2,3] --filterM :: Applicative m => (a -> m Bool) -> [a] -> m [a] -- | The foldM function is analogous to foldl, except that -- its result is encapsulated in a monad. Note that foldM works -- from left-to-right over the list arguments. This could be an issue -- where (>>) and the `folded function' are not -- commutative. -- --
-- foldM f a1 [x1, x2, ..., xm] -- -- == -- -- do -- a2 <- f a1 x1 -- a3 <- f a2 x2 -- ... -- f am xm ---- -- If right-to-left evaluation is required, the input list should be -- reversed. -- -- Note: foldM is the same as foldlM foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b -- | The zipWithM function generalizes zipWith to arbitrary -- applicative functors. zipWithM :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m [c] -- | zipWithM_ is the extension of zipWithM which ignores the -- final result. zipWithM_ :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m () -- | forM_ is mapM_ with its arguments flipped. For a version -- that doesn't ignore the results see forM. -- -- forM_ is just like for_, but specialised to monadic -- actions. forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m () -- | The sum of a collection of actions using (<|>), -- generalizing concat. -- -- msum is just like asum, but specialised to -- MonadPlus. -- --
-- >>> msum [Just "Hello", Nothing, Just "World"] -- Just "Hello" --msum :: (Foldable t, MonadPlus m) => t (m a) -> m a -- | void value discards or ignores the result of -- evaluation, such as the return value of an IO action. -- --
-- >>> void Nothing -- Nothing ---- --
-- >>> void (Just 3) -- Just () ---- -- Replace the contents of an Either Int -- Int with unit, resulting in an Either -- Int (): -- --
-- >>> void (Left 8675309) -- Left 8675309 ---- --
-- >>> void (Right 8675309) -- Right () ---- -- Replace every element of a list with unit: -- --
-- >>> void [1,2,3] -- [(),(),()] ---- -- Replace the second element of a pair with unit: -- --
-- >>> void (1,2) -- (1,()) ---- -- Discard the result of an IO action: -- --
-- >>> mapM print [1,2] -- 1 -- 2 -- [(),()] ---- --
-- >>> void $ mapM print [1,2] -- 1 -- 2 --void :: Functor f => f a -> f () -- | forM is mapM with its arguments flipped. For a version -- that ignores the results see forM_. forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b) -- | MonadError analogue to the try function. tryError :: MonadError e m => m a -> m (Either e a) -- | MonadError analogue to the withExceptT function. -- Modify the value (but not the type) of an error. The type is fixed -- because of the functional dependency m -> e. If you need -- to change the type of e use mapError or -- modifyError. withError :: MonadError e m => (e -> e) -> m a -> m a -- | Lift a binary function to actions. -- -- Some functors support an implementation of liftA2 that is more -- efficient than the default one. In particular, if fmap is an -- expensive operation, it is likely better to use liftA2 than to -- fmap over the structure and then use <*>. -- -- This became a typeclass method in 4.10.0.0. Prior to that, it was a -- function defined in terms of <*> and fmap. -- --
-- >>> liftA2 (,) (Just 3) (Just 5) -- Just (3,5) ---- --
-- >>> liftA2 (+) [1, 2, 3] [4, 5, 6] -- [5,6,7,6,7,8,7,8,9] --liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c -- | Monads that also support choice and failure. class (Alternative m, Monad m) => MonadPlus (m :: Type -> Type) -- | The identity of mplus. It should also satisfy the equations -- --
-- mzero >>= f = mzero -- v >> mzero = mzero ---- -- The default definition is -- --
-- mzero = empty --mzero :: MonadPlus m => m a -- | An associative operation. The default definition is -- --
-- mplus = (<|>) --mplus :: MonadPlus m => m a -> m a -> m a -- | The class of monad transformers. For any monad m, the result -- t m should also be a monad, and lift should be a monad -- transformation from m to t m, i.e. it should satisfy -- the following laws: -- -- -- -- Since 0.6.0.0 and for GHC 8.6 and later, the requirement that t -- m be a Monad is enforced by the implication constraint -- forall m. Monad m => Monad (t m) enabled by -- the QuantifiedConstraints extension. -- --
-- (MonadTrans t, forall m. Monad m => Monad (t m)) => ... ---- -- to be reported as ambiguous. For transformers 0.6 and later, this can -- be fixed by removing the second constraint, which is implied by the -- first. class forall (m :: Type -> Type). Monad m => Monad t m => MonadTrans (t :: Type -> Type -> Type -> Type) -- | Lift a computation from the argument monad to the constructed monad. lift :: (MonadTrans t, Monad m) => m a -> t m a -- | An infix synonym for fmap. -- -- The name of this operator is an allusion to $. Note the -- similarities between their types: -- --
-- ($) :: (a -> b) -> a -> b -- (<$>) :: Functor f => (a -> b) -> f a -> f b ---- -- Whereas $ is function application, <$> is function -- application lifted over a Functor. -- --
-- >>> show <$> Nothing -- Nothing ---- --
-- >>> show <$> Just 3 -- Just "3" ---- -- Convert from an Either Int Int to an -- Either Int String using show: -- --
-- >>> show <$> Left 17 -- Left 17 ---- --
-- >>> show <$> Right 17 -- Right "17" ---- -- Double each element of a list: -- --
-- >>> (*2) <$> [1,2,3] -- [2,4,6] ---- -- Apply even to the second element of a pair: -- --
-- >>> even <$> (2,2) -- (2,True) --(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 <$> -- | Sequential application. -- -- A few functors support an implementation of <*> that is -- more efficient than the default one. -- --
-- >>> data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz} ---- --
-- >>> produceFoo :: Applicative f => f Foo -- -- >>> produceBar :: Applicative f => f Bar -- -- >>> produceBaz :: Applicative f => f Baz ---- --
-- >>> mkState :: Applicative f => f MyState -- -- >>> mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz --(<*>) :: Applicative f => f (a -> b) -> f a -> f b infixl 4 <*> -- | Replace all locations in the input with the same value. The default -- definition is fmap . const, but this may be -- overridden with a more efficient version. -- --
-- >>> 'a' <$ Just 2 -- Just 'a' -- -- >>> 'a' <$ Nothing -- Nothing --(<$) :: Functor f => a -> f b -> f a infixl 4 <$ -- | ListT done right, see -- https://www.haskell.org/haskellwiki/ListT_done_right_alternative -- -- There is also the list-t package on hackage (Nikita Volkov) -- but it again depends on other packages we do not use yet, so we rather -- implement the few bits we need afresh. module Agda.Utils.ListT -- | Lazy monadic computation of a list of results. newtype ListT (m :: Type -> Type) a ListT :: m (Maybe (a, ListT m a)) -> ListT (m :: Type -> Type) a [runListT] :: ListT (m :: Type -> Type) a -> m (Maybe (a, ListT m a)) -- | Boilerplate function to lift MonadReader through the -- ListT transformer. mapListT :: (m (Maybe (a, ListT m a)) -> n (Maybe (b, ListT n b))) -> ListT m a -> ListT n b -- | Inverse to mapListT. unmapListT :: (ListT m a -> ListT n b) -> m (Maybe (a, ListT m a)) -> n (Maybe (b, ListT n b)) -- | The empty lazy list. nilListT :: forall (m :: Type -> Type) a. Monad m => ListT m a -- | Consing a value to a lazy list. consListT :: forall (m :: Type -> Type) a. Monad m => a -> ListT m a -> ListT m a -- | Singleton lazy list. sgListT :: forall (m :: Type -> Type) a. Monad m => a -> ListT m a -- | Case distinction over lazy list. caseListT :: Monad m => ListT m a -> m b -> (a -> ListT m a -> m b) -> m b -- | Folding a lazy list, effects left-to-right. foldListT :: Monad m => (a -> m b -> m b) -> m b -> ListT m a -> m b -- | Lazy monadic disjunction of lazy monadic list, effects left-to-right anyListT :: Monad m => ListT m a -> (a -> m Bool) -> m Bool -- | Lazy monadic conjunction of lazy monadic list, effects left-to-right allListT :: Monad m => ListT m a -> (a -> m Bool) -> m Bool -- | Force all values in the lazy list, effects left-to-right sequenceListT :: Monad m => ListT m a -> m [a] -- | The join operation of the ListT m monad. concatListT :: forall (m :: Type -> Type) a. Monad m => ListT m (ListT m a) -> ListT m a -- | We can `run' a computation of a ListT as it is monadic -- itself. runMListT :: Monad m => m (ListT m a) -> ListT m a -- | Monadic cons. consMListT :: Monad m => m a -> ListT m a -> ListT m a -- | Monadic singleton. sgMListT :: Monad m => m a -> ListT m a -- | Extending a monadic function to ListT. mapMListT :: Monad m => (a -> m b) -> ListT m a -> ListT m b -- | Alternative implementation using foldListT. mapMListT_alt :: Monad m => (a -> m b) -> ListT m a -> ListT m b -- | Change from one monad to another liftListT :: (Monad m, Monad m') => (forall a1. () => m a1 -> m' a1) -> ListT m a -> ListT m' a instance (GHC.Internal.Base.Functor m, GHC.Internal.Base.Applicative m, GHC.Internal.Base.Monad m) => GHC.Internal.Base.Alternative (Agda.Utils.ListT.ListT m) instance (GHC.Internal.Base.Functor m, GHC.Internal.Base.Applicative m, GHC.Internal.Base.Monad m) => GHC.Internal.Base.Applicative (Agda.Utils.ListT.ListT m) instance GHC.Internal.Base.Functor m => GHC.Internal.Base.Functor (Agda.Utils.ListT.ListT m) instance GHC.Internal.Base.Monad m => GHC.Internal.Control.Monad.Fail.MonadFail (Agda.Utils.ListT.ListT m) instance (GHC.Internal.Base.Applicative m, GHC.Internal.Control.Monad.IO.Class.MonadIO m) => GHC.Internal.Control.Monad.IO.Class.MonadIO (Agda.Utils.ListT.ListT m) instance (GHC.Internal.Base.Functor m, GHC.Internal.Base.Applicative m, GHC.Internal.Base.Monad m) => GHC.Internal.Base.Monad (Agda.Utils.ListT.ListT m) instance (GHC.Internal.Base.Functor m, GHC.Internal.Base.Applicative m, GHC.Internal.Base.Monad m) => GHC.Internal.Base.MonadPlus (Agda.Utils.ListT.ListT m) instance (GHC.Internal.Base.Applicative m, Control.Monad.Reader.Class.MonadReader r m) => Control.Monad.Reader.Class.MonadReader r (Agda.Utils.ListT.ListT m) instance (GHC.Internal.Base.Applicative m, Control.Monad.State.Class.MonadState s m) => Control.Monad.State.Class.MonadState s (Agda.Utils.ListT.ListT m) instance Control.Monad.Trans.Class.MonadTrans Agda.Utils.ListT.ListT instance GHC.Internal.Base.Monad m => GHC.Internal.Base.Monoid (Agda.Utils.ListT.ListT m a) instance GHC.Internal.Base.Monad m => GHC.Internal.Base.Semigroup (Agda.Utils.ListT.ListT m a) -- | Operations on file names. module Agda.Utils.FileName -- | Paths which are known to be absolute. -- -- Note that the Eq and Ord instances do not check if -- different paths point to the same files or directories. newtype AbsolutePath AbsolutePath :: Text -> AbsolutePath -- | Extract the AbsolutePath to be used as FilePath. filePath :: AbsolutePath -> FilePath -- | Constructs AbsolutePaths. -- -- Precondition: The path must be absolute and valid. mkAbsolute :: FilePath -> AbsolutePath -- | Makes the path absolute. -- -- This function may raise an __IMPOSSIBLE__ error if -- canonicalizePath does not return an absolute path. absolute :: FilePath -> IO AbsolutePath -- | Resolve symlinks etc. Preserves sameFile. canonicalizeAbsolutePath :: AbsolutePath -> IO AbsolutePath -- | Tries to establish if the two file paths point to the same file (or -- directory). False negatives may be returned. sameFile :: AbsolutePath -> AbsolutePath -> IO Bool -- | Case-sensitive doesFileExist for Windows. -- -- This is case-sensitive only on the file name part, not on the -- directory part. (Ideally, path components coming from module name -- components should be checked case-sensitively and the other path -- components should be checked case insensitively.) doesFileExistCaseSensitive :: FilePath -> IO Bool -- | True if the first file is newer than the second file. If a file -- doesn't exist it is considered to be infinitely old. isNewerThan :: FilePath -> FilePath -> IO Bool -- | A partial version of makeRelative with flipped arguments, -- returning Nothing if the given path cannot be relativized to -- the given root. relativizeAbsolutePath :: AbsolutePath -> AbsolutePath -> Maybe FilePath -- | Makes a path relative to a root without assuming that either path is -- canonical. makeRelativeCanonical :: FilePath -> FilePath -> IO FilePath -- | Generalizes stripExtension. stripAnyOfExtensions :: [String] -> FilePath -> Maybe FilePath instance GHC.Classes.Eq Agda.Utils.FileName.AbsolutePath instance Data.Hashable.Class.Hashable Agda.Utils.FileName.AbsolutePath instance Control.DeepSeq.NFData Agda.Utils.FileName.AbsolutePath instance GHC.Classes.Ord Agda.Utils.FileName.AbsolutePath instance GHC.Internal.Show.Show Agda.Utils.FileName.AbsolutePath -- | Instead of checking time-stamps we compute a hash of the module source -- and store it in the interface file. This module contains the functions -- to do that. module Agda.Utils.Hash type Hash = Word64 hashByteString :: ByteString -> Hash hashTextFile :: AbsolutePath -> IO Hash -- | Hashes a piece of Text. hashText :: Text -> Hash combineHashes :: [Hash] -> Hash -- | Hashing a module name for unique identifiers. hashString :: String -> Word64 module Agda.Interaction.Options.Warnings -- | A WarningMode has two components: a set of warnings to be -- displayed and a flag stating whether warnings should be turned into -- fatal errors. data WarningMode WarningMode :: Set WarningName -> Bool -> WarningMode [_warningSet] :: WarningMode -> Set WarningName [_warn2Error] :: WarningMode -> Bool warningSet :: Lens' WarningMode (Set WarningName) warn2Error :: Lens' WarningMode Bool lensSingleWarning :: WarningName -> Lens' WarningMode Bool -- | The defaultWarningMode is a curated set of warnings covering -- non-fatal errors and disabling style-related ones defaultWarningSet :: String allWarnings :: Set WarningName usualWarnings :: Set WarningName noWarnings :: Set WarningName unsolvedWarnings :: Set WarningName incompleteMatchWarnings :: Set WarningName errorWarnings :: Set WarningName -- | Warnings enabled by --exact-split. exactSplitWarnings :: Set WarningName defaultWarningMode :: WarningMode -- | Some warnings are errors and cannot be turned off. data WarningModeError -- | Unknown warning. Unknown :: Text -> WarningModeError -- | Warning that cannot be disabled. NoNoError :: Text -> WarningModeError prettyWarningModeError :: WarningModeError -> Text -- | warningModeUpdate str computes the action of str -- over the current WarningMode: it may reset the set of -- warnings, add or remove a specific flag or demand that any warning be -- turned into an error warningModeUpdate :: String -> Either WarningModeError WarningModeUpdate -- | Common sets of warnings warningSets :: [(String, (Set WarningName, String))] -- | The WarningName data enumeration is meant to have a -- one-to-one correspondance to existing warnings in the codebase. data WarningName OptionRenamed_ :: WarningName -- | Some warning could not be set or unset. Parser Warnings WarningProblem_ :: WarningName OverlappingTokensWarning_ :: WarningName UnsupportedAttribute_ :: WarningName MultipleAttributes_ :: WarningName LibUnknownField_ :: WarningName EmptyAbstract_ :: WarningName EmptyConstructor_ :: WarningName EmptyField_ :: WarningName EmptyGeneralize_ :: WarningName EmptyInstance_ :: WarningName EmptyMacro_ :: WarningName EmptyMutual_ :: WarningName EmptyPostulate_ :: WarningName EmptyPrimitive_ :: WarningName EmptyPrivate_ :: WarningName EmptyRewritePragma_ :: WarningName EmptyWhere_ :: WarningName EmptyPolarityPragma_ :: WarningName HiddenGeneralize_ :: WarningName InvalidCatchallPragma_ :: WarningName InvalidConstructorBlock_ :: WarningName InvalidCoverageCheckPragma_ :: WarningName InvalidNoPositivityCheckPragma_ :: WarningName InvalidNoUniverseCheckPragma_ :: WarningName DuplicateRecordDirective_ :: WarningName InvalidTerminationCheckPragma_ :: WarningName MissingDataDeclaration_ :: WarningName MissingDefinitions_ :: WarningName NotAllowedInMutual_ :: WarningName OpenImportAbstract_ :: WarningName OpenImportPrivate_ :: WarningName PolarityPragmasButNotPostulates_ :: WarningName PragmaCompiled_ :: WarningName PragmaNoTerminationCheck_ :: WarningName ShadowingInTelescope_ :: WarningName UnknownFixityInMixfixDecl_ :: WarningName UnknownNamesInFixityDecl_ :: WarningName UnknownNamesInPolarityPragmas_ :: WarningName UselessAbstract_ :: WarningName UselessInstance_ :: WarningName UselessMacro_ :: WarningName UselessPrivate_ :: WarningName AbsurdPatternRequiresAbsentRHS_ :: WarningName AsPatternShadowsConstructorOrPatternSynonym_ :: WarningName PatternShadowsConstructor_ :: WarningName CantGeneralizeOverSorts_ :: WarningName ClashesViaRenaming_ :: WarningName CoverageIssue_ :: WarningName CoverageNoExactSplit_ :: WarningName InlineNoExactSplit_ :: WarningName DeprecationWarning_ :: WarningName DuplicateUsing_ :: WarningName FixingCohesion_ :: WarningName FixingPolarity_ :: WarningName FixingRelevance_ :: WarningName FixityInRenamingModule_ :: WarningName InvalidCharacterLiteral_ :: WarningName UselessPragma_ :: WarningName IllformedAsClause_ :: WarningName InstanceArgWithExplicitArg_ :: WarningName InstanceWithExplicitArg_ :: WarningName InstanceNoOutputTypeName_ :: WarningName InteractionMetaBoundaries_ :: WarningName InversionDepthReached_ :: WarningName ModuleDoesntExport_ :: WarningName NotInScope_ :: WarningName NotStrictlyPositive_ :: WarningName ConstructorDoesNotFitInData_ :: WarningName CoinductiveEtaRecord_ :: WarningName UnsupportedIndexedMatch_ :: WarningName OldBuiltin_ :: WarningName BuiltinDeclaresIdentifier_ :: WarningName PlentyInHardCompileTimeMode_ :: WarningName PragmaCompileErased_ :: WarningName PragmaCompileList_ :: WarningName PragmaCompileMaybe_ :: WarningName PragmaCompileUnparsable_ :: WarningName PragmaCompileWrong_ :: WarningName PragmaCompileWrongName_ :: WarningName PragmaExpectsDefinedSymbol_ :: WarningName PragmaExpectsUnambiguousConstructorOrFunction_ :: WarningName PragmaExpectsUnambiguousProjectionOrFunction_ :: WarningName NoMain_ :: WarningName NotARewriteRule_ :: WarningName RewriteLHSNotDefinitionOrConstructor_ :: WarningName RewriteVariablesNotBoundByLHS_ :: WarningName RewriteVariablesBoundMoreThanOnce_ :: WarningName RewriteLHSReduces_ :: WarningName RewriteHeadSymbolIsProjectionLikeFunction_ :: WarningName RewriteHeadSymbolIsTypeConstructor_ :: WarningName RewriteHeadSymbolContainsMetas_ :: WarningName RewriteConstructorParametersNotGeneral_ :: WarningName RewriteContainsUnsolvedMetaVariables_ :: WarningName RewriteBlockedOnProblems_ :: WarningName RewriteRequiresDefinitions_ :: WarningName RewriteDoesNotTargetRewriteRelation_ :: WarningName RewriteBeforeFunctionDefinition_ :: WarningName RewriteBeforeMutualFunctionDefinition_ :: WarningName ConfluenceCheckingIncompleteBecauseOfMeta_ :: WarningName ConfluenceForCubicalNotSupported_ :: WarningName RewriteMaybeNonConfluent_ :: WarningName RewriteNonConfluent_ :: WarningName RewriteAmbiguousRules_ :: WarningName RewriteMissingRule_ :: WarningName DuplicateRewriteRule_ :: WarningName SafeFlagEta_ :: WarningName SafeFlagInjective_ :: WarningName SafeFlagNoCoverageCheck_ :: WarningName SafeFlagNonTerminating_ :: WarningName SafeFlagNoPositivityCheck_ :: WarningName SafeFlagNoUniverseCheck_ :: WarningName SafeFlagPolarity_ :: WarningName SafeFlagPostulate_ :: WarningName SafeFlagPragma_ :: WarningName SafeFlagTerminating_ :: WarningName SafeFlagWithoutKFlagPrimEraseEquality_ :: WarningName TerminationIssue_ :: WarningName TooManyArgumentsToSort_ :: WarningName UnreachableClauses_ :: WarningName UnsolvedConstraints_ :: WarningName UnsolvedInteractionMetas_ :: WarningName UnsolvedMetaVariables_ :: WarningName UselessHiding_ :: WarningName UselessInline_ :: WarningName UselessPatternDeclarationForRecord_ :: WarningName UselessPublic_ :: WarningName UselessTactic_ :: WarningName UserWarning_ :: WarningName InvalidDisplayForm_ :: WarningName UnusedVariablesInDisplayForm_ :: WarningName WithClauseProjectionFixityMismatch_ :: WarningName WithoutKFlagPrimEraseEquality_ :: WarningName ConflictingPragmaOptions_ :: WarningName WrongInstanceDeclaration_ :: WarningName TooManyPolarities_ :: WarningName TopLevelPolarity_ :: WarningName CoInfectiveImport_ :: WarningName InfectiveImport_ :: WarningName DuplicateFields_ :: WarningName TooManyFields_ :: WarningName MissingTypeSignatureForOpaque_ :: WarningName NotAffectedByOpaque_ :: WarningName UnfoldingWrongName_ :: WarningName UnfoldTransparentName_ :: WarningName UselessOpaque_ :: WarningName HiddenNotInArgumentPosition_ :: WarningName InstanceNotInArgumentPosition_ :: WarningName MacroInLetBindings_ :: WarningName AbstractInLetBindings_ :: WarningName FaceConstraintCannotBeHidden_ :: WarningName FaceConstraintCannotBeNamed_ :: WarningName CustomBackendWarning_ :: WarningName warningName2String :: WarningName -> String -- | The flag corresponding to a warning is precisely the name of the -- constructor minus the trailing underscore. string2WarningName :: String -> Maybe WarningName -- | warningUsage generated using warningNameDescription usageWarning :: String instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Warnings.WarningName instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Warnings.WarningName instance GHC.Classes.Eq Agda.Interaction.Options.Warnings.WarningMode instance GHC.Classes.Eq Agda.Interaction.Options.Warnings.WarningName instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Warnings.WarningMode instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Warnings.WarningModeError instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Warnings.WarningName instance Control.DeepSeq.NFData Agda.Interaction.Options.Warnings.WarningMode instance Control.DeepSeq.NFData Agda.Interaction.Options.Warnings.WarningModeError instance Control.DeepSeq.NFData Agda.Interaction.Options.Warnings.WarningName instance GHC.Classes.Ord Agda.Interaction.Options.Warnings.WarningName instance GHC.Internal.Read.Read Agda.Interaction.Options.Warnings.WarningName instance GHC.Internal.Show.Show Agda.Interaction.Options.Warnings.WarningMode instance GHC.Internal.Show.Show Agda.Interaction.Options.Warnings.WarningModeError instance GHC.Internal.Show.Show Agda.Interaction.Options.Warnings.WarningName -- | Maintaining a list of favorites of some partially ordered type. Only -- the best elements are kept. -- -- To avoid name clashes, import this module qualified, as in import -- Agda.Utils.Favorites (Favorites) import qualified Agda.Utils.Favorites -- as Fav module Agda.Utils.Favorites -- | A list of incomparable favorites. newtype Favorites a Favorites :: [a] -> Favorites a [toList] :: Favorites a -> [a] -- | Result of comparing a candidate with the current favorites. data CompareResult a -- | Great, you are dominating a possibly (empty list of favorites) but -- there is also a rest that is not dominated. If null -- dominated, then notDominated is necessarily the complete -- list of favorites. Dominates :: [a] -> [a] -> CompareResult a [dominated] :: CompareResult a -> [a] [notDominated] :: CompareResult a -> [a] -- | Sorry, but you are dominated by that favorite. IsDominated :: a -> CompareResult a [dominator] :: CompareResult a -> a -- | Gosh, got some pretty a here, compare with my current -- favorites! Discard it if there is already one that is better or equal. -- (Skewed conservatively: faithful to the old favorites.) If there is no -- match for it, add it, and dispose of all that are worse than -- a. -- -- We require a partial ordering. Less is better! (Maybe paradoxically.) compareWithFavorites :: PartialOrd a => a -> Favorites a -> CompareResult a -- | Compare a new set of favorites to an old one and discard the new -- favorites that are dominated by the old ones and vice verse. (Skewed -- conservatively: faithful to the old favorites.) -- --
-- compareFavorites new old = (new', old') --compareFavorites :: PartialOrd a => Favorites a -> Favorites a -> (Favorites a, Favorites a) unionCompared :: (Favorites a, Favorites a) -> Favorites a -- | After comparing, do the actual insertion. insertCompared :: a -> Favorites a -> CompareResult a -> Favorites a -- | Compare, then insert accordingly. insert a l = insertCompared a l -- (compareWithFavorites a l) insert :: PartialOrd a => a -> Favorites a -> Favorites a -- | Insert all the favorites from the first list into the second. union :: PartialOrd a => Favorites a -> Favorites a -> Favorites a -- | Construct favorites from elements of a partial order. The result -- depends on the order of the list if it contains equal elements, since -- earlier seen elements are favored over later seen equals. The first -- element of the list is seen first. fromList :: PartialOrd a => [a] -> Favorites a instance GHC.Classes.Ord a => GHC.Classes.Eq (Agda.Utils.Favorites.Favorites a) instance GHC.Internal.Data.Foldable.Foldable Agda.Utils.Favorites.Favorites instance Agda.Utils.PartialOrd.PartialOrd a => GHC.Internal.Base.Monoid (Agda.Utils.Favorites.Favorites a) instance Agda.Utils.Null.Null (Agda.Utils.Favorites.Favorites a) instance Agda.Utils.PartialOrd.PartialOrd a => GHC.Internal.Base.Semigroup (Agda.Utils.Favorites.Favorites a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.Favorites.Favorites a) instance Agda.Utils.Singleton.Singleton a (Agda.Utils.Favorites.Favorites a) -- | Partly invertible finite maps. -- -- Time complexities are given under the assumption that all relevant -- instance functions, as well as arguments of function type, take -- constant time, and "n" is the number of keys involved in the -- operation. module Agda.Utils.BiMap -- | Partial injections from a type to some tag type. -- -- The idea is that tag should be injective on its domain: if -- tag x = tag y = Just i, then x = -- y. However, this property does not need to hold globally. The -- preconditions of the BiMap operations below specify for which -- sets of values tag must be injective. class HasTag a where { type Tag a; } tag :: HasTag a => a -> Maybe (Tag a) -- | Checks if the function tag is injective for the values in the -- given list for which the function is defined. tagInjectiveFor :: (Eq v, Eq (Tag v), HasTag v) => [v] -> Bool -- | Finite maps from k to v, with a way to quickly get -- from v to k for certain values of type v -- (those for which tag is defined). -- -- Every value of this type must satisfy biMapInvariant. data BiMap k v BiMap :: !Map k v -> !Map (Tag v) k -> BiMap k v [biMapThere] :: BiMap k v -> !Map k v [biMapBack] :: BiMap k v -> !Map (Tag v) k -- | The invariant for BiMap. biMapInvariant :: (Eq k, Eq v, Ord (Tag v), HasTag v) => BiMap k v -> Bool -- | Is the value a source key? O(log n). source :: Ord k => k -> BiMap k v -> Bool -- | Is the value a target key? O(log n). target :: Ord (Tag v) => Tag v -> BiMap k v -> Bool -- | Lookup. O(log n). lookup :: Ord k => k -> BiMap k v -> Maybe v -- | Inverse lookup. O(log n). invLookup :: Ord (Tag v) => Tag v -> BiMap k v -> Maybe k -- | Singleton map. O(1). singleton :: HasTag v => k -> v -> BiMap k v -- | Insertion. Overwrites existing values. O(log n). -- -- Precondition: See insertPrecondition. insert :: (Ord k, HasTag v, Ord (Tag v)) => k -> v -> BiMap k v -> BiMap k v -- | The precondition for insert k v m: If v has a -- tag (tag v ≠ Nothing), then m -- must not contain any mapping k' ↦ v' for which k ≠ -- k' and tag v = tag v'. insertPrecondition :: (Eq k, Eq v, Eq (Tag v), HasTag v) => k -> v -> BiMap k v -> Bool -- | Modifies the value at the given position, if any. If the function -- returns Nothing, then the value is removed. O(log n). -- -- The precondition for alterM f k m is that, if the -- value v is inserted into m, and tag -- v is defined, then no key other than k may map to a -- value v' for which tag v' = tag v. alterM :: (Ord k, Ord (Tag v), HasTag v, Monad m) => (Maybe v -> m (Maybe v)) -> k -> BiMap k v -> m (BiMap k v) -- | Modifies the value at the given position, if any. If the function -- returns Nothing, then the value is removed. O(log n). -- -- Precondition: See alterPrecondition. alter :: (Ord k, Ord (Tag v), HasTag v) => (Maybe v -> Maybe v) -> k -> BiMap k v -> BiMap k v -- | The precondition for alter f k m is that, if the value -- v is inserted into m, and tag v is -- defined, then no key other than k may map to a value -- v' for which tag v' = tag v. alterPrecondition :: (Ord k, Eq v, Eq (Tag v), HasTag v) => (Maybe v -> Maybe v) -> k -> BiMap k v -> Bool -- | Modifies the value at the given position, if any. If the function -- returns Nothing, then the value is removed. O(log n). -- -- Precondition: See updatePrecondition. update :: (Ord k, Ord (Tag v), HasTag v) => (v -> Maybe v) -> k -> BiMap k v -> BiMap k v -- | The precondition for update f k m is that, if the -- value v is inserted into m, and tag -- v is defined, then no key other than k may map to a -- value v' for which tag v' = tag v. updatePrecondition :: (Ord k, Eq v, Eq (Tag v), HasTag v) => (v -> Maybe v) -> k -> BiMap k v -> Bool -- | Modifies the value at the given position, if any. O(log n). -- -- Precondition: See adjustPrecondition. adjust :: (Ord k, Ord (Tag v), HasTag v) => (v -> v) -> k -> BiMap k v -> BiMap k v -- | The precondition for adjust f k m is that, if the -- value v is inserted into m, and tag -- v is defined, then no key other than k may map to a -- value v' for which tag v' = tag v. adjustPrecondition :: (Ord k, Eq v, Eq (Tag v), HasTag v) => (v -> v) -> k -> BiMap k v -> Bool -- | Inserts a binding into the map. If a binding for the key already -- exists, then the value obtained by applying the function to the key, -- the new value and the old value is inserted, and the old value is -- returned. -- -- Precondition: See insertLookupWithKeyPrecondition. insertLookupWithKey :: (Ord k, Ord (Tag v), HasTag v) => (k -> v -> v -> v) -> k -> v -> BiMap k v -> (Maybe v, BiMap k v) -- | The precondition for insertLookupWithKey f k v m is -- that, if the value v' is inserted into m, and -- tag v' is defined, then no key other than k -- may map to a value v'' for which tag v'' = -- tag v'. insertLookupWithKeyPrecondition :: (Ord k, Eq v, Eq (Tag v), HasTag v) => (k -> v -> v -> v) -> k -> v -> BiMap k v -> Bool -- | Changes all the values using the given function, which is also given -- access to keys. O(n log n). -- -- Precondition: See mapWithKeyPrecondition. mapWithKey :: (Ord k, Ord (Tag v), HasTag v) => (k -> v -> v) -> BiMap k v -> BiMap k v -- | The precondition for mapWithKey f m: For any two -- distinct mappings k₁ ↦ v₁, k₂ ↦ v₂ in m for -- which the tags of f k₁ v₁ and f k₂ v₂ are defined -- the values of f must be distinct (f k₁ v₁ ≠ f k₂ -- v₂). Furthermore tag must be injective for { f k v | -- (k, v) ∈ m }. mapWithKeyPrecondition :: (Eq k, Eq v, Eq (Tag v), HasTag v) => (k -> v -> v) -> BiMap k v -> Bool -- | Changes all the values using the given function, which is also given -- access to keys. O(n). -- -- Precondition: See mapWithKeyFixedTagsPrecondition. Note that -- tags must not change. mapWithKeyFixedTags :: (k -> v -> v) -> BiMap k v -> BiMap k v -- | The precondition for mapWithKeyFixedTags f m is that, -- if m maps k to v, then tag (f k -- v) == tag v. mapWithKeyFixedTagsPrecondition :: (Eq v, Eq (Tag v), HasTag v) => (k -> v -> v) -> BiMap k v -> Bool -- | Left-biased union. For the time complexity, see union. -- -- Precondition: See unionPrecondition. union :: (Ord k, Ord (Tag v)) => BiMap k v -> BiMap k v -> BiMap k v unionPrecondition :: (Ord k, Eq v, Eq (Tag v), HasTag v) => BiMap k v -> BiMap k v -> Bool -- | Conversion from lists of pairs. Later entries take precedence over -- earlier ones. O(n log n). -- -- Precondition: See fromListPrecondition. fromList :: (Ord k, Ord (Tag v), HasTag v) => [(k, v)] -> BiMap k v fromListPrecondition :: (Eq k, Eq v, Eq (Tag v), HasTag v) => [(k, v)] -> Bool -- | Conversion to lists of pairs, with the keys in ascending order. O(n). toList :: BiMap k v -> [(k, v)] -- | The keys, in ascending order. O(n). keys :: BiMap k v -> [k] -- | The values, ordered according to the corresponding keys. O(n). elems :: BiMap k v -> [v] -- | Conversion from two lists that contain distinct keys/tags, with the -- keys/tags in ascending order. O(n). -- -- Precondition: See fromDistinctAscendingListsPrecondition. fromDistinctAscendingLists :: ([(k, v)], [(Tag v, k)]) -> BiMap k v fromDistinctAscendingListsPrecondition :: (Ord k, Eq v, Ord (Tag v), HasTag v) => ([(k, v)], [(Tag v, k)]) -> Bool -- | Generates input suitable for fromDistinctAscendingLists. O(n). toDistinctAscendingLists :: BiMap k v -> ([(k, v)], [(Tag v, k)]) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Agda.Utils.BiMap.BiMap k v) instance GHC.Internal.Generics.Generic (Agda.Utils.BiMap.BiMap k v) instance Agda.Utils.Null.Null (Agda.Utils.BiMap.BiMap k v) instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => GHC.Classes.Ord (Agda.Utils.BiMap.BiMap k v) instance (GHC.Internal.Show.Show k, GHC.Internal.Show.Show v) => GHC.Internal.Show.Show (Agda.Utils.BiMap.BiMap k v) module Agda.Syntax.TopLevelModuleName.Boot newtype ModuleNameHash ModuleNameHash :: Word64 -> ModuleNameHash [moduleNameHash] :: ModuleNameHash -> Word64 noModuleNameHash :: ModuleNameHash type TopLevelModuleNameParts = List1 Text data TopLevelModuleName' range TopLevelModuleName :: range -> {-# UNPACK #-} !ModuleNameHash -> TopLevelModuleNameParts -> TopLevelModuleName' range [moduleNameRange] :: TopLevelModuleName' range -> range [moduleNameId] :: TopLevelModuleName' range -> {-# UNPACK #-} !ModuleNameHash [moduleNameParts] :: TopLevelModuleName' range -> TopLevelModuleNameParts instance GHC.Classes.Eq Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance GHC.Classes.Eq (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) instance GHC.Internal.Generics.Generic (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) instance Agda.Utils.BiMap.HasTag Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance Agda.Utils.BiMap.HasTag (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) instance Data.Hashable.Class.Hashable Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance Data.Hashable.Class.Hashable (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) instance Control.DeepSeq.NFData Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance Control.DeepSeq.NFData (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) instance GHC.Classes.Ord Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance GHC.Classes.Ord (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) instance GHC.Internal.Show.Show Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance GHC.Internal.Show.Show range => GHC.Internal.Show.Show (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' range) -- | Position information for syntax. Crucial for giving good error -- messages. module Agda.Syntax.Position type Position = Position' SrcFile type PositionWithoutFile = Position' () -- | Represents a point in the input. -- -- If two positions have the same srcFile and posPos -- components, then the final two components should be the same as well, -- but since this can be hard to enforce the program should not rely too -- much on the last two components; they are mainly there to improve -- error messages for the user. -- -- Note the invariant which positions have to satisfy: -- positionInvariant. data Position' a Pn :: !a -> !Word32 -> !Word32 -> !Word32 -> Position' a -- | File. [srcFile] :: Position' a -> !a -- | Position, counting from 1. [posPos] :: Position' a -> !Word32 -- | Line number, counting from 1. [posLine] :: Position' a -> !Word32 -- | Column number, counting from 1. [posCol] :: Position' a -> !Word32 type SrcFile = Maybe RangeFile -- | File information used in the Position, Interval and -- Range types. data RangeFile RangeFile :: !AbsolutePath -> !Maybe (TopLevelModuleName' Range) -> RangeFile -- | The file's path. [rangeFilePath] :: RangeFile -> !AbsolutePath -- | The file's top-level module name (if applicable). -- -- This field is optional, but some things may break if the field is not -- instantiated with an actual top-level module name. For instance, the -- Eq and Ord instances only make use of this field. -- -- The field uses Maybe rather than Maybe because it should -- be possible to instantiate it with something that is not yet defined -- (see parseSource). -- -- This '(TopLevelModuleName' Range)' should not contain a range. [rangeFileName] :: RangeFile -> !Maybe (TopLevelModuleName' Range) -- | A smart constructor for RangeFile. mkRangeFile :: AbsolutePath -> Maybe (TopLevelModuleName' Range) -> RangeFile positionInvariant :: Position' a -> Bool -- | The first position in a file: position 1, line 1, column 1. startPos :: Maybe RangeFile -> Position -- | The first position in a file: position 1, line 1, column 1. startPos' :: a -> Position' a -- | Advance the position by one character. A newline character -- ('n') moves the position to the first character in the next -- line. Any other character moves the position to the next column. movePos :: Position' a -> Char -> Position' a -- | Advance the position by a string. -- --
-- movePosByString = foldl' movePos --movePosByString :: Foldable t => Position' a -> t Char -> Position' a -- | Backup the position by one character. -- -- Precondition: The character must not be 'n'. backupPos :: Position' a -> Position' a type Interval = Interval' SrcFile type IntervalWithoutFile = Interval' () -- | An interval. The iEnd position is not included in the -- interval. -- -- Note the invariant which intervals have to satisfy: -- intervalInvariant. data Interval' a Interval :: a -> !PositionWithoutFile -> !PositionWithoutFile -> Interval' a intervalInvariant :: Ord a => Interval' a -> Bool iStart :: Interval' a -> Position' a iEnd :: Interval' a -> Position' a -- | Converts a file name and two positions to an interval. Sort the -- positions ascendingly. posToInterval :: a -> PositionWithoutFile -> PositionWithoutFile -> Interval' a getIntervalFile :: Interval' a -> a -- | The length of an interval. iLength :: Interval' a -> Word32 -- | Finds the least interval which covers the arguments. fuseIntervals :: IntervalWithoutFile -> IntervalWithoutFile -> IntervalWithoutFile type Range = Range' SrcFile type RangeWithoutFile = Range' () -- | A range is a file name, plus a sequence of intervals, assumed to point -- to the given file. The intervals should be consecutive and separated. -- -- Note the invariant which ranges have to satisfy: -- rangeInvariant. data Range' a NoRange :: Range' a Range :: !a -> Seq IntervalWithoutFile -> Range' a -- | Range invariant. rangeInvariant :: Ord a => Range' a -> Bool -- | Are the intervals consecutive and separated, do they all point to the -- same file, and do they satisfy the interval invariant? consecutiveAndSeparated :: Ord a => [Interval' a] -> Bool -- | Turns a file name plus a list of intervals into a range. -- -- Precondition: consecutiveAndSeparated. intervalsToRange :: a -> [IntervalWithoutFile] -> Range' a -- | Converts a file name and an interval to a range. intervalToRange :: a -> IntervalWithoutFile -> Range' a -- | Range pointing to the first position in the given file. rangeFromAbsolutePath :: AbsolutePath -> Range -- | The intervals that make up the range. The intervals are consecutive -- and separated (consecutiveAndSeparated). rangeIntervals :: Range' a -> [IntervalWithoutFile] -- | The file the range is pointing to. rangeFile :: Range -> SrcFile -- | The range's top-level module name, if any. -- -- If there is no range, then Nothing is returned. If there is a -- range without a module name, then Just Nothing -- is returned. rangeModule' :: Range -> Maybe (Maybe (TopLevelModuleName' Range)) -- | The range's top-level module name, if any. rangeModule :: Range -> Maybe (TopLevelModuleName' Range) -- | Conflate a range to its right margin. rightMargin :: Range -> Range -- | Ranges between two unknown positions noRange :: Range' a -- | Converts two positions to a range. -- -- Precondition: The positions have to point to the same file. posToRange :: Position' a -> Position' a -> Range' a -- | Converts a file name and two positions to a range. posToRange' :: a -> PositionWithoutFile -> PositionWithoutFile -> Range' a -- | The initial position in the range, if any. rStart :: Range' a -> Maybe (Position' a) -- | The initial position in the range, if any. rStart' :: Range' a -> Maybe PositionWithoutFile -- | The position after the final position in the range, if any. rEnd :: Range' a -> Maybe (Position' a) -- | The position after the final position in the range, if any. rEnd' :: Range' a -> Maybe PositionWithoutFile -- | Converts a range to an interval, if possible. Note that the -- information about the source file is lost. rangeToInterval :: Range' a -> Maybe IntervalWithoutFile -- | Converts a range to an interval, if possible. rangeToIntervalWithFile :: Range' a -> Maybe (Interval' a) -- | Returns the shortest continuous range containing the given one. continuous :: Range' a -> Range' a -- | Removes gaps between intervals on the same line. continuousPerLine :: Ord a => Range' a -> Range' a -- | Wrapper to indicate that range should be printed. newtype PrintRange a PrintRange :: a -> PrintRange a -- | Things that have a range are instances of this class. class HasRange a getRange :: HasRange a => a -> Range ($dmgetRange) :: forall (t :: Type -> Type) b. (HasRange a, Foldable t, HasRange b, t b ~ a) => a -> Range -- | Things that have a RangeWithoutFile are instances of this -- class. class HasRangeWithoutFile a getRangeWithoutFile :: HasRangeWithoutFile a => a -> RangeWithoutFile ($dmgetRangeWithoutFile) :: forall (t :: Type -> Type) b. (HasRangeWithoutFile a, Foldable t, HasRangeWithoutFile b, t b ~ a) => a -> RangeWithoutFile -- | If it is also possible to set the range, this is the class. -- -- Instances should satisfy getRange (setRange r x) == -- r. class HasRange a => SetRange a setRange :: SetRange a => Range -> a -> a ($dmsetRange) :: forall (f :: Type -> Type) b. (SetRange a, Functor f, SetRange b, f b ~ a) => Range -> a -> a -- | Killing the range of an object sets all range information to -- noRange. class KillRange a killRange :: KillRange a => KillRangeT a ($dmkillRange) :: forall (f :: Type -> Type) b. (KillRange a, Functor f, KillRange b, f b ~ a) => KillRangeT a type KillRangeT a = a -> a -- | Remove ranges in keys and values of a map. killRangeMap :: (KillRange k, KillRange v) => KillRangeT (Map k v) class KILLRANGE t (b :: Bool) killRangeN :: KILLRANGE t b => t -> t -- | x `withRangeOf` y sets the range of x to the range -- of y. withRangeOf :: (SetRange t, HasRange u) => t -> u -> t -- | Precondition: The ranges must point to the same file (or be empty). fuseRange :: (HasRange u, HasRange t) => u -> t -> Range -- | fuseRanges r r' unions the ranges r and r'. -- -- Meaning it finds the least range r0 that covers r -- and r'. -- -- Precondition: The ranges must point to the same file (or be empty). fuseRanges :: Ord a => Range' a -> Range' a -> Range' a -- | beginningOf r is an empty range (a single, empty interval) -- positioned at the beginning of r. If r does not have -- a beginning, then noRange is returned. beginningOf :: Range -> Range -- | beginningOfFile r is an empty range (a single, empty -- interval) at the beginning of r's starting position's file. -- If there is no such position, then an empty range is returned. beginningOfFile :: Range -> Range -- | Interleaves two streams of ranged elements -- -- It will report the conflicts as a list of conflicting pairs. In case -- of conflict, the element with the earliest start position is placed -- first. In case of a tie, the element with the earliest ending position -- is placed first. If both tie, the element from the first list is -- placed first. interleaveRanges :: HasRangeWithoutFile a => [a] -> [a] -> ([a], [(a, a)]) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Position.Interval' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Position.Position' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Position.PrintRange a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Position.Range' a) instance GHC.Classes.Eq Agda.Syntax.Position.RangeFile instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Position.Interval' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Position.Position' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Position.Range' instance GHC.Internal.Base.Functor Agda.Syntax.Position.Interval' instance GHC.Internal.Base.Functor Agda.Syntax.Position.Position' instance GHC.Internal.Base.Functor Agda.Syntax.Position.Range' instance GHC.Internal.Generics.Generic (Agda.Syntax.Position.Interval' a) instance GHC.Internal.Generics.Generic (Agda.Syntax.Position.Position' a) instance GHC.Internal.Generics.Generic (Agda.Syntax.Position.Range' a) instance GHC.Internal.Generics.Generic Agda.Syntax.Position.RangeFile instance Agda.Syntax.Position.HasRange GHC.Types.Bool instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (GHC.Internal.Data.Either.Either a b) instance Agda.Syntax.Position.HasRange Agda.Syntax.Position.Interval instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange [a] instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Utils.List2.List2 a) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Utils.Set1.Set1 a) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Utils.List1.List1 a) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Position.PrintRange a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Position.Range instance Agda.Syntax.Position.HasRange (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' Agda.Syntax.Position.Range) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (a, b) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b, Agda.Syntax.Position.HasRange c) => Agda.Syntax.Position.HasRange (a, b, c) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b, Agda.Syntax.Position.HasRange c, Agda.Syntax.Position.HasRange d) => Agda.Syntax.Position.HasRange (a, b, c, d) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b, Agda.Syntax.Position.HasRange c, Agda.Syntax.Position.HasRange d, Agda.Syntax.Position.HasRange e) => Agda.Syntax.Position.HasRange (a, b, c, d, e) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b, Agda.Syntax.Position.HasRange c, Agda.Syntax.Position.HasRange d, Agda.Syntax.Position.HasRange e, Agda.Syntax.Position.HasRange f) => Agda.Syntax.Position.HasRange (a, b, c, d, e, f) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b, Agda.Syntax.Position.HasRange c, Agda.Syntax.Position.HasRange d, Agda.Syntax.Position.HasRange e, Agda.Syntax.Position.HasRange f, Agda.Syntax.Position.HasRange g) => Agda.Syntax.Position.HasRange (a, b, c, d, e, f, g) instance Agda.Syntax.Position.HasRange () instance Agda.Syntax.Position.HasRangeWithoutFile GHC.Types.Bool instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b) => Agda.Syntax.Position.HasRangeWithoutFile (GHC.Internal.Data.Either.Either a b) instance Agda.Syntax.Position.HasRangeWithoutFile Agda.Syntax.Position.IntervalWithoutFile instance Agda.Syntax.Position.HasRangeWithoutFile a => Agda.Syntax.Position.HasRangeWithoutFile [a] instance Agda.Syntax.Position.HasRangeWithoutFile a => Agda.Syntax.Position.HasRangeWithoutFile (Agda.Utils.List2.List2 a) instance Agda.Syntax.Position.HasRangeWithoutFile a => Agda.Syntax.Position.HasRangeWithoutFile (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Position.HasRangeWithoutFile a => Agda.Syntax.Position.HasRangeWithoutFile (Agda.Utils.Set1.Set1 a) instance Agda.Syntax.Position.HasRangeWithoutFile a => Agda.Syntax.Position.HasRangeWithoutFile (Agda.Utils.List1.List1 a) instance Agda.Syntax.Position.HasRangeWithoutFile Agda.Syntax.Position.RangeWithoutFile instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b) => Agda.Syntax.Position.HasRangeWithoutFile (a, b) instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b, Agda.Syntax.Position.HasRangeWithoutFile c) => Agda.Syntax.Position.HasRangeWithoutFile (a, b, c) instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b, Agda.Syntax.Position.HasRangeWithoutFile c, Agda.Syntax.Position.HasRangeWithoutFile d) => Agda.Syntax.Position.HasRangeWithoutFile (a, b, c, d) instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b, Agda.Syntax.Position.HasRangeWithoutFile c, Agda.Syntax.Position.HasRangeWithoutFile d, Agda.Syntax.Position.HasRangeWithoutFile e) => Agda.Syntax.Position.HasRangeWithoutFile (a, b, c, d, e) instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b, Agda.Syntax.Position.HasRangeWithoutFile c, Agda.Syntax.Position.HasRangeWithoutFile d, Agda.Syntax.Position.HasRangeWithoutFile e, Agda.Syntax.Position.HasRangeWithoutFile f) => Agda.Syntax.Position.HasRangeWithoutFile (a, b, c, d, e, f) instance (Agda.Syntax.Position.HasRangeWithoutFile a, Agda.Syntax.Position.HasRangeWithoutFile b, Agda.Syntax.Position.HasRangeWithoutFile c, Agda.Syntax.Position.HasRangeWithoutFile d, Agda.Syntax.Position.HasRangeWithoutFile e, Agda.Syntax.Position.HasRangeWithoutFile f, Agda.Syntax.Position.HasRangeWithoutFile g) => Agda.Syntax.Position.HasRangeWithoutFile (a, b, c, d, e, f, g) instance Agda.Syntax.Position.HasRangeWithoutFile () instance Agda.Syntax.Position.KILLRANGE t (Agda.Utils.TypeLevel.IsBase t) => Agda.Syntax.Position.KILLRANGE (a -> t) 'GHC.Types.False instance (Agda.Utils.TypeLevel.IsBase t GHC.Types.~ 'GHC.Types.True) => Agda.Syntax.Position.KILLRANGE t 'GHC.Types.True instance Agda.Syntax.Position.KillRange GHC.Types.Bool instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Utils.Permutation.Drop a) instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (GHC.Internal.Data.Either.Either a b) instance Agda.Syntax.Position.KillRange GHC.Types.Int instance Agda.Syntax.Position.KillRange GHC.Num.Integer.Integer instance Agda.Syntax.Position.KillRange GHC.Internal.Base.String instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange [a] instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Utils.List2.List2 a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Data.Map.Internal.Map k a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Data.Strict.Maybe.Maybe a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (GHC.Internal.Maybe.Maybe a) instance (GHC.Classes.Ord a, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Agda.Utils.Set1.Set1 a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Utils.List1.List1 a) instance Agda.Syntax.Position.KillRange Agda.Utils.Permutation.Permutation instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Position.PrintRange a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Position.Range instance (GHC.Classes.Ord a, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Data.Set.Internal.Set a) instance Agda.Syntax.Position.KillRange (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' Agda.Syntax.Position.Range) instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (a, b) instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b, Agda.Syntax.Position.KillRange c) => Agda.Syntax.Position.KillRange (a, b, c) instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b, Agda.Syntax.Position.KillRange c, Agda.Syntax.Position.KillRange d) => Agda.Syntax.Position.KillRange (a, b, c, d) instance Agda.Syntax.Position.KillRange () instance Agda.Syntax.Position.KillRange GHC.Internal.Base.Void instance GHC.Classes.Eq a => GHC.Internal.Base.Monoid (Agda.Syntax.Position.Range' a) instance Control.DeepSeq.NFData Agda.Syntax.Position.Interval instance Control.DeepSeq.NFData Agda.Syntax.Position.IntervalWithoutFile instance Control.DeepSeq.NFData Agda.Syntax.Position.Position instance Control.DeepSeq.NFData Agda.Syntax.Position.PositionWithoutFile instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Position.Range' a) instance Control.DeepSeq.NFData Agda.Syntax.Position.RangeFile instance Agda.Utils.Null.Null (Agda.Syntax.Position.Range' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Position.Interval' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Position.Position' a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Position.PrintRange a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Position.Range' a) instance GHC.Classes.Ord Agda.Syntax.Position.RangeFile instance GHC.Classes.Eq a => GHC.Internal.Base.Semigroup (Agda.Syntax.Position.Range' a) instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange [a] instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Position.PrintRange a) instance Agda.Syntax.Position.SetRange Agda.Syntax.Position.Range instance Agda.Syntax.Position.SetRange (Agda.Syntax.TopLevelModuleName.Boot.TopLevelModuleName' Agda.Syntax.Position.Range) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Position.Interval' a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Position.Position' a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Position.Range' a) instance GHC.Internal.Show.Show Agda.Syntax.Position.RangeFile instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Position.Interval' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Position.Position' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Position.Range' module Agda.Syntax.Common.Aspect data Induction Inductive :: Induction CoInductive :: Induction data Aspect Comment :: Aspect Keyword :: Aspect String :: Aspect Number :: Aspect Hole :: Aspect -- | Symbols like forall, =, ->, etc. Symbol :: Aspect -- | Things like Set and Prop. PrimitiveType :: Aspect -- | Is the name an operator part? Name :: Maybe NameKind -> Bool -> Aspect -- | Text occurring in pragmas that does not have a more specific aspect. Pragma :: Aspect -- | Non-code contents in literate Agda Background :: Aspect -- | Delimiters used to separate the Agda code blocks from the other -- contents in literate Agda Markup :: Aspect -- | NameKinds are figured out during scope checking. data NameKind -- | Bound variable. Bound :: NameKind -- | Generalizable variable. (This includes generalizable variables that -- have been generalized). Generalizable :: NameKind -- | Inductive or coinductive constructor. Constructor :: Induction -> NameKind Datatype :: NameKind -- | Record field. Field :: NameKind Function :: NameKind -- | Module name. Module :: NameKind Postulate :: NameKind -- | Primitive. Primitive :: NameKind -- | Record type. Record :: NameKind -- | Named argument, like x in {x = v} Argument :: NameKind -- | Macro. Macro :: NameKind -- | Other aspects, generated by type checking. (These can overlap with -- each other and with Aspects.) data OtherAspect Error :: OtherAspect -- | A warning that is considered fatal in the end. ErrorWarning :: OtherAspect DottedPattern :: OtherAspect UnsolvedMeta :: OtherAspect -- | Unsolved constraint not connected to meta-variable. This could for -- instance be an emptyness constraint. UnsolvedConstraint :: OtherAspect TerminationProblem :: OtherAspect PositivityProblem :: OtherAspect -- | Used for highlighting unreachable clauses, unreachable RHS (because of -- an absurd pattern), etc. Deadcode :: OtherAspect -- | Used for shadowed repeated variable names in telescopes. ShadowingInTelescope :: OtherAspect CoverageProblem :: OtherAspect -- | When this constructor is used it is probably a good idea to include a -- note explaining why the pattern is incomplete. IncompletePattern :: OtherAspect -- | Code which is being type-checked. TypeChecks :: OtherAspect -- | Function declaration without matching definition. MissingDefinition :: OtherAspect -- | Unusable instance etc. InstanceProblem :: OtherAspect -- | Nothing serious, just a beauty flaw. CosmeticProblem :: OtherAspect CatchallClause :: OtherAspect ConfluenceProblem :: OtherAspect -- | Syntactic aspects of the code. (These cannot overlap.) -- -- Meta information which can be associated with a character/character -- range. data Aspects Aspects :: Maybe Aspect -> Set OtherAspect -> String -> Maybe DefinitionSite -> !TokenBased -> Aspects [aspect] :: Aspects -> Maybe Aspect [otherAspects] :: Aspects -> Set OtherAspect -- | This note, if not null, can be displayed as a tool-tip or something -- like that. It should contain useful information about the range (like -- the module containing a certain identifier, or the fixity of an -- operator). [note] :: Aspects -> String -- | The definition site of the annotated thing, if applicable and known. [definitionSite] :: Aspects -> Maybe DefinitionSite -- | Is this entry token-based? [tokenBased] :: Aspects -> !TokenBased data DefinitionSite DefinitionSite :: TopLevelModuleName' Range -> Int -> Bool -> Maybe String -> DefinitionSite -- | The defining module. [defSiteModule] :: DefinitionSite -> TopLevelModuleName' Range -- | The file position in that module. File positions are counted from 1. [defSitePos] :: DefinitionSite -> Int -- | Has this DefinitionSite been created at the defining site of -- the name? [defSiteHere] :: DefinitionSite -> Bool -- | A pretty name for the HTML linking. [defSiteAnchor] :: DefinitionSite -> Maybe String -- | Is the highlighting "token-based", i.e. based only on information from -- the lexer? data TokenBased TokenBased :: TokenBased NotOnlyTokenBased :: TokenBased instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.Aspect.OtherAspect instance GHC.Internal.Enum.Enum Agda.Syntax.Common.Aspect.OtherAspect instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.Aspect instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.Aspects instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.DefinitionSite instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.Induction instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.NameKind instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.OtherAspect instance GHC.Classes.Eq Agda.Syntax.Common.Aspect.TokenBased instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Aspect.Aspect instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Aspect.Aspects instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Aspect.DefinitionSite instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Aspect.NameKind instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Aspect.OtherAspect instance Control.DeepSeq.NFData Agda.Syntax.Common.Aspect.Induction instance Control.DeepSeq.NFData Agda.Syntax.Common.Aspect.NameKind instance GHC.Classes.Ord Agda.Syntax.Common.Aspect.Induction instance GHC.Classes.Ord Agda.Syntax.Common.Aspect.OtherAspect instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Aspect.Aspect instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Aspect.NameKind instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.Aspect instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.Aspects instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.DefinitionSite instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.Induction instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.NameKind instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.OtherAspect instance GHC.Internal.Show.Show Agda.Syntax.Common.Aspect.TokenBased -- | Pretty printing functions. module Agda.Syntax.Common.Pretty -- |
-- a ? b = hang a 2 b --(>) :: Doc -> Doc -> Doc infixl 6 > -- | align max rows lays out the elements of rows in two -- columns, with the second components aligned. The alignment column of -- the second components is at most max characters to the right -- of the left-most column. -- -- Precondition: max > 0. align :: Int -> [(String, Doc)] -> Doc -- | Attach a simple Aspect, rather than a full set of -- Aspects, to a document. annotateAspect :: Aspect -> Doc -> Doc braces :: Doc -> Doc brackets :: Doc -> Doc colon :: Doc comma :: Doc dot :: Doc doubleQuotes :: Doc -> Doc equals :: Doc fsep :: Foldable t => t Doc -> Doc fwords :: String -> Doc hcat :: Foldable t => t Doc -> Doc hlComment :: Doc -> Doc hlHole :: Doc -> Doc hlKeyword :: Doc -> Doc hlNumber :: Doc -> Doc hlPragma :: Doc -> Doc hlPrimitiveType :: Doc -> Doc hlString :: Doc -> Doc hlSymbol :: Doc -> Doc hsep :: Foldable t => t Doc -> Doc -- | Separate, but only if both separees are not null. hsepWith :: Doc -> Doc -> Doc -> Doc lbrace :: Doc lbrack :: Doc lparen :: Doc -- | Apply parens to Doc if boolean is true. mparens :: Bool -> Doc -> Doc -- | Handles strings with newlines properly (preserving indentation) multiLineText :: String -> Doc parens :: Doc -> Doc -- | Only wrap in parens if not empty parensNonEmpty :: Doc -> Doc pluralS :: Sized a => a -> Doc -> Doc -- | Used for with-like telescopes prefixedThings :: Doc -> [Doc] -> Doc -- | Pretty print a single association. prettyAssign :: (Pretty k, Pretty v) => (k, v) -> Doc prettyLineColumn :: Position' a -> Doc -- | Comma separated list, without the brackets. prettyList_ :: Pretty a => [a] -> Doc -- | Pretty print an association list. prettyMap :: (Pretty k, Pretty v) => [(k, v)] -> Doc -- | Pretty print a set. prettySet :: Pretty a => [a] -> Doc -- | Use instead of show when printing to world. prettyShow :: Pretty a => a -> String -- |
-- pshow = text . show --pshow :: Show a => a -> Doc punctuate :: Foldable t => Doc -> t Doc -> [Doc] pwords :: String -> [Doc] quotes :: Doc -> Doc rbrace :: Doc rbrack :: Doc rparen :: Doc semi :: Doc sep :: Foldable t => t Doc -> Doc singPlural :: Sized a => a -> c -> c -> c space :: Doc -- | Return empty for empty strings. textNonEmpty :: String -> Doc vcat :: Foldable t => t Doc -> Doc vsep :: [Doc] -> Doc -- | The type of documents. We use documents annotated by Aspects to -- record syntactic highlighting information that is generated during -- pretty-printing. type Doc = Doc Aspects -- | While Show is for rendering data in Haskell syntax, -- Pretty is for displaying data to the world, i.e., the user and -- the environment. -- -- Atomic data has no inner document structure, so just implement -- pretty as pretty a = text $ ... a .... class Pretty a pretty :: Pretty a => a -> Doc prettyPrec :: Pretty a => Int -> a -> Doc prettyList :: Pretty a => [a] -> Doc -- | Above, except that if the last line of the first argument stops at -- least one position before the first line of the second begins, these -- two lines are overlapped. For example: -- --
-- text "hi" $$ nest 5 (text "there") ---- -- lays out as -- --
-- hi there ---- -- rather than -- --
-- hi -- there ---- -- $$ is associative, with identity empty, and also -- satisfies -- -- ($$) :: Doc a -> Doc a -> Doc a infixl 5 $$ -- | Above, with no overlapping. $+$ is associative, with identity -- empty. ($+$) :: Doc a -> Doc a -> Doc a infixl 5 $+$ -- | Beside, separated by space, unless one of the arguments is -- empty. <+> is associative, with identity -- empty. (<+>) :: Doc a -> Doc a -> Doc a infixl 6 <+> -- | Attach an annotation to a document. annotate :: a -> Doc a -> Doc a -- | Either hcat or vcat. cat :: [Doc a] -> Doc a -- | A document of height and width 1, containing a literal character. char :: Char -> Doc a double :: Double -> Doc a -- | "Paragraph fill" version of cat. fcat :: [Doc a] -> Doc a float :: Float -> Doc a -- | The general rendering interface. Please refer to the Style -- and Mode types for a description of rendering mode, line -- length and ribbons. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc b -> a -- | The general rendering interface, supporting annotations. Please refer -- to the Style and Mode types for a description of -- rendering mode, line length and ribbons. fullRenderAnn :: Mode -> Int -> Float -> (AnnotDetails b -> a -> a) -> a -> Doc b -> a -- |
-- hang d1 n d2 = sep [d1, nest n d2] --hang :: Doc a -> Int -> Doc a -> Doc a int :: Int -> Doc a integer :: Integer -> Doc a -- | Returns True if the document is empty isEmpty :: Doc a -> Bool -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). nest satisfies the laws: -- --
nest 0 x = x
nest k (nest k' x) = nest (k+k') -- x
nest k (x <> y) = nest k z -- <> nest k y
nest k (x $$ y) = nest k x $$ -- nest k y
nest k empty = empty
-- >>> [1,2,3] <> [4,5,6] -- [1,2,3,4,5,6] ---- --
-- >>> Just [1, 2, 3] <> Just [4, 5, 6] -- Just [1,2,3,4,5,6] ---- --
-- >>> putStr "Hello, " <> putStrLn "World!" -- Hello, World! --(<>) :: Semigroup a => a -> a -> a infixr 6 <> instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.FileName.AbsolutePath instance Agda.Syntax.Common.Pretty.Pretty GHC.Types.Bool instance Agda.Syntax.Common.Pretty.Pretty GHC.Types.Char instance (a GHC.Types.~ Agda.Syntax.Common.Aspect.Aspects) => Agda.Syntax.Common.Pretty.Pretty (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance Agda.Syntax.Common.Pretty.Pretty GHC.Types.Double instance Agda.Syntax.Common.Pretty.Pretty GHC.Types.Int instance Agda.Syntax.Common.Pretty.Pretty GHC.Internal.Int.Int32 instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Data.IntMap.Internal.IntMap a) instance Agda.Syntax.Common.Pretty.Pretty Data.IntSet.Internal.IntSet instance Agda.Syntax.Common.Pretty.Pretty GHC.Num.Integer.Integer instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Position.IntervalWithoutFile instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Position.Interval' (Data.Strict.Maybe.Maybe a)) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty [a] instance (Agda.Syntax.Common.Pretty.Pretty k, Agda.Syntax.Common.Pretty.Pretty v) => Agda.Syntax.Common.Pretty.Pretty (Data.Map.Internal.Map k v) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Utils.List1.List1 a) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Position.Position' (Data.Strict.Maybe.Maybe a)) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Position.PositionWithoutFile instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.Syntax.Position.HasRange a) => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Position.PrintRange a) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Position.Range' (Data.Strict.Maybe.Maybe a)) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Position.RangeFile instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Data.Set.Internal.Set a) instance Agda.Syntax.Common.Pretty.Pretty Data.Text.Internal.Text instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.Syntax.Common.Pretty.Pretty b) => Agda.Syntax.Common.Pretty.Pretty (a, b) instance Agda.Syntax.Common.Pretty.Pretty () instance Agda.Syntax.Common.Pretty.Pretty GHC.Internal.Word.Word32 instance Agda.Syntax.Common.Pretty.Pretty GHC.Internal.Word.Word64 -- | Time-related utilities. module Agda.Utils.Time -- | Timestamps. type ClockTime = UTCTime -- | The current time. getClockTime :: IO ClockTime getCPUTime :: MonadIO m => m CPUTime -- | Measure the time of a computation. Of course, does not work with -- exceptions. measureTime :: MonadIO m => m a -> m (a, CPUTime) -- | CPU time in pico (10^-12) seconds. newtype CPUTime CPUTime :: Integer -> CPUTime fromMilliseconds :: Integer -> CPUTime instance GHC.Internal.Enum.Enum Agda.Utils.Time.CPUTime instance GHC.Classes.Eq Agda.Utils.Time.CPUTime instance GHC.Internal.Real.Integral Agda.Utils.Time.CPUTime instance Control.DeepSeq.NFData Agda.Utils.Time.CPUTime instance GHC.Internal.Num.Num Agda.Utils.Time.CPUTime instance GHC.Classes.Ord Agda.Utils.Time.CPUTime instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Time.CPUTime instance GHC.Internal.Real.Real Agda.Utils.Time.CPUTime instance GHC.Internal.Show.Show Agda.Utils.Time.CPUTime -- | Parser combinators with support for left recursion, following -- Johnson's "Memoization in Top-Down Parsing". -- -- This implementation is based on an implementation due to Atkey -- (attached to an edlambda-members mailing list message from 2011-02-15 -- titled 'Slides for "Introduction to Parser Combinators"'). -- -- Note that non-memoised left recursion is not guaranteed to work. -- -- The code contains an important deviation from Johnson's paper: the -- check for subsumed results is not included. This means that one can -- get the same result multiple times when parsing using ambiguous -- grammars. As an example, parsing the empty string using S ∷= ε | -- ε succeeds twice. This change also means that parsing fails to -- terminate for some cyclic grammars that would otherwise be handled -- successfully, such as S ∷= S | ε. However, the library is not -- intended to handle infinitely ambiguous grammars. (It is unclear to -- the author of this module whether the change leads to more -- non-termination for grammars that are not cyclic.) module Agda.Utils.Parser.MemoisedCPS class (Functor p, Applicative p, Alternative p, Monad p) => ParserClass (p :: Type -> Type) k r tok | p -> k, p -> r, p -> tok -- | Runs the parser. parse :: ParserClass p k r tok => p a -> [tok] -> [a] -- | Tries to print the parser, or returns empty, depending on the -- implementation. This function might not terminate. grammar :: (ParserClass p k r tok, Show k) => p a -> Doc -- | Parses a token satisfying the given predicate. The computed value is -- returned. sat' :: ParserClass p k r tok => (tok -> Maybe a) -> p a -- | Uses the given function to modify the printed representation (if any) -- of the given parser. annotate :: ParserClass p k r tok => (DocP -> DocP) -> p a -> p a -- | Memoises the given parser. -- -- Every memoised parser must be annotated with a unique key. -- (Parametrised parsers must use distinct keys for distinct inputs.) memoise :: ParserClass p k r tok => k -> p r -> p r -- | Memoises the given parser, but only if printing, not if parsing. -- -- Every memoised parser must be annotated with a unique key. -- (Parametrised parsers must use distinct keys for distinct inputs.) memoiseIfPrinting :: ParserClass p k r tok => k -> p r -> p r -- | Parses a token satisfying the given predicate. sat :: ParserClass p k r tok => (tok -> Bool) -> p tok -- | Parses a single token. token :: ParserClass p k r tok => p tok -- | Parses a given token. tok :: (ParserClass p k r tok, Eq tok, Show tok) => tok -> p tok -- | Uses the given document as the printed representation of the given -- parser. The document's precedence is taken to be atomP. doc :: ParserClass p k r tok => Doc -> p a -> p a -- | Documents paired with precedence levels. type DocP = (Doc, Int) -- | Precedence of >>=. bindP :: Int -- | Precedence of |. choiceP :: Int -- | Precedence of *. seqP :: Int -- | Precedence of ⋆ and +. starP :: Int -- | Precedence of atoms. atomP :: Int -- | The parser type. -- -- The parameters of the type Parser k r tok a have the -- following meanings: -- --
-- complete g = snd $ last $ completeIter g --completeIter :: (Eq e, Null e, SemiRing e, Ord n) => Graph n e -> [(Graph n e, Graph n e)] instance (GHC.Classes.Eq n, GHC.Classes.Eq e) => GHC.Classes.Eq (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Edge n e) instance (GHC.Classes.Eq n, GHC.Classes.Eq e) => GHC.Classes.Eq (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n e) instance GHC.Classes.Eq (Agda.Utils.Graph.AdjacencyMap.Unidirectional.WithUniqueInt n) instance GHC.Internal.Base.Functor (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Edge n) instance GHC.Internal.Base.Functor (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n) instance GHC.Internal.Base.Functor Agda.Utils.Graph.AdjacencyMap.Unidirectional.WithUniqueInt instance (GHC.Classes.Ord n, GHC.Classes.Ord e) => GHC.Classes.Ord (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Edge n e) instance GHC.Classes.Ord (Agda.Utils.Graph.AdjacencyMap.Unidirectional.WithUniqueInt n) instance (Agda.Syntax.Common.Pretty.Pretty n, Agda.Syntax.Common.Pretty.Pretty e) => Agda.Syntax.Common.Pretty.Pretty (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Edge n e) instance (GHC.Classes.Ord n, Agda.Syntax.Common.Pretty.Pretty n, Agda.Syntax.Common.Pretty.Pretty e) => Agda.Syntax.Common.Pretty.Pretty (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n e) instance Agda.Syntax.Common.Pretty.Pretty n => Agda.Syntax.Common.Pretty.Pretty (Agda.Utils.Graph.AdjacencyMap.Unidirectional.WithUniqueInt n) instance (GHC.Internal.Show.Show n, GHC.Internal.Show.Show e) => GHC.Internal.Show.Show (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Edge n e) instance (GHC.Classes.Ord n, GHC.Internal.Show.Show n, GHC.Internal.Show.Show e) => GHC.Internal.Show.Show (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n e) instance GHC.Internal.Show.Show n => GHC.Internal.Show.Show (Agda.Utils.Graph.AdjacencyMap.Unidirectional.WithUniqueInt n) module Agda.Utils.Graph.TopSort -- | topoligical sort with smallest-numbered available vertex first | -- input: nodes, edges | output is Nothing if the graph is not a DAG -- Note: should be stable to preserve order of generalizable variables. -- Algorithm due to Richard Eisenberg, and works by walking over the list -- left-to-right and moving each node the minimum distance left to -- guarantee topological ordering. topSort :: Ord n => Set n -> [(n, n)] -> Maybe [n] module Agda.Utils.CallStack -- | Transform a CallStack by filtering each CallSite filterCallStack :: CallSiteFilter -> CallStack -> CallStack -- | Get the most recent CallSite in a CallStack, if -- there is one. headCallSite :: CallStack -> Maybe CallSite -- | Transform a CallStack by transforming its list of -- CallSite overCallSites :: ([CallSite] -> [CallSite]) -> CallStack -> CallStack -- | Pops n entries off a CallStack using popCallStack. -- Note that frozen callstacks are unaffected. popnCallStack :: Word -> CallStack -> CallStack -- | The same as the un-exported internal function in GHC.Exceptions -- (prettyCallStackLines) Prints like: doFoo, called at -- foo.hs:190:24 in main:Main prettyCallSite :: CallSite -> String -- | Pretty-print a CallStack. This has a few differences from -- GHC.Stack.prettyCallStackLines. We omit the "CallStack (from -- GetCallStack)" header line for brevity. If there is only one entry -- (which is common, due to the manual nature of the -- HasCallStack constraint), shows the entry on one line. If -- there are multiple, then the following lines are indented. prettyCallStack :: CallStack -> String -- | CallStack comprising only the most recent CallSite truncatedCallStack :: CallStack -> CallStack withCallerCallStack :: HasCallStack => (CallStack -> b) -> b withCurrentCallStack :: HasCallStack => (CallStack -> b) -> b withNBackCallStack :: HasCallStack => Word -> (CallStack -> b) -> b -- | Return the current CallStack. -- -- Does *not* include the call-site of callStack. callStack :: HasCallStack => CallStack -- | Pretty print a SrcLoc. prettySrcLoc :: SrcLoc -> String -- | Convert a list of call-sites to a CallStack. fromCallSiteList :: [([Char], SrcLoc)] -> CallStack -- | Extract a list of call-sites from the CallStack. -- -- The list is ordered by most recent call. getCallStack :: CallStack -> [([Char], SrcLoc)] -- | Type of an entry in a CallStack newtype CallSite CallSite :: (SrcFun, SrcLoc) -> CallSite [unCallSite] :: CallSite -> (SrcFun, SrcLoc) -- | Type of a filter for CallSite type CallSiteFilter = CallSite -> Bool -- | Type of the name of a function in a CallSite | e.g. -- proveEverything type SrcFun = String -- | Type of a column of a SrcLoc type SrcLocCol = Int -- | Type of a filename of a SrcLoc | e.g. -- `srcfullAgdaUtilsFoo.hs` type SrcLocFile = String -- | Type of a line number of a SrcLoc type SrcLocLine = Int -- | Type of the module name of a SrcLoc | e.g. Foo type SrcLocModule = String -- | Type of the package name of a SrcLoc | e.g. `Agda-2.…` type SrcLocPackage = String -- | CallStacks are a lightweight method of obtaining a partial -- call-stack at any point in the program. -- -- A function can request its call-site with the HasCallStack -- constraint. For example, we can define -- --
-- putStrLnWithCallStack :: HasCallStack => String -> IO () ---- -- as a variant of putStrLn that will get its call-site and -- print it, along with the string given as argument. We can access the -- call-stack inside putStrLnWithCallStack with -- callStack. -- --
-- >>> :{ -- putStrLnWithCallStack :: HasCallStack => String -> IO () -- putStrLnWithCallStack msg = do -- putStrLn msg -- putStrLn (prettyCallStack callStack) -- :} ---- -- Thus, if we call putStrLnWithCallStack we will get a -- formatted call-stack alongside our string. -- --
-- >>> putStrLnWithCallStack "hello" -- hello -- CallStack (from HasCallStack): -- putStrLnWithCallStack, called at <interactive>:... in interactive:Ghci... ---- -- GHC solves HasCallStack constraints in three steps: -- --
-- interAssocWith f l l' = { (i, f a b) | (i,a) ∈ l and (i,b) ∈ l' } ---- -- Used to combine sparse matrices, it might introduce zero elements if -- f can return zero for non-zero arguments. interAssocWith :: Ord i => (a -> a -> a) -> [(i, a)] -> [(i, a)] -> [(i, a)] -- | mul semiring m1 m2 multiplies matrices m1 and -- m2. Uses the operations of the semiring semiring to -- perform the multiplication. -- -- O(n1 + n2 log n2 + Σ(i <= r1) Σ(j <= c2) d(i,j)) where -- r1 is the number of non-empty rows in m1 and -- c2 is the number of non-empty columns in m2 and -- d(i,j) is the bigger one of the following two quantifies: the -- length of sparse row i in m1 and the length of -- sparse column j in m2. -- -- Given dimensions m1 : r1 × c1 and m2 : r2 × c2, a -- matrix of size r1 × c2 is returned. It is not necessary that -- c1 == r2, the matrices are implicitly patched with zeros to -- match up for multiplication. For sparse matrices, this patching is a -- no-op. mul :: (Ix i, Eq a) => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a transpose :: Transpose a => a -> a -- | diagonal m extracts the diagonal of m. -- -- For non-square matrices, the length of the diagonal is the minimum of -- the dimensions of the matrix. class Diagonal m e | m -> e diagonal :: Diagonal m e => m -> [e] -- | Converts a sparse matrix to a sparse list of rows. O(n) where -- n is the number of non-zero entries of the matrix. -- -- Only non-empty rows are generated. toSparseRows :: Eq i => Matrix i b -> [(i, [(i, b)])] -- | Compute the matrix size of the union of two matrices. supSize :: Ord i => Matrix i a -> Matrix i b -> Size i -- | General pointwise combination function for association lists. O(n1 -- + n2) where ni is the number of non-zero element in -- matrix i. -- -- In zipAssocWith fs gs f g h l l', -- -- fs is possibly more efficient version of mapMaybe -- ( (i, a) -> (i,) $ f a), and same for gs and -- g. zipAssocWith :: Ord i => ([(i, a)] -> [(i, c)]) -> ([(i, b)] -> [(i, c)]) -> (a -> Maybe c) -> (b -> Maybe c) -> (a -> b -> Maybe c) -> [(i, a)] -> [(i, b)] -> [(i, c)] -- | addRow x m adds a new row to m, after the -- rows already existing in the matrix. All elements in the new row get -- set to x. addRow :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b -- | addColumn x m adds a new column to m, after -- the columns already existing in the matrix. All elements in the new -- column get set to x. addColumn :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b instance (GHC.Internal.Real.Integral i, Agda.Termination.Semiring.HasZero b) => Agda.Termination.SparseMatrix.Diagonal (Agda.Termination.SparseMatrix.Matrix i b) b instance GHC.Classes.Eq i => GHC.Classes.Eq (Agda.Termination.SparseMatrix.MIx i) instance (GHC.Classes.Eq i, GHC.Classes.Eq b) => GHC.Classes.Eq (Agda.Termination.SparseMatrix.Matrix i b) instance GHC.Classes.Eq i => GHC.Classes.Eq (Agda.Termination.SparseMatrix.Size i) instance GHC.Internal.Data.Foldable.Foldable (Agda.Termination.SparseMatrix.Matrix i) instance GHC.Internal.Base.Functor (Agda.Termination.SparseMatrix.Matrix i) instance GHC.Internal.Ix.Ix i => GHC.Internal.Ix.Ix (Agda.Termination.SparseMatrix.MIx i) instance GHC.Classes.Ord i => GHC.Classes.Ord (Agda.Termination.SparseMatrix.MIx i) instance (GHC.Classes.Ord i, GHC.Classes.Ord b) => GHC.Classes.Ord (Agda.Termination.SparseMatrix.Matrix i b) instance GHC.Classes.Ord i => GHC.Classes.Ord (Agda.Termination.SparseMatrix.Size i) instance (GHC.Classes.Ord i, Agda.Utils.PartialOrd.PartialOrd a) => Agda.Utils.PartialOrd.PartialOrd (Agda.Termination.SparseMatrix.Matrix i a) instance (GHC.Internal.Real.Integral i, Agda.Termination.Semiring.HasZero b, Agda.Syntax.Common.Pretty.Pretty b) => Agda.Syntax.Common.Pretty.Pretty (Agda.Termination.SparseMatrix.Matrix i b) instance GHC.Internal.Show.Show i => GHC.Internal.Show.Show (Agda.Termination.SparseMatrix.MIx i) instance (GHC.Internal.Real.Integral i, Agda.Termination.Semiring.HasZero b, GHC.Internal.Show.Show i, GHC.Internal.Show.Show b) => GHC.Internal.Show.Show (Agda.Termination.SparseMatrix.Matrix i b) instance GHC.Internal.Show.Show i => GHC.Internal.Show.Show (Agda.Termination.SparseMatrix.Size i) instance Agda.Termination.SparseMatrix.Transpose (Agda.Termination.SparseMatrix.MIx i) instance GHC.Classes.Ord i => Agda.Termination.SparseMatrix.Transpose (Agda.Termination.SparseMatrix.Matrix i b) instance Agda.Termination.SparseMatrix.Transpose (Agda.Termination.SparseMatrix.Size i) instance GHC.Internal.Data.Traversable.Traversable (Agda.Termination.SparseMatrix.Matrix i) -- | An Abstract domain of relative sizes, i.e., differences between size -- of formal function parameter and function argument in recursive call; -- used in the termination checker. module Agda.Termination.Order -- | In the paper referred to above, there is an order R with -- Unknown <= Le <= -- Lt. -- -- This is generalized to Unknown <= 'Decr k' -- where Decr 1 replaces Lt and Decr 0 -- replaces Le. A negative decrease means an increase. The -- generalization allows the termination checker to record an increase by -- 1 which can be compensated by a following decrease by 2 which results -- in an overall decrease. -- -- However, the termination checker of the paper itself terminates -- because there are only finitely many different call-matrices. To -- maintain termination of the terminator we set a cutoff point -- which determines how high the termination checker can count. This -- value should be set by a global or file-wise option. -- -- See Call for more information. -- -- TODO: document orders which are call-matrices themselves. data Order -- | Decrease of callee argument wrt. caller parameter. -- -- The Bool indicates whether the decrease (if any) is usable. -- In any chain, there needs to be one usable decrease. Unusable -- decreases come from SIZELT constraints which are not in inductive -- pattern match or a coinductive copattern match. See issue #2331. -- -- UPDATE: Andreas, 2017-07-26: Feature #2331 is unsound due to size -- quantification in terms. While the infrastructure for usable/unusable -- decrease remains in place, no unusable decreases are generated by -- TermCheck. Decr :: !Bool -> {-# UNPACK #-} !Int -> Order -- | No relation, infinite increase, or increase beyond termination depth. Unknown :: Order -- | Matrix-shaped order, currently UNUSED. Mat :: {-# UNPACK #-} !Matrix Int Order -> Order -- | Smart constructor for Decr k :: Order which cuts off too big -- values. -- -- Possible values for k: - ?cutoff <= k -- <= ?cutoff + 1. decr :: (?cutoff :: CutOff) => Bool -> Int -> Order -- | Raw increase which does not cut off. increase :: Int -> Order -> Order -- | Raw decrease which does not cut off. decrease :: Int -> Order -> Order setUsability :: Bool -> Order -> Order -- | Multiplication of Orders. (Corresponds to sequential -- composition.) (.*.) :: (?cutoff :: CutOff) => Order -> Order -> Order -- | The supremum of a (possibly empty) list of Orders. More -- information (i.e., more decrease) is bigger. Unknown is no -- information, thus, smallest. supremum :: (?cutoff :: CutOff) => [Order] -> Order -- | The infimum of a (non empty) list of Orders. Gets the worst -- information. Unknown is the least element, thus, dominant. infimum :: (?cutoff :: CutOff) => [Order] -> Order -- | We use a record for semiring instead of a type class since implicit -- arguments cannot occur in instance constraints, like instance -- (?cutoff :: Int) => SemiRing Order. orderSemiring :: (?cutoff :: CutOff) => Semiring Order -- | le, lt, decreasing, unknown: for -- backwards compatibility, and for external use. le :: Order -- | Usable decrease. lt :: Order unknown :: Order -- | Smart constructor for matrix shaped orders, avoiding empty and -- singleton matrices. orderMat :: Matrix Int Order -> Order collapseO :: (?cutoff :: CutOff) => Order -> Order nonIncreasing :: Order -> Bool -- | Decreasing and usable? decreasing :: Order -> Bool -- | Matrix-shaped order is decreasing if any diagonal element is -- decreasing. isDecr :: Order -> Bool -- | A partial order, aimed at deciding whether a call graph gets worse -- during the completion. class NotWorse a notWorse :: NotWorse a => a -> a -> Bool isOrder :: (?cutoff :: CutOff) => Order -> Bool instance GHC.Classes.Eq Agda.Termination.Order.Order instance Agda.Termination.Semiring.HasZero Agda.Termination.Order.Order instance (GHC.Classes.Ord i, Agda.Termination.Semiring.HasZero o, Agda.Termination.Order.NotWorse o) => Agda.Termination.Order.NotWorse (Agda.Termination.SparseMatrix.Matrix i o) instance Agda.Termination.Order.NotWorse Agda.Termination.Order.Order instance GHC.Classes.Ord Agda.Termination.Order.Order instance Agda.Utils.PartialOrd.PartialOrd Agda.Termination.Order.Order instance Agda.Syntax.Common.Pretty.Pretty Agda.Termination.Order.Order instance GHC.Internal.Show.Show Agda.Termination.Order.Order module Agda.Termination.CallMatrix -- | Call matrix indices = function argument indices. -- -- Machine integer Int is sufficient, since we cannot index more -- arguments than we have addresses on our machine. type ArgumentIndex = Int -- | Call matrices. -- -- A call matrix for a call f --> g has dimensions ar(g) -- × ar(f). -- -- Each column corresponds to one formal argument of caller f. -- Each row corresponds to one argument in the call to g. -- -- In the presence of dot patterns, a call argument can be related to -- several different formal arguments of f. -- -- See e.g. testsucceedDotPatternTermination.agda: -- --
-- data D : Nat -> Set where -- cz : D zero -- c1 : forall n -> D n -> D (suc n) -- c2 : forall n -> D n -> D n -- -- f : forall n -> D n -> Nat -- f .zero cz = zero -- f .(suc n) (c1 n d) = f n (c2 n d) -- f n (c2 .n d) = f n d -- ---- -- Call matrices (without guardedness) are -- --
-- -1 -1 n < suc n and n < c1 n d -- ? = c2 n d <= c1 n d -- -- = -1 n <= n and n < c2 n d -- ? -1 d < c2 n d -- ---- -- Here is a part of the original documentation for call matrices (kept -- for historical reasons): -- -- This datatype encodes information about a single recursive function -- application. The columns of the call matrix stand for source -- function arguments (patterns). The rows of the matrix stand for -- target function arguments. Element (i, j) in the -- matrix should be computed as follows: -- --
-- setNamedArg a b = updateNamedArg (const b) a --setNamedArg :: NamedArg a -> b -> NamedArg b setOriginArgInfo :: LensArgInfo a => LensSet a Origin setPolarityMod :: LensModality a => LensSet a PolarityModality setQuantityMod :: LensModality a => LensSet a Quantity setRelevanceMod :: LensModality a => LensSet a Relevance shapeIrrelevant :: Relevance shapeIrrelevantToIrrelevant :: Relevance -> Relevance -- | Applied when working on types (unless --experimental-irrelevance). shapeIrrelevantToRelevant :: Relevance -> Relevance -- | splittablePolarity pol == False iff we cannot split on a -- variable of pol. splittablePolarity :: LensModalPolarity a => a -> Bool stringToArgName :: String -> ArgName stringToRawName :: String -> RawName -- | Absorptive element under addition. topCohesion :: Cohesion -- | Absorptive element under addition. topModality :: Modality -- | Absorptive element under addition. topPolarity :: PolarityModality -- | Absorptive element is ω. topQuantity :: Quantity -- | Absorptive element under addition. topRelevance :: Relevance -- | Identity under composition unitCohesion :: Cohesion -- | Identity under composition unitModality :: Modality -- | Identity under composition. unitPolarity :: PolarityModality -- | Identity element under composition unitQuantity :: Quantity -- | Identity element under composition unitRelevance :: Relevance unknownFreeVariables :: FreeVariables unnamed :: a -> Named name a unnamedArg :: ArgInfo -> a -> NamedArg a -- | Thing with no range info. unranged :: a -> Ranged a -- | The functor instance for NamedArg would be ambiguous, so we -- give it another name here. updateNamedArg :: (a -> b) -> NamedArg a -> NamedArg b updateNamedArgA :: Applicative f => (a -> f b) -> NamedArg a -> f (NamedArg b) -- | usableCohesion rel == False iff we cannot use a variable of -- rel. usableCohesion :: LensCohesion a => a -> Bool usableModality :: LensModality a => a -> Bool -- | usablePolarity pol == False iff we cannot use a variable of -- pol. usablePolarity :: LensModalPolarity a => a -> Bool -- | A thing of quantity 0 is unusable, all others are usable. usableQuantity :: LensQuantity a => a -> Bool -- | usableRelevance rel == False iff we cannot use a variable of -- rel. usableRelevance :: LensRelevance a => a -> Bool userNamed :: Ranged ArgName -> a -> Named_ a -- | NotHidden arguments are visible. visible :: LensHiding a => a -> Bool -- | xs `withArgsFrom` args translates xs into a list of -- Args, using the elements in args to fill in the -- non-unArg fields. -- -- Precondition: The two lists should have equal length. withArgsFrom :: [a] -> [Arg b] -> [Arg a] withNamedArgsFrom :: [a] -> [NamedArg b] -> [NamedArg a] withStandardLock :: ModalPolarity -> PolarityModality -- | Cohesion forms a monoid under addition, and even a semiring. zeroCohesion :: Cohesion -- | Identity under addition zeroModality :: Modality -- | ModalPolarity forms a monoid under addition, and even a -- semiring. zeroPolarity :: PolarityModality -- | Identity element under addition zeroQuantity :: Quantity -- | Relevance forms a monoid under addition, and even a semiring. zeroRelevance :: Relevance -- | Access modifier. data Access -- | Store the Origin of the private block that lead to this -- qualifier. This is needed for more faithful printing of declarations. -- KwRange is the range of the private keyword. PrivateAccess :: KwRange -> Origin -> Access PublicAccess :: Access class AllAreOpaque a jointOpacity :: AllAreOpaque a => a -> JointOpacity ($dmjointOpacity) :: forall (t :: Type -> Type) b. (AllAreOpaque a, Foldable t, AllAreOpaque b, t b ~ a) => a -> JointOpacity -- | We have a tuple of annotations, which might not be fully orthogonal. data Annotation Annotation :: Lock -> Annotation -- | Fitch-style dependent right adjoints. See Modal Dependent Type Theory -- and Dependent Right Adjoints, arXiv:1804.05236. [annLock] :: Annotation -> Lock -- | Is any element of a collection an AbstractDef. class AnyIsAbstract a anyIsAbstract :: AnyIsAbstract a => a -> IsAbstract ($dmanyIsAbstract) :: forall (t :: Type -> Type) b. (AnyIsAbstract a, Foldable t, AnyIsAbstract b, t b ~ a) => a -> IsAbstract data Arg e Arg :: ArgInfo -> e -> Arg e [argInfo] :: Arg e -> ArgInfo [unArg] :: Arg e -> e -- | A function argument can be hidden and/or irrelevant. data ArgInfo ArgInfo :: Hiding -> Modality -> Origin -> FreeVariables -> Annotation -> ArgInfo [argInfoHiding] :: ArgInfo -> Hiding [argInfoModality] :: ArgInfo -> Modality [argInfoOrigin] :: ArgInfo -> Origin [argInfoFreeVariables] :: ArgInfo -> FreeVariables -- | Sometimes we want a different kind of binder/pi-type, without it -- supporting any of the Modality interface. [argInfoAnnotation] :: ArgInfo -> Annotation -- | Names in binders and arguments. type ArgName = String type Arity = Nat -- | Associativity. data Associativity NonAssoc :: Associativity LeftAssoc :: Associativity RightAssoc :: Associativity type BackendName = Text data BinderNameOrigin UserBinderName :: BinderNameOrigin InsertedBinderName :: BinderNameOrigin -- | Positions of variables in syntax declarations. data BoundVariablePosition BoundVariablePosition :: !Int -> !Int -> BoundVariablePosition -- | The position (in the left-hand side of the syntax declaration) of the -- hole in which the variable is bound, counting from zero (and excluding -- parts that are not holes). For instance, for syntax Σ A (λ x → B) -- = B , A , x the number for x is 1, -- corresponding to B (0 would correspond to -- A). [holeNumber] :: BoundVariablePosition -> !Int -- | The position in the list of variables for this particular variable, -- counting from zero, and including wildcards. For instance, for -- syntax F (λ x _ y → A) = y ! A ! x the number for x -- is 0, the number for _ is 1, and the number -- for y is 2. [varNumber] :: BoundVariablePosition -> !Int -- | Range of the CATCHALL pragma for a clause, if any. -- Nothing means no such pragma. data Catchall YesCatchall :: Range -> Catchall NoCatchall :: Catchall -- | Cohesion modalities see "Brouwer's fixed-point theorem in -- real-cohesive homotopy type theory" (arXiv:1509.07584) types are now -- given an additional topological layer which the modalities interact -- with. data Cohesion -- | same points, discrete topology, idempotent comonad, box-like. Flat :: Cohesion -- | identity modality. | Sharp -- ^ same points, codiscrete topology, -- idempotent monad, diamond-like. Continuous :: Cohesion -- | single point space, artificially added for Flat left-composition. Squash :: Cohesion -- | Where does the ConP or Con come from? data ConOrigin -- | Inserted by system or expanded from an implicit pattern. ConOSystem :: ConOrigin -- | User wrote a constructor (pattern). ConOCon :: ConOrigin -- | User wrote a record (pattern). ConORec :: ConOrigin -- | Generated by interactive case splitting. ConOSplit :: ConOrigin newtype Constr a Constr :: a -> Constr a -- | Distinguish constructors from pattern synonyms. data ConstructorOrPatternSynonym IsConstructor :: ConstructorOrPatternSynonym IsPatternSynonym :: ConstructorOrPatternSynonym -- | Can we construct a record by copattern matching? class CopatternMatchingAllowed a copatternMatchingAllowed :: CopatternMatchingAllowed a => a -> Bool -- | Coverage check? (Default is yes). data CoverageCheck YesCoverageCheck :: CoverageCheck NoCoverageCheck :: CoverageCheck -- | Variants of Cubical Agda. data Cubical CErased :: Cubical CFull :: Cubical -- | Distinguish parsing a DISPLAY pragma from an ordinary left hand side. data DisplayLHS YesDisplayLHS :: DisplayLHS NoDisplayLHS :: DisplayLHS -- | A special case of Quantity: erased or not. -- -- Note that the Ord instance does *not* ignore the origin -- arguments. data Erased Erased :: Q0Origin -> Erased NotErased :: QωOrigin -> Erased data ExpandedEllipsis ExpandedEllipsis :: Range -> Int -> ExpandedEllipsis [ellipsisRange] :: ExpandedEllipsis -> Range [ellipsisWithArgs] :: ExpandedEllipsis -> Int NoEllipsis :: ExpandedEllipsis -- | Expression kinds: Expressions or patterns. data ExprKind IsExpr :: ExprKind IsPattern :: ExprKind data FileType AgdaFileType :: FileType MdFileType :: FileType RstFileType :: FileType TexFileType :: FileType OrgFileType :: FileType TypstFileType :: FileType TreeFileType :: FileType -- | Fixity of operators. data Fixity Fixity :: Range -> !FixityLevel -> !Associativity -> Fixity -- | Range of the whole fixity declaration. [fixityRange] :: Fixity -> Range [fixityLevel] :: Fixity -> !FixityLevel [fixityAssoc] :: Fixity -> !Associativity -- | The notation is handled as the fixity in the renamer. Hence, they are -- grouped together in this type. data Fixity' Fixity' :: !Fixity -> Notation -> Range -> Fixity' [theFixity] :: Fixity' -> !Fixity [theNotation] :: Fixity' -> Notation -- | Range of the name in the fixity declaration (used for correct -- highlighting, see issue #2140). [theNameRange] :: Fixity' -> Range data FixityLevel -- | No fixity declared. Unrelated :: FixityLevel -- | Fixity level declared as the number. Related :: !PrecedenceLevel -> FixityLevel data FreeVariables UnknownFVs :: FreeVariables KnownFVs :: IntSet -> FreeVariables -- | Pattern and copattern matching is allowed in the presence of eta. -- -- In the absence of eta, we have to choose whether we want to allow -- matching on the constructor or copattern matching with the -- projections. Having both leads to breakage of subject reduction (issue -- #4560). type HasEta = HasEta' PatternOrCopattern -- | Does a record come with eta-equality? data HasEta' a YesEta :: HasEta' a NoEta :: a -> HasEta' a type HasEta0 = HasEta' () class HasOverlapMode a lensOverlapMode :: HasOverlapMode a => Lens' a OverlapMode data Hiding Hidden :: Hiding Instance :: Overlappable -> Hiding NotHidden :: Hiding type HidingDirective' n m = [ImportedName' n m] -- | The things you are allowed to say when you shuffle names between name -- spaces (i.e. in import, namespace, or open -- declarations). data ImportDirective' n m ImportDirective :: Range -> Using' n m -> HidingDirective' n m -> RenamingDirective' n m -> Maybe KwRange -> ImportDirective' n m [importDirRange] :: ImportDirective' n m -> Range [using] :: ImportDirective' n m -> Using' n m [hiding] :: ImportDirective' n m -> HidingDirective' n m [impRenaming] :: ImportDirective' n m -> RenamingDirective' n m -- | Only for open. Exports the opened names from the current -- module. Range of the public keyword. [publicOpen] :: ImportDirective' n m -> Maybe KwRange -- | An imported name can be a module or a defined name. data ImportedName' n m -- | Imported module name of type m. ImportedModule :: m -> ImportedName' n m -- | Imported name of type n. ImportedName :: n -> ImportedName' n m newtype InteractionId InteractionId :: Nat -> InteractionId [interactionId] :: InteractionId -> Nat -- | Abstract or concrete. data IsAbstract AbstractDef :: IsAbstract ConcreteDef :: IsAbstract -- | Functions can be defined in both infix and prefix style. See -- LHS. data IsInfix InfixDef :: IsInfix PrefixDef :: IsInfix -- | Is this definition eligible for instance search? data IsInstance -- | Range of the instance keyword. InstanceDef :: KwRange -> IsInstance NotInstanceDef :: IsInstance -- | Is this a macro definition? data IsMacro MacroDef :: IsMacro NotMacroDef :: IsMacro data IsMain IsMain :: IsMain NotMain :: IsMain -- | Opaque or transparent. data IsOpaque -- | This definition is opaque, and it is guarded by the given opaque -- block. OpaqueDef :: {-# UNPACK #-} !OpaqueId -> IsOpaque TransparentDef :: IsOpaque -- | Monoid representing the combined opaque blocks of a Foldable -- containing possibly-opaque declarations. data JointOpacity -- | Every definition agrees on what opaque block they belong to. UniqueOpaque :: {-# UNPACK #-} !OpaqueId -> JointOpacity -- | More than one opaque block was found. DifferentOpaque :: !HashSet OpaqueId -> JointOpacity -- | Nothing here is opaque. NoOpaque :: JointOpacity -- | Agda variants. -- -- Only some variants are tracked. data Language WithoutK :: Language WithK :: Language Cubical :: Cubical -> Language class LensAnnotation a getAnnotation :: LensAnnotation a => a -> Annotation ($dmgetAnnotation) :: (LensAnnotation a, LensArgInfo a) => a -> Annotation setAnnotation :: LensAnnotation a => Annotation -> a -> a ($dmsetAnnotation) :: (LensAnnotation a, LensArgInfo a) => Annotation -> a -> a mapAnnotation :: LensAnnotation a => (Annotation -> Annotation) -> a -> a class LensArgInfo a getArgInfo :: LensArgInfo a => a -> ArgInfo setArgInfo :: LensArgInfo a => ArgInfo -> a -> a mapArgInfo :: LensArgInfo a => (ArgInfo -> ArgInfo) -> a -> a -- | A lens to access the Cohesion attribute in data structures. -- Minimal implementation: getCohesion and mapCohesion -- or LensModality. class LensCohesion a getCohesion :: LensCohesion a => a -> Cohesion ($dmgetCohesion) :: (LensCohesion a, LensModality a) => a -> Cohesion setCohesion :: LensCohesion a => Cohesion -> a -> a mapCohesion :: LensCohesion a => (Cohesion -> Cohesion) -> a -> a ($dmmapCohesion) :: (LensCohesion a, LensModality a) => (Cohesion -> Cohesion) -> a -> a class LensFixity a lensFixity :: LensFixity a => Lens' a Fixity class LensFixity' a lensFixity' :: LensFixity' a => Lens' a Fixity' -- | A lens to access the FreeVariables attribute in data -- structures. Minimal implementation: getFreeVariables and -- mapFreeVariables or LensArgInfo. class LensFreeVariables a getFreeVariables :: LensFreeVariables a => a -> FreeVariables ($dmgetFreeVariables) :: (LensFreeVariables a, LensArgInfo a) => a -> FreeVariables setFreeVariables :: LensFreeVariables a => FreeVariables -> a -> a mapFreeVariables :: LensFreeVariables a => (FreeVariables -> FreeVariables) -> a -> a ($dmmapFreeVariables) :: (LensFreeVariables a, LensArgInfo a) => (FreeVariables -> FreeVariables) -> a -> a -- | A lens to access the Hiding attribute in data structures. -- Minimal implementation: getHiding and mapHiding or -- LensArgInfo. class LensHiding a getHiding :: LensHiding a => a -> Hiding ($dmgetHiding) :: (LensHiding a, LensArgInfo a) => a -> Hiding setHiding :: LensHiding a => Hiding -> a -> a mapHiding :: LensHiding a => (Hiding -> Hiding) -> a -> a ($dmmapHiding) :: (LensHiding a, LensArgInfo a) => (Hiding -> Hiding) -> a -> a class LensIsAbstract a lensIsAbstract :: LensIsAbstract a => Lens' a IsAbstract class LensIsOpaque a lensIsOpaque :: LensIsOpaque a => Lens' a IsOpaque class LensLock a getLock :: LensLock a => a -> Lock setLock :: LensLock a => Lock -> a -> a mapLock :: LensLock a => (Lock -> Lock) -> a -> a -- | A lens to access the PolarityModality attribute in data -- structures. Minimal implementation: getModalPolarity and -- mapModalPolarity or LensModality. class LensModalPolarity a getModalPolarity :: LensModalPolarity a => a -> PolarityModality ($dmgetModalPolarity) :: (LensModalPolarity a, LensModality a) => a -> PolarityModality setModalPolarity :: LensModalPolarity a => PolarityModality -> a -> a mapModalPolarity :: LensModalPolarity a => (PolarityModality -> PolarityModality) -> a -> a ($dmmapModalPolarity) :: (LensModalPolarity a, LensModality a) => (PolarityModality -> PolarityModality) -> a -> a class LensModality a getModality :: LensModality a => a -> Modality ($dmgetModality) :: (LensModality a, LensArgInfo a) => a -> Modality setModality :: LensModality a => Modality -> a -> a mapModality :: LensModality a => (Modality -> Modality) -> a -> a ($dmmapModality) :: (LensModality a, LensArgInfo a) => (Modality -> Modality) -> a -> a -- | Accessor/editor for the nameOf component. class LensNamed a where { -- | The type of the name type NameOf a; } lensNamed :: LensNamed a => Lens' a (Maybe (NameOf a)) ($dmlensNamed) :: forall (f :: Type -> Type) b. (LensNamed a, Decoration f, LensNamed b, NameOf b ~ NameOf a, f b ~ a) => Lens' a (Maybe (NameOf a)) -- | A lens to access the Origin attribute in data structures. -- Minimal implementation: getOrigin and mapOrigin or -- LensArgInfo. class LensOrigin a getOrigin :: LensOrigin a => a -> Origin ($dmgetOrigin) :: (LensOrigin a, LensArgInfo a) => a -> Origin setOrigin :: LensOrigin a => Origin -> a -> a mapOrigin :: LensOrigin a => (Origin -> Origin) -> a -> a ($dmmapOrigin) :: (LensOrigin a, LensArgInfo a) => (Origin -> Origin) -> a -> a class LensQuantity a getQuantity :: LensQuantity a => a -> Quantity ($dmgetQuantity) :: (LensQuantity a, LensModality a) => a -> Quantity setQuantity :: LensQuantity a => Quantity -> a -> a mapQuantity :: LensQuantity a => (Quantity -> Quantity) -> a -> a ($dmmapQuantity) :: (LensQuantity a, LensModality a) => (Quantity -> Quantity) -> a -> a -- | A lens to access the Relevance attribute in data structures. -- Minimal implementation: getRelevance and -- mapRelevance or LensModality. class LensRelevance a getRelevance :: LensRelevance a => a -> Relevance ($dmgetRelevance) :: (LensRelevance a, LensModality a) => a -> Relevance setRelevance :: LensRelevance a => Relevance -> a -> a mapRelevance :: LensRelevance a => (Relevance -> Relevance) -> a -> a ($dmmapRelevance) :: (LensRelevance a, LensModality a) => (Relevance -> Relevance) -> a -> a data Lock IsNotLock :: Lock -- | In the future there might be different kinds of them. For now we -- assume lock weakening. IsLock :: LockOrigin -> Lock data LockOrigin -- | The user wrote @lock. LockOLock :: LockOrigin -- | The user wrote @tick. LockOTick :: LockOrigin -- | Placeholders are used to represent the underscores in a section. data MaybePlaceholder e Placeholder :: !PositionInName -> MaybePlaceholder e -- | The second argument is used only (but not always) for name parts other -- than underscores. NoPlaceholder :: !Maybe PositionInName -> e -> MaybePlaceholder e -- | Meta-variable identifiers use the same structure as NameIds. data MetaId MetaId :: {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !ModuleNameHash -> MetaId [metaId] :: MetaId -> {-# UNPACK #-} !Word64 [metaModule] :: MetaId -> {-# UNPACK #-} !ModuleNameHash -- | The different polarity options data ModalPolarity -- | argument will not be used. UnusedPolarity :: ModalPolarity -- | argument will only be used in strictly positive position. StrictlyPositive :: ModalPolarity -- | argument will only be used in positive position. Positive :: ModalPolarity -- | argument will only be used in negative position. Negative :: ModalPolarity -- | we don't know anything, argument can be used anywhere. MixedPolarity :: ModalPolarity -- | We have a tuple of modalities, which might not be fully orthogonal. -- For example, irrelevant stuff is also run-time irrelevant. data Modality Modality :: Relevance -> Quantity -> Cohesion -> PolarityModality -> Modality -- | Legacy irrelevance. See Pfenning, LiCS 2001; Abel, Vezzosi and -- Winterhalter, ICFP 2017. [modRelevance] :: Modality -> Relevance -- | Cardinality / runtime erasure. See Conor McBride, I got plenty o' -- nutting, Wadlerfest 2016. See Bob Atkey, Syntax and Semantics of -- Quantitative Type Theory, LiCS 2018. [modQuantity] :: Modality -> Quantity -- | Cohesion/what was in Agda-flat. see "Brouwer's fixed-point theorem in -- real-cohesive homotopy type theory" (arXiv:1509.07584) Currently only -- the comonad is implemented. [modCohesion] :: Modality -> Cohesion -- | Polarity annotations (strictly positive, ...) [modPolarity] :: Modality -> PolarityModality -- | The unique identifier of a name. Second argument is the top-level -- module identifier. data NameId NameId :: {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !ModuleNameHash -> NameId -- | The type of the name type family NameOf a -- | Something potentially carrying a name. data Named name a Named :: Maybe name -> a -> Named name a [nameOf] :: Named name a -> Maybe name [namedThing] :: Named name a -> a -- | Only Hidden arguments can have names. type NamedArg a = Arg Named_ a -- | Standard argument names. type NamedName = WithOrigin Ranged ArgName -- | Standard naming. type Named_ = Named NamedName -- | Number >= 0. type Nat = Int -- | Number >= 1. type Nat1 = Nat -- | Notation as provided by the syntax declaration. type Notation = [NotationPart] -- | Notation parts. data NotationPart -- | An identifier part. For instance, for _+_ the only identifier -- part is +. IdPart :: RString -> NotationPart -- | A hole: a place where argument expressions can be written. For -- instance, for _+_ the two underscores are holes, and for -- syntax Σ A (λ x → B) = B , A , x the variables A and -- B are holes. The number is the position of the hole, counting -- from zero. For instance, the number for A is 0, and -- the number for B is 1. HolePart :: Range -> NamedArg (Ranged Int) -> NotationPart -- | A bound variable. -- -- The first range is the range of the variable in the right-hand side of -- the syntax declaration, and the second range is the range of the -- variable in the left-hand side. VarPart :: Range -> Ranged BoundVariablePosition -> NotationPart -- | A wildcard (an underscore in binding position). WildPart :: Ranged BoundVariablePosition -> NotationPart -- | The unique identifier of an opaque block. Second argument is the -- top-level module identifier. data OpaqueId OpaqueId :: {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !ModuleNameHash -> OpaqueId -- | Origin of arguments. data Origin -- | From the source file / user input. (Preserve!) UserWritten :: Origin -- | E.g. inserted hidden arguments. Inserted :: Origin -- | Produced by the reflection machinery. Reflected :: Origin -- | Produced by an interactive case split. CaseSplit :: Origin -- | Named application produced to represent a substitution. E.g. "?0 (x = -- n)" instead of "?0 n" Substitution :: Origin -- | An expanded hidden argument pun. ExpandedPun :: Origin -- | Inserted by the generalization process Generalization :: Origin -- | Origin of Irrelevant. data OriginIrrelevant -- | User wrote nothing. OIrrInferred :: OriginIrrelevant -- | User wrote ".". OIrrDot :: Range -> OriginIrrelevant -- | User wrote "@irr". OIrrIrr :: Range -> OriginIrrelevant -- | User wrote "@irrelevant". OIrrIrrelevant :: Range -> OriginIrrelevant -- | Origin of Relevant. data OriginRelevant -- | User wrote nothing. ORelInferred :: OriginRelevant -- | User wrote "@relevant". ORelRelevant :: Range -> OriginRelevant -- | Origin of ShapeIrrelevant. data OriginShapeIrrelevant -- | User wrote nothing. OShIrrInferred :: OriginShapeIrrelevant -- | User wrote "..". OShIrrDotDot :: Range -> OriginShapeIrrelevant -- | User wrote "@shirr". OShIrrShIrr :: Range -> OriginShapeIrrelevant -- | User wrote "@shape-irrelevant". OShIrrShapeIrrelevant :: Range -> OriginShapeIrrelevant -- | The possible overlap modes for an instance, also used for instance -- candidates. data OverlapMode -- | User-written OVERLAPPABLE pragma: this candidate can *be removed* by a -- more specific candidate. Overlappable :: OverlapMode -- | User-written OVERLAPPING pragma: this candidate can *remove* a less -- specific candidate. Overlapping :: OverlapMode -- | User-written OVERLAPS pragma: both overlappable and overlapping. Overlaps :: OverlapMode -- | No user-written overlap pragma. This instance can be overlapped by an -- OVERLAPPING instance, and it can overlap OVERLAPPABLE instances. DefaultOverlap :: OverlapMode -- | User-written INCOHERENT pragma: both overlappable and overlapping; -- and, if there are multiple candidates after all overlap has been -- handled, make an arbitrary choice. Incoherent :: OverlapMode -- | Overlapping instances in record fields. FieldOverlap :: OverlapMode data Overlappable YesOverlap :: Overlappable NoOverlap :: Overlappable -- | Can we pattern match on the record constructor? class PatternMatchingAllowed a patternMatchingAllowed :: PatternMatchingAllowed a => a -> Bool -- | For a record without eta, which type of matching do we allow? data PatternOrCopattern -- | Can match on the record constructor. PatternMatching :: PatternOrCopattern -- | Can copattern match using the projections. (Default.) CopatternMatching :: PatternOrCopattern data PolarityModality PolarityModality :: ModalPolarity -> ModalPolarity -> ModalPolarity -> PolarityModality -- | The actual polarity of the variable [modPolarityAnn] :: PolarityModality -> ModalPolarity -- | The original polarity annotation by the user [modPolarityOrigin] :: PolarityModality -> ModalPolarity -- | The locks of the variable (= composition of all denominators the -- variable has been left divided by) [modPolarityLock] :: PolarityModality -> ModalPolarity -- | The position of a name part or underscore in a name. data PositionInName -- | The following underscore is at the beginning of the name: -- _foo. Beginning :: PositionInName -- | The following underscore is in the middle of the name: -- foo_bar. Middle :: PositionInName -- | The following underscore is at the end of the name: foo_. End :: PositionInName -- | Positivity check? (Default = True). data PositivityCheck YesPositivityCheck :: PositivityCheck NoPositivityCheck :: PositivityCheck -- | Precedence levels for operators. type PrecedenceLevel = Double -- | A "problem" consists of a set of constraints and the same constraint -- can be part of multiple problems. newtype ProblemId ProblemId :: Nat -> ProblemId -- | Where does a projection come from? data ProjOrigin -- | User wrote a prefix projection. ProjPrefix :: ProjOrigin -- | User wrote a postfix projection. ProjPostfix :: ProjOrigin -- | Projection was generated by the system. ProjSystem :: ProjOrigin -- | Origin of Quantity0. data Q0Origin -- | User wrote nothing. Q0Inferred :: Q0Origin -- | User wrote "@0". Q0 :: Range -> Q0Origin -- | User wrote "@erased". Q0Erased :: Range -> Q0Origin -- | Origin of Quantity1. data Q1Origin -- | User wrote nothing. Q1Inferred :: Q1Origin -- | User wrote "@1". Q1 :: Range -> Q1Origin -- | User wrote "@linear". Q1Linear :: Range -> Q1Origin -- | Quantity for linearity. -- -- A quantity is a set of natural numbers, indicating possible semantic -- uses of a variable. A singleton set {n} requires that the -- corresponding variable is used exactly n times. data Quantity -- | Zero uses {0}, erased at runtime. Quantity0 :: Q0Origin -> Quantity -- | Linear use {1} (could be updated destructively). Mostly TODO -- (needs postponable constraints between quantities to compute uses). Quantity1 :: Q1Origin -> Quantity -- | Unrestricted use ℕ. Quantityω :: QωOrigin -> Quantity -- | Origin of Quantityω. data QωOrigin -- | User wrote nothing. QωInferred :: QωOrigin -- | User wrote "@ω". Qω :: Range -> QωOrigin -- | User wrote "@plenty". QωPlenty :: Range -> QωOrigin -- | String with range info. type RString = Ranged RawName -- | Thing with range info. data Ranged a Ranged :: Range -> a -> Ranged a [rangeOf] :: Ranged a -> Range [rangedThing] :: Ranged a -> a -- | A RawName is some sort of string. type RawName = String data RecordDirectives' a RecordDirectives :: Maybe (Ranged Induction) -> Maybe (Ranged HasEta0) -> Maybe Range -> a -> RecordDirectives' a [recInductive] :: RecordDirectives' a -> Maybe (Ranged Induction) [recHasEta] :: RecordDirectives' a -> Maybe (Ranged HasEta0) [recPattern] :: RecordDirectives' a -> Maybe Range [recConstructor] :: RecordDirectives' a -> a -- | A function argument can be relevant or irrelevant. See -- Agda.TypeChecking.Irrelevance. data Relevance -- | The argument is (possibly) relevant at compile-time. Relevant :: OriginRelevant -> Relevance -- | Like Quantity0, the argument may never flow into evaluation -- position. So it is irrelevant at run-time, yet treated relevantly -- during equality checking. -- -- Unlike Quantity0, it is used to type Irrelevant -- arguments in functions: If you enable -- --experimental-irrelevance, then the type of an irrelevant -- function is forced to be shape-irrelevant. See: - -- https://doi.org/10.2168/LMCS-8(1:29)2012 example 2.8 (Not -- enforcing shape-irrelevant codomains can break subject reduction!) - -- https://dl.acm.org/doi/10.1145/3110277 - -- https://doi.org/10.1145/3209108.3209119 ShapeIrrelevant :: OriginShapeIrrelevant -> Relevance -- | The argument is irrelevant at compile- and runtime. Irrelevant :: OriginIrrelevant -> Relevance data Renaming' n m Renaming :: ImportedName' n m -> ImportedName' n m -> Maybe Fixity -> Range -> Renaming' n m -- | Rename from this name. [renFrom] :: Renaming' n m -> ImportedName' n m -- | To this one. Must be same kind as renFrom. [renTo] :: Renaming' n m -> ImportedName' n m -- | New fixity of renTo (optional). [renFixity] :: Renaming' n m -> Maybe Fixity -- | The range of the "to" keyword. Retained for highlighting purposes. [renToRange] :: Renaming' n m -> Range type RenamingDirective' n m = [Renaming' n m] -- | RewriteEqn' qn p e represents the rewrite and -- irrefutable with clauses of the LHS. qn stands for -- the QName of the auxiliary function generated to implement the feature -- nm is the type of names for pattern variables p is -- the type of patterns e is the type of expressions data RewriteEqn' qn nm p e -- |
-- rewrite e --Rewrite :: List1 (qn, e) -> RewriteEqn' qn nm p e -- |
-- with p <- e in eq --Invert :: qn -> List1 (Named nm (p, e)) -> RewriteEqn' qn nm p e -- |
-- using p <- e --LeftLet :: List1 (p, e) -> RewriteEqn' qn nm p e -- | Termination check? (Default = TerminationCheck). data TerminationCheck m -- | Run the termination checker. TerminationCheck :: TerminationCheck m -- | Skip termination checking (unsafe). NoTerminationCheck :: TerminationCheck m -- | Treat as non-terminating. NonTerminating :: TerminationCheck m -- | Treat as terminating (unsafe). Same effect as -- NoTerminationCheck. Terminating :: TerminationCheck m -- | Skip termination checking but use measure instead. TerminationMeasure :: Range -> m -> TerminationCheck m -- | Type wrapper to indicate additive monoid/semigroup context. newtype UnderAddition t UnderAddition :: t -> UnderAddition t -- | Type wrapper to indicate composition or multiplicative -- monoid/semigroup context. newtype UnderComposition t UnderComposition :: t -> UnderComposition t class Eq a => Underscore a underscore :: Underscore a => a isUnderscore :: Underscore a => a -> Bool -- | Universe check? (Default is yes). data UniverseCheck YesUniverseCheck :: UniverseCheck NoUniverseCheck :: UniverseCheck -- | The using clause of import directive. data Using' n m -- | No using clause given. UseEverything :: Using' n m -- | using the specified names. Using :: [ImportedName' n m] -> Using' n m -- | Decorating something with Hiding information. data WithHiding a WithHiding :: !Hiding -> a -> WithHiding a [whHiding] :: WithHiding a -> !Hiding [whThing] :: WithHiding a -> a -- | Decorating something with Origin information. data WithOrigin a WithOrigin :: !Origin -> a -> WithOrigin a [woOrigin] :: WithOrigin a -> !Origin [woThing] :: WithOrigin a -> a data Induction Inductive :: Induction CoInductive :: Induction instance Agda.Syntax.Common.AllAreOpaque Agda.Syntax.Common.IsOpaque instance Agda.Syntax.Common.AllAreOpaque a => Agda.Syntax.Common.AllAreOpaque [a] instance Agda.Syntax.Common.AllAreOpaque a => Agda.Syntax.Common.AllAreOpaque (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Common.AnyIsAbstract Agda.Syntax.Common.IsAbstract instance Agda.Syntax.Common.AnyIsAbstract a => Agda.Syntax.Common.AnyIsAbstract [a] instance Agda.Syntax.Common.AnyIsAbstract a => Agda.Syntax.Common.AnyIsAbstract (GHC.Internal.Maybe.Maybe a) instance GHC.Internal.Base.Applicative Agda.Syntax.Common.UnderAddition instance GHC.Internal.Base.Applicative Agda.Syntax.Common.UnderComposition instance GHC.Internal.Base.Applicative Agda.Syntax.Common.WithHiding instance Agda.Utils.Boolean.Boolean Agda.Syntax.Common.DisplayLHS instance Agda.Utils.Boolean.Boolean Agda.Syntax.Common.IsAbstract instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.Cohesion instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.ConOrigin instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.ConstructorOrPatternSynonym instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.CoverageCheck instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.DisplayLHS instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.LockOrigin instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.ModalPolarity instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.OverlapMode instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.PatternOrCopattern instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.PolarityModality instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.PositivityCheck instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.ProjOrigin instance GHC.Internal.Enum.Bounded Agda.Syntax.Common.UniverseCheck instance Agda.Syntax.Common.CopatternMatchingAllowed Agda.Syntax.Common.HasEta instance Agda.Syntax.Common.CopatternMatchingAllowed Agda.Syntax.Common.PatternOrCopattern instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.Arg instance Agda.Utils.Functor.Decoration (Agda.Syntax.Common.Named name) instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.Ranged instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.WithHiding instance Agda.Utils.Functor.Decoration Agda.Syntax.Common.WithOrigin instance GHC.Internal.Enum.Enum Agda.Syntax.Common.Cohesion instance GHC.Internal.Enum.Enum Agda.Syntax.Common.ConOrigin instance GHC.Internal.Enum.Enum Agda.Syntax.Common.ConstructorOrPatternSynonym instance GHC.Internal.Enum.Enum Agda.Syntax.Common.CoverageCheck instance GHC.Internal.Enum.Enum Agda.Syntax.Common.DisplayLHS instance GHC.Internal.Enum.Enum Agda.Syntax.Common.InteractionId instance GHC.Internal.Enum.Enum Agda.Syntax.Common.LockOrigin instance GHC.Internal.Enum.Enum Agda.Syntax.Common.MetaId instance GHC.Internal.Enum.Enum Agda.Syntax.Common.ModalPolarity instance GHC.Internal.Enum.Enum Agda.Syntax.Common.NameId instance GHC.Internal.Enum.Enum Agda.Syntax.Common.OpaqueId instance GHC.Internal.Enum.Enum Agda.Syntax.Common.OverlapMode instance GHC.Internal.Enum.Enum Agda.Syntax.Common.PatternOrCopattern instance GHC.Internal.Enum.Enum Agda.Syntax.Common.PositivityCheck instance GHC.Internal.Enum.Enum Agda.Syntax.Common.ProblemId instance GHC.Internal.Enum.Enum Agda.Syntax.Common.ProjOrigin instance GHC.Internal.Enum.Enum Agda.Syntax.Common.UniverseCheck instance GHC.Classes.Eq Agda.Syntax.Common.Access instance GHC.Classes.Eq Agda.Syntax.Common.Annotation instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Common.Arg e) instance GHC.Classes.Eq Agda.Syntax.Common.ArgInfo instance GHC.Classes.Eq Agda.Syntax.Common.Associativity instance GHC.Classes.Eq Agda.Syntax.Common.BinderNameOrigin instance GHC.Classes.Eq Agda.Syntax.Common.BoundVariablePosition instance GHC.Classes.Eq Agda.Syntax.Common.Catchall instance GHC.Classes.Eq Agda.Syntax.Common.Cohesion instance GHC.Classes.Eq Agda.Syntax.Common.ConOrigin instance GHC.Classes.Eq Agda.Syntax.Common.CoverageCheck instance GHC.Classes.Eq Agda.Syntax.Common.Cubical instance GHC.Classes.Eq Agda.Syntax.Common.DisplayLHS instance GHC.Classes.Eq Agda.Syntax.Common.Erased instance GHC.Classes.Eq Agda.Syntax.Common.ExpandedEllipsis instance GHC.Classes.Eq Agda.Syntax.Common.ExprKind instance GHC.Classes.Eq Agda.Syntax.Common.FileType instance GHC.Classes.Eq Agda.Syntax.Common.Fixity instance GHC.Classes.Eq Agda.Syntax.Common.Fixity' instance GHC.Classes.Eq Agda.Syntax.Common.FixityLevel instance GHC.Classes.Eq Agda.Syntax.Common.FreeVariables instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.HasEta' a) instance GHC.Classes.Eq Agda.Syntax.Common.Hiding instance (GHC.Classes.Eq m, GHC.Classes.Eq n) => GHC.Classes.Eq (Agda.Syntax.Common.ImportDirective' n m) instance (GHC.Classes.Eq m, GHC.Classes.Eq n) => GHC.Classes.Eq (Agda.Syntax.Common.ImportedName' n m) instance GHC.Classes.Eq Agda.Syntax.Common.InteractionId instance GHC.Classes.Eq Agda.Syntax.Common.IsAbstract instance GHC.Classes.Eq Agda.Syntax.Common.IsInfix instance GHC.Classes.Eq Agda.Syntax.Common.IsInstance instance GHC.Classes.Eq Agda.Syntax.Common.IsMacro instance GHC.Classes.Eq Agda.Syntax.Common.IsMain instance GHC.Classes.Eq Agda.Syntax.Common.IsOpaque instance GHC.Classes.Eq Agda.Syntax.Common.Language instance GHC.Classes.Eq Agda.Syntax.Common.Lock instance GHC.Classes.Eq Agda.Syntax.Common.LockOrigin instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Common.MaybePlaceholder e) instance GHC.Classes.Eq Agda.Syntax.Common.MetaId instance GHC.Classes.Eq Agda.Syntax.Common.ModalPolarity instance GHC.Classes.Eq Agda.Syntax.Common.Modality instance GHC.Classes.Eq Agda.Syntax.Common.NameId instance (GHC.Classes.Eq name, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Common.Named name a) instance GHC.Classes.Eq Agda.Syntax.Common.NotationPart instance GHC.Classes.Eq Agda.Syntax.Common.OpaqueId instance GHC.Classes.Eq Agda.Syntax.Common.Origin instance GHC.Classes.Eq Agda.Syntax.Common.OverlapMode instance GHC.Classes.Eq Agda.Syntax.Common.Overlappable instance GHC.Classes.Eq Agda.Syntax.Common.PatternOrCopattern instance GHC.Classes.Eq Agda.Syntax.Common.PolarityModality instance GHC.Classes.Eq Agda.Syntax.Common.PositionInName instance GHC.Classes.Eq Agda.Syntax.Common.PositivityCheck instance GHC.Classes.Eq Agda.Syntax.Common.ProblemId instance GHC.Classes.Eq Agda.Syntax.Common.ProjOrigin instance GHC.Classes.Eq Agda.Syntax.Common.Q0Origin instance GHC.Classes.Eq Agda.Syntax.Common.Q1Origin instance GHC.Classes.Eq Agda.Syntax.Common.Quantity instance GHC.Classes.Eq Agda.Syntax.Common.QωOrigin instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.Ranged a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.RecordDirectives' a) instance GHC.Classes.Eq Agda.Syntax.Common.Relevance instance (GHC.Classes.Eq m, GHC.Classes.Eq n) => GHC.Classes.Eq (Agda.Syntax.Common.Renaming' n m) instance (GHC.Classes.Eq e, GHC.Classes.Eq qn, GHC.Classes.Eq nm, GHC.Classes.Eq p) => GHC.Classes.Eq (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance GHC.Classes.Eq m => GHC.Classes.Eq (Agda.Syntax.Common.TerminationCheck m) instance GHC.Classes.Eq t => GHC.Classes.Eq (Agda.Syntax.Common.UnderAddition t) instance GHC.Classes.Eq t => GHC.Classes.Eq (Agda.Syntax.Common.UnderComposition t) instance GHC.Classes.Eq Agda.Syntax.Common.UniverseCheck instance (GHC.Classes.Eq m, GHC.Classes.Eq n) => GHC.Classes.Eq (Agda.Syntax.Common.Using' n m) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.WithHiding a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Common.WithOrigin a) instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.Arg instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.HasEta' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.MaybePlaceholder instance GHC.Internal.Data.Foldable.Foldable (Agda.Syntax.Common.Named name) instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.Ranged instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.RecordDirectives' instance GHC.Internal.Data.Foldable.Foldable (Agda.Syntax.Common.RewriteEqn' qn nm p) instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.WithHiding instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Common.WithOrigin instance GHC.Internal.Base.Functor Agda.Syntax.Common.Arg instance GHC.Internal.Base.Functor Agda.Syntax.Common.HasEta' instance GHC.Internal.Base.Functor Agda.Syntax.Common.MaybePlaceholder instance GHC.Internal.Base.Functor (Agda.Syntax.Common.Named name) instance GHC.Internal.Base.Functor Agda.Syntax.Common.Ranged instance GHC.Internal.Base.Functor Agda.Syntax.Common.RecordDirectives' instance GHC.Internal.Base.Functor (Agda.Syntax.Common.RewriteEqn' qn nm p) instance GHC.Internal.Base.Functor Agda.Syntax.Common.TerminationCheck instance GHC.Internal.Base.Functor Agda.Syntax.Common.UnderAddition instance GHC.Internal.Base.Functor Agda.Syntax.Common.UnderComposition instance GHC.Internal.Base.Functor Agda.Syntax.Common.WithHiding instance GHC.Internal.Base.Functor Agda.Syntax.Common.WithOrigin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Annotation instance GHC.Internal.Generics.Generic Agda.Syntax.Common.BinderNameOrigin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Catchall instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Cohesion instance GHC.Internal.Generics.Generic Agda.Syntax.Common.ConOrigin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.ConstructorOrPatternSynonym instance GHC.Internal.Generics.Generic Agda.Syntax.Common.CoverageCheck instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Cubical instance GHC.Internal.Generics.Generic Agda.Syntax.Common.DisplayLHS instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Erased instance GHC.Internal.Generics.Generic Agda.Syntax.Common.FileType instance GHC.Internal.Generics.Generic Agda.Syntax.Common.IsAbstract instance GHC.Internal.Generics.Generic Agda.Syntax.Common.IsMacro instance GHC.Internal.Generics.Generic Agda.Syntax.Common.IsOpaque instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Language instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Lock instance GHC.Internal.Generics.Generic Agda.Syntax.Common.LockOrigin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.MetaId instance GHC.Internal.Generics.Generic Agda.Syntax.Common.ModalPolarity instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Modality instance GHC.Internal.Generics.Generic Agda.Syntax.Common.NameId instance GHC.Internal.Generics.Generic Agda.Syntax.Common.OpaqueId instance GHC.Internal.Generics.Generic Agda.Syntax.Common.OriginIrrelevant instance GHC.Internal.Generics.Generic Agda.Syntax.Common.OriginRelevant instance GHC.Internal.Generics.Generic Agda.Syntax.Common.OriginShapeIrrelevant instance GHC.Internal.Generics.Generic Agda.Syntax.Common.PolarityModality instance GHC.Internal.Generics.Generic Agda.Syntax.Common.PositivityCheck instance GHC.Internal.Generics.Generic Agda.Syntax.Common.ProjOrigin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Q0Origin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Q1Origin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Quantity instance GHC.Internal.Generics.Generic Agda.Syntax.Common.QωOrigin instance GHC.Internal.Generics.Generic Agda.Syntax.Common.Relevance instance GHC.Internal.Generics.Generic Agda.Syntax.Common.UniverseCheck instance Agda.Syntax.Common.HasOverlapMode Agda.Syntax.Common.OverlapMode instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Access instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Annotation instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Cohesion instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Erased instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Fixity instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.HasEta' a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Hiding instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.ImportDirective' a b) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.ImportedName' a b) instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Aspect.Induction instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.IsInstance instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.IsMacro instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.MaybePlaceholder a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Modality instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Named name a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.NotationPart instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Origin instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.OriginIrrelevant instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.OriginRelevant instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.OriginShapeIrrelevant instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.PatternOrCopattern instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.PolarityModality instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Q0Origin instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Q1Origin instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Quantity instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.QωOrigin instance Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Ranged a) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.RecordDirectives' a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Common.Relevance instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Renaming' a b) instance (Agda.Syntax.Position.HasRange qn, Agda.Syntax.Position.HasRange nm, Agda.Syntax.Position.HasRange p, Agda.Syntax.Position.HasRange e) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance (Agda.Syntax.Position.HasRange a, Agda.Syntax.Position.HasRange b) => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.Using' a b) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.WithHiding a) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Common.WithOrigin a) instance Data.Hashable.Class.Hashable Agda.Syntax.Common.MetaId instance Data.Hashable.Class.Hashable Agda.Syntax.Common.NameId instance Data.Hashable.Class.Hashable Agda.Syntax.Common.OpaqueId instance GHC.Internal.Real.Integral Agda.Syntax.Common.InteractionId instance GHC.Internal.Real.Integral Agda.Syntax.Common.ProblemId instance Agda.Utils.Boolean.IsBool Agda.Syntax.Common.DisplayLHS instance Agda.Utils.Boolean.IsBool Agda.Syntax.Common.IsAbstract instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Access instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Annotation instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.BinderNameOrigin instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Catchall instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Cohesion instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.ConOrigin instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.CoverageCheck instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Erased instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.ExpandedEllipsis instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Fixity instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Fixity' instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.FreeVariables instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.HasEta' a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Hiding instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.ImportDirective' a b) instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.ImportedName' a b) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Aspect.Induction instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.InteractionId instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.IsAbstract instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.IsInstance instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.IsMacro instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.IsOpaque instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Language instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.MaybePlaceholder a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Modality instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.NameId instance (Agda.Syntax.Position.KillRange name, Agda.Syntax.Position.KillRange a) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Named name a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.NotationPart instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.OpaqueId instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Origin instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.OriginIrrelevant instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.OriginRelevant instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.OriginShapeIrrelevant instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.OverlapMode instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.PatternOrCopattern instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.PolarityModality instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.PositivityCheck instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.ProjOrigin instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Q0Origin instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Q1Origin instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Quantity instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.QωOrigin instance Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Ranged a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.RecordDirectives' a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.Relevance instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Renaming' a b) instance (Agda.Syntax.Position.KillRange qn, Agda.Syntax.Position.KillRange nm, Agda.Syntax.Position.KillRange e, Agda.Syntax.Position.KillRange p) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance Agda.Syntax.Position.KillRange m => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.TerminationCheck m) instance Agda.Syntax.Position.KillRange Agda.Syntax.Common.UniverseCheck instance (Agda.Syntax.Position.KillRange a, Agda.Syntax.Position.KillRange b) => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.Using' a b) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.WithHiding a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Common.WithOrigin a) instance Agda.Utils.POMonoid.LeftClosedPOMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Modality) instance Agda.Utils.POMonoid.LeftClosedPOMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.PolarityModality) instance Agda.Utils.POMonoid.LeftClosedPOMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Cohesion) instance Agda.Utils.POMonoid.LeftClosedPOMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Relevance) instance Agda.Utils.POMonoid.LeftClosedPOMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Quantity) instance Agda.Syntax.Common.LensAnnotation Agda.Syntax.Common.Annotation instance Agda.Syntax.Common.LensAnnotation (Agda.Syntax.Common.Arg t) instance Agda.Syntax.Common.LensAnnotation Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensArgInfo (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Common.LensArgInfo Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensCohesion (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensCohesion Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensCohesion Agda.Syntax.Common.Cohesion instance Agda.Syntax.Common.LensCohesion Agda.Syntax.Common.Modality instance Agda.Syntax.Common.LensFixity' Agda.Syntax.Common.Fixity' instance Agda.Syntax.Common.LensFixity Agda.Syntax.Common.Fixity instance Agda.Syntax.Common.LensFixity Agda.Syntax.Common.Fixity' instance Agda.Syntax.Common.LensFreeVariables (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensFreeVariables Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensFreeVariables Agda.Syntax.Common.FreeVariables instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensHiding Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensHiding Agda.Syntax.Common.Hiding instance Agda.Syntax.Common.LensHiding a => Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.Named nm a) instance Agda.Syntax.Common.LensHiding (Agda.Syntax.Common.WithHiding a) instance Agda.Syntax.Common.LensIsAbstract Agda.Syntax.Common.IsAbstract instance Agda.Syntax.Common.LensIsOpaque Agda.Syntax.Common.IsOpaque instance Agda.Syntax.Common.LensLock (Agda.Syntax.Common.Arg t) instance Agda.Syntax.Common.LensLock Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensLock Agda.Syntax.Common.Lock instance Agda.Syntax.Common.LensModalPolarity (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensModalPolarity Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensModalPolarity Agda.Syntax.Common.Modality instance Agda.Syntax.Common.LensModalPolarity Agda.Syntax.Common.PolarityModality instance Agda.Syntax.Common.LensModality (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensModality Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensModality Agda.Syntax.Common.Modality instance Agda.Syntax.Common.LensNamed a => Agda.Syntax.Common.LensNamed (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Common.LensNamed (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Common.LensNamed (Agda.Syntax.Common.Named name a) instance Agda.Syntax.Common.LensOrigin (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensOrigin Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensOrigin Agda.Syntax.Common.Origin instance Agda.Syntax.Common.LensOrigin (Agda.Syntax.Common.WithOrigin a) instance Agda.Syntax.Common.LensQuantity (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensQuantity Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensQuantity Agda.Syntax.Common.Modality instance Agda.Syntax.Common.LensQuantity Agda.Syntax.Common.Quantity instance Agda.Syntax.Common.LensRelevance (Agda.Syntax.Common.Arg e) instance Agda.Syntax.Common.LensRelevance Agda.Syntax.Common.ArgInfo instance Agda.Syntax.Common.LensRelevance Agda.Syntax.Common.Modality instance Agda.Syntax.Common.LensRelevance Agda.Syntax.Common.Relevance instance GHC.Internal.Base.Monoid Agda.Syntax.Common.Catchall instance GHC.Internal.Base.Monoid Agda.Syntax.Common.CoverageCheck instance GHC.Internal.Base.Monoid Agda.Syntax.Common.ExpandedEllipsis instance GHC.Internal.Base.Monoid Agda.Syntax.Common.FreeVariables instance GHC.Internal.Base.Monoid Agda.Syntax.Common.Hiding instance (Agda.Syntax.Position.HasRange n, Agda.Syntax.Position.HasRange m) => GHC.Internal.Base.Monoid (Agda.Syntax.Common.ImportDirective' n m) instance GHC.Internal.Base.Monoid Agda.Syntax.Common.IsAbstract instance GHC.Internal.Base.Monoid Agda.Syntax.Common.IsMain instance GHC.Internal.Base.Monoid Agda.Syntax.Common.JointOpacity instance GHC.Internal.Base.Monoid Agda.Syntax.Common.OriginIrrelevant instance GHC.Internal.Base.Monoid Agda.Syntax.Common.OriginRelevant instance GHC.Internal.Base.Monoid Agda.Syntax.Common.OriginShapeIrrelevant instance GHC.Internal.Base.Monoid Agda.Syntax.Common.Overlappable instance GHC.Internal.Base.Monoid Agda.Syntax.Common.PositivityCheck instance GHC.Internal.Base.Monoid Agda.Syntax.Common.Q0Origin instance GHC.Internal.Base.Monoid Agda.Syntax.Common.Q1Origin instance GHC.Internal.Base.Monoid Agda.Syntax.Common.QωOrigin instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Modality) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.PolarityModality) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Cohesion) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Relevance) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Quantity) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Modality) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.PolarityModality) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Cohesion) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Relevance) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Quantity) instance GHC.Internal.Base.Monoid (Agda.Syntax.Common.Using' n m) instance Control.DeepSeq.NFData Agda.Syntax.Common.Access instance Control.DeepSeq.NFData Agda.Syntax.Common.Annotation instance Control.DeepSeq.NFData e => Control.DeepSeq.NFData (Agda.Syntax.Common.Arg e) instance Control.DeepSeq.NFData Agda.Syntax.Common.ArgInfo instance Control.DeepSeq.NFData Agda.Syntax.Common.BinderNameOrigin instance Control.DeepSeq.NFData Agda.Syntax.Common.BoundVariablePosition instance Control.DeepSeq.NFData Agda.Syntax.Common.Catchall instance Control.DeepSeq.NFData Agda.Syntax.Common.Cohesion instance Control.DeepSeq.NFData Agda.Syntax.Common.ConOrigin instance Control.DeepSeq.NFData Agda.Syntax.Common.ConstructorOrPatternSynonym instance Control.DeepSeq.NFData Agda.Syntax.Common.CoverageCheck instance Control.DeepSeq.NFData Agda.Syntax.Common.Cubical instance Control.DeepSeq.NFData Agda.Syntax.Common.Erased instance Control.DeepSeq.NFData Agda.Syntax.Common.ExpandedEllipsis instance Control.DeepSeq.NFData Agda.Syntax.Common.FileType instance Control.DeepSeq.NFData Agda.Syntax.Common.Fixity instance Control.DeepSeq.NFData Agda.Syntax.Common.Fixity' instance Control.DeepSeq.NFData Agda.Syntax.Common.FixityLevel instance Control.DeepSeq.NFData Agda.Syntax.Common.FreeVariables instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.HasEta' a) instance Control.DeepSeq.NFData Agda.Syntax.Common.Hiding instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.ImportDirective' a b) instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.ImportedName' a b) instance Control.DeepSeq.NFData Agda.Syntax.Common.InteractionId instance Control.DeepSeq.NFData Agda.Syntax.Common.IsAbstract instance Control.DeepSeq.NFData Agda.Syntax.Common.IsInstance instance Control.DeepSeq.NFData Agda.Syntax.Common.IsMacro instance Control.DeepSeq.NFData Agda.Syntax.Common.IsOpaque instance Control.DeepSeq.NFData Agda.Syntax.Common.Language instance Control.DeepSeq.NFData Agda.Syntax.Common.Lock instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.MaybePlaceholder a) instance Control.DeepSeq.NFData Agda.Syntax.Common.MetaId instance Control.DeepSeq.NFData Agda.Syntax.Common.Modality instance Control.DeepSeq.NFData Agda.Syntax.Common.NameId instance (Control.DeepSeq.NFData name, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Agda.Syntax.Common.Named name a) instance Control.DeepSeq.NFData Agda.Syntax.Common.NotationPart instance Control.DeepSeq.NFData Agda.Syntax.Common.OpaqueId instance Control.DeepSeq.NFData Agda.Syntax.Common.Origin instance Control.DeepSeq.NFData Agda.Syntax.Common.OriginIrrelevant instance Control.DeepSeq.NFData Agda.Syntax.Common.OriginRelevant instance Control.DeepSeq.NFData Agda.Syntax.Common.OriginShapeIrrelevant instance Control.DeepSeq.NFData Agda.Syntax.Common.OverlapMode instance Control.DeepSeq.NFData Agda.Syntax.Common.Overlappable instance Control.DeepSeq.NFData Agda.Syntax.Common.PatternOrCopattern instance Control.DeepSeq.NFData Agda.Syntax.Common.PolarityModality instance Control.DeepSeq.NFData Agda.Syntax.Common.PositivityCheck instance Control.DeepSeq.NFData Agda.Syntax.Common.ProblemId instance Control.DeepSeq.NFData Agda.Syntax.Common.ProjOrigin instance Control.DeepSeq.NFData Agda.Syntax.Common.Q0Origin instance Control.DeepSeq.NFData Agda.Syntax.Common.Q1Origin instance Control.DeepSeq.NFData Agda.Syntax.Common.Quantity instance Control.DeepSeq.NFData Agda.Syntax.Common.QωOrigin instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.Ranged a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.RecordDirectives' a) instance Control.DeepSeq.NFData Agda.Syntax.Common.Relevance instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.Renaming' a b) instance (Control.DeepSeq.NFData qn, Control.DeepSeq.NFData nm, Control.DeepSeq.NFData p, Control.DeepSeq.NFData e) => Control.DeepSeq.NFData (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.TerminationCheck a) instance Control.DeepSeq.NFData Agda.Syntax.Common.UniverseCheck instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Agda.Syntax.Common.Using' a b) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.WithHiding a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Common.WithOrigin a) instance Agda.Utils.Null.Null Agda.Syntax.Common.Annotation instance Agda.Utils.Null.Null Agda.Syntax.Common.ArgInfo instance Agda.Utils.Null.Null Agda.Syntax.Common.Catchall instance Agda.Utils.Null.Null Agda.Syntax.Common.Cohesion instance Agda.Utils.Null.Null Agda.Syntax.Common.ExpandedEllipsis instance Agda.Utils.Null.Null Agda.Syntax.Common.Fixity instance Agda.Utils.Null.Null Agda.Syntax.Common.Fixity' instance Agda.Utils.Null.Null Agda.Syntax.Common.FixityLevel instance Agda.Utils.Null.Null Agda.Syntax.Common.Hiding instance Agda.Utils.Null.Null (Agda.Syntax.Common.ImportDirective' n m) instance Agda.Utils.Null.Null Agda.Syntax.Common.Lock instance Agda.Utils.Null.Null Agda.Syntax.Common.Modality instance Agda.Utils.Null.Null Agda.Syntax.Common.OriginIrrelevant instance Agda.Utils.Null.Null Agda.Syntax.Common.OriginRelevant instance Agda.Utils.Null.Null Agda.Syntax.Common.OriginShapeIrrelevant instance Agda.Utils.Null.Null Agda.Syntax.Common.PolarityModality instance Agda.Utils.Null.Null Agda.Syntax.Common.Q0Origin instance Agda.Utils.Null.Null Agda.Syntax.Common.Q1Origin instance Agda.Utils.Null.Null Agda.Syntax.Common.Quantity instance Agda.Utils.Null.Null Agda.Syntax.Common.QωOrigin instance Agda.Utils.Null.Null a => Agda.Utils.Null.Null (Agda.Syntax.Common.RecordDirectives' a) instance Agda.Utils.Null.Null Agda.Syntax.Common.Relevance instance Agda.Utils.Null.Null (Agda.Syntax.Common.Using' n m) instance GHC.Internal.Num.Num Agda.Syntax.Common.InteractionId instance GHC.Internal.Num.Num Agda.Syntax.Common.ProblemId instance GHC.Classes.Ord Agda.Syntax.Common.Access instance GHC.Classes.Ord Agda.Syntax.Common.Annotation instance GHC.Classes.Ord e => GHC.Classes.Ord (Agda.Syntax.Common.Arg e) instance GHC.Classes.Ord Agda.Syntax.Common.ArgInfo instance GHC.Classes.Ord Agda.Syntax.Common.Associativity instance GHC.Classes.Ord Agda.Syntax.Common.BoundVariablePosition instance GHC.Classes.Ord Agda.Syntax.Common.Cohesion instance GHC.Classes.Ord Agda.Syntax.Common.ConOrigin instance GHC.Classes.Ord Agda.Syntax.Common.CoverageCheck instance GHC.Classes.Ord Agda.Syntax.Common.Erased instance GHC.Classes.Ord Agda.Syntax.Common.FileType instance GHC.Classes.Ord Agda.Syntax.Common.Fixity instance GHC.Classes.Ord Agda.Syntax.Common.FixityLevel instance GHC.Classes.Ord Agda.Syntax.Common.FreeVariables instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Common.HasEta' a) instance GHC.Classes.Ord Agda.Syntax.Common.Hiding instance (GHC.Classes.Ord m, GHC.Classes.Ord n) => GHC.Classes.Ord (Agda.Syntax.Common.ImportedName' n m) instance GHC.Classes.Ord Agda.Syntax.Common.InteractionId instance GHC.Classes.Ord Agda.Syntax.Common.IsAbstract instance GHC.Classes.Ord Agda.Syntax.Common.IsInfix instance GHC.Classes.Ord Agda.Syntax.Common.IsInstance instance GHC.Classes.Ord Agda.Syntax.Common.IsMacro instance GHC.Classes.Ord Agda.Syntax.Common.IsOpaque instance GHC.Classes.Ord Agda.Syntax.Common.Lock instance GHC.Classes.Ord Agda.Syntax.Common.LockOrigin instance GHC.Classes.Ord e => GHC.Classes.Ord (Agda.Syntax.Common.MaybePlaceholder e) instance GHC.Classes.Ord Agda.Syntax.Common.MetaId instance GHC.Classes.Ord Agda.Syntax.Common.ModalPolarity instance GHC.Classes.Ord Agda.Syntax.Common.Modality instance GHC.Classes.Ord Agda.Syntax.Common.NameId instance (GHC.Classes.Ord name, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Common.Named name a) instance GHC.Classes.Ord Agda.Syntax.Common.NotationPart instance GHC.Classes.Ord Agda.Syntax.Common.OpaqueId instance GHC.Classes.Ord Agda.Syntax.Common.Origin instance GHC.Classes.Ord Agda.Syntax.Common.OverlapMode instance GHC.Classes.Ord Agda.Syntax.Common.Overlappable instance GHC.Classes.Ord Agda.Syntax.Common.PatternOrCopattern instance GHC.Classes.Ord Agda.Syntax.Common.PolarityModality instance GHC.Classes.Ord Agda.Syntax.Common.PositionInName instance GHC.Classes.Ord Agda.Syntax.Common.PositivityCheck instance GHC.Classes.Ord Agda.Syntax.Common.ProblemId instance GHC.Classes.Ord Agda.Syntax.Common.ProjOrigin instance GHC.Classes.Ord Agda.Syntax.Common.Q0Origin instance GHC.Classes.Ord Agda.Syntax.Common.Q1Origin instance GHC.Classes.Ord Agda.Syntax.Common.Quantity instance GHC.Classes.Ord Agda.Syntax.Common.QωOrigin instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Common.Ranged a) instance GHC.Classes.Ord Agda.Syntax.Common.Relevance instance GHC.Classes.Ord t => GHC.Classes.Ord (Agda.Syntax.Common.UnderAddition t) instance GHC.Classes.Ord t => GHC.Classes.Ord (Agda.Syntax.Common.UnderComposition t) instance GHC.Classes.Ord Agda.Syntax.Common.UniverseCheck instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Common.WithHiding a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Common.WithOrigin a) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Modality) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.PolarityModality) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Cohesion) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Relevance) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Quantity) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Modality) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.PolarityModality) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Cohesion) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Relevance) instance Agda.Utils.POMonoid.POMonoid (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Quantity) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Modality) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.PolarityModality) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Cohesion) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Relevance) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Quantity) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Modality) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.PolarityModality) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Cohesion) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Relevance) instance Agda.Utils.POMonoid.POSemigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Quantity) instance Agda.Utils.PartialOrd.PartialOrd Agda.Syntax.Common.Cohesion instance Agda.Utils.PartialOrd.PartialOrd Agda.Syntax.Common.ModalPolarity instance Agda.Utils.PartialOrd.PartialOrd Agda.Syntax.Common.Modality instance Agda.Utils.PartialOrd.PartialOrd Agda.Syntax.Common.PolarityModality instance Agda.Utils.PartialOrd.PartialOrd Agda.Syntax.Common.Quantity instance Agda.Utils.PartialOrd.PartialOrd Agda.Syntax.Common.Relevance instance Agda.Utils.PartialOrd.PartialOrd t => Agda.Utils.PartialOrd.PartialOrd (Agda.Syntax.Common.UnderAddition t) instance Agda.Utils.PartialOrd.PartialOrd t => Agda.Utils.PartialOrd.PartialOrd (Agda.Syntax.Common.UnderComposition t) instance Agda.Syntax.Common.PatternMatchingAllowed Agda.Syntax.Common.HasEta instance Agda.Syntax.Common.PatternMatchingAllowed Agda.Syntax.Common.Aspect.Induction instance Agda.Syntax.Common.PatternMatchingAllowed Agda.Syntax.Common.PatternOrCopattern instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Access instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Associativity instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Cohesion instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.ConstructorOrPatternSynonym instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Erased instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.FileType instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Fixity instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.FixityLevel instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Hiding instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.Syntax.Common.Pretty.Pretty b) => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.ImportDirective' a b) instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.Syntax.Common.Pretty.Pretty b) => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.ImportedName' a b) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Aspect.Induction instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.InteractionId instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Lock instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.MetaId instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.ModalPolarity instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Modality instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.NameId instance Agda.Syntax.Common.Pretty.Pretty e => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.Named_ e) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.OpaqueId instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.OriginIrrelevant instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.OriginRelevant instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.OriginShapeIrrelevant instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.OverlapMode instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.PolarityModality instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.ProblemId instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Q0Origin instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Q1Origin instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Quantity instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.QωOrigin instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.Ranged a) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Common.Relevance instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.Syntax.Common.Pretty.Pretty b) => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.Renaming' a b) instance (Agda.Syntax.Common.Pretty.Pretty nm, Agda.Syntax.Common.Pretty.Pretty p, Agda.Syntax.Common.Pretty.Pretty e) => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.Syntax.Common.Pretty.Pretty b) => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.Using' a b) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.WithHiding a) instance Agda.Syntax.Common.Pretty.Pretty a => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Common.WithOrigin a) instance GHC.Internal.Real.Real Agda.Syntax.Common.InteractionId instance GHC.Internal.Real.Real Agda.Syntax.Common.ProblemId instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Catchall instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.CoverageCheck instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.ExpandedEllipsis instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.FreeVariables instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Hiding instance (Agda.Syntax.Position.HasRange n, Agda.Syntax.Position.HasRange m) => GHC.Internal.Base.Semigroup (Agda.Syntax.Common.ImportDirective' n m) instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.IsAbstract instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.IsMain instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.JointOpacity instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.OriginIrrelevant instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.OriginRelevant instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.OriginShapeIrrelevant instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Overlappable instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.PositivityCheck instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Q0Origin instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.Q1Origin instance GHC.Internal.Base.Semigroup Agda.Syntax.Common.QωOrigin instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Modality) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.PolarityModality) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Cohesion) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Relevance) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderAddition Agda.Syntax.Common.Quantity) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Modality) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.PolarityModality) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Cohesion) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Relevance) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Erased) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.UnderComposition Agda.Syntax.Common.Quantity) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Common.Using' n m) instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.Cohesion instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.Named name a) instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.NotationPart instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.OriginIrrelevant instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.OriginRelevant instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.OriginShapeIrrelevant instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.PolarityModality instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.Q0Origin instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.Q1Origin instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.Quantity instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.QωOrigin instance Agda.Syntax.Position.SetRange Agda.Syntax.Common.Relevance instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.WithHiding a) instance Agda.Syntax.Position.SetRange a => Agda.Syntax.Position.SetRange (Agda.Syntax.Common.WithOrigin a) instance GHC.Internal.Show.Show Agda.Syntax.Common.Access instance GHC.Internal.Show.Show Agda.Syntax.Common.Annotation instance GHC.Internal.Show.Show e => GHC.Internal.Show.Show (Agda.Syntax.Common.Arg e) instance GHC.Internal.Show.Show Agda.Syntax.Common.ArgInfo instance GHC.Internal.Show.Show Agda.Syntax.Common.Associativity instance GHC.Internal.Show.Show Agda.Syntax.Common.BinderNameOrigin instance GHC.Internal.Show.Show Agda.Syntax.Common.BoundVariablePosition instance GHC.Internal.Show.Show Agda.Syntax.Common.Catchall instance GHC.Internal.Show.Show Agda.Syntax.Common.Cohesion instance GHC.Internal.Show.Show Agda.Syntax.Common.ConOrigin instance GHC.Internal.Show.Show Agda.Syntax.Common.ConstructorOrPatternSynonym instance GHC.Internal.Show.Show Agda.Syntax.Common.CoverageCheck instance GHC.Internal.Show.Show Agda.Syntax.Common.Cubical instance GHC.Internal.Show.Show Agda.Syntax.Common.DisplayLHS instance GHC.Internal.Show.Show Agda.Syntax.Common.Erased instance GHC.Internal.Show.Show Agda.Syntax.Common.ExpandedEllipsis instance GHC.Internal.Show.Show Agda.Syntax.Common.ExprKind instance GHC.Internal.Show.Show Agda.Syntax.Common.FileType instance GHC.Internal.Show.Show Agda.Syntax.Common.Fixity instance GHC.Internal.Show.Show Agda.Syntax.Common.Fixity' instance GHC.Internal.Show.Show Agda.Syntax.Common.FixityLevel instance GHC.Internal.Show.Show Agda.Syntax.Common.FreeVariables instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Common.HasEta' a) instance GHC.Internal.Show.Show Agda.Syntax.Common.Hiding instance (GHC.Internal.Show.Show m, GHC.Internal.Show.Show n) => GHC.Internal.Show.Show (Agda.Syntax.Common.ImportDirective' n m) instance (GHC.Internal.Show.Show m, GHC.Internal.Show.Show n) => GHC.Internal.Show.Show (Agda.Syntax.Common.ImportedName' n m) instance GHC.Internal.Show.Show Agda.Syntax.Common.InteractionId instance GHC.Internal.Show.Show Agda.Syntax.Common.IsAbstract instance GHC.Internal.Show.Show Agda.Syntax.Common.IsInfix instance GHC.Internal.Show.Show Agda.Syntax.Common.IsInstance instance GHC.Internal.Show.Show Agda.Syntax.Common.IsMacro instance GHC.Internal.Show.Show Agda.Syntax.Common.IsMain instance GHC.Internal.Show.Show Agda.Syntax.Common.IsOpaque instance GHC.Internal.Show.Show Agda.Syntax.Common.Language instance GHC.Internal.Show.Show Agda.Syntax.Common.Lock instance GHC.Internal.Show.Show Agda.Syntax.Common.LockOrigin instance GHC.Internal.Show.Show e => GHC.Internal.Show.Show (Agda.Syntax.Common.MaybePlaceholder e) instance GHC.Internal.Show.Show Agda.Syntax.Common.MetaId instance GHC.Internal.Show.Show Agda.Syntax.Common.ModalPolarity instance GHC.Internal.Show.Show Agda.Syntax.Common.Modality instance GHC.Internal.Show.Show Agda.Syntax.Common.NameId instance (GHC.Internal.Show.Show name, GHC.Internal.Show.Show a) => GHC.Internal.Show.Show (Agda.Syntax.Common.Named name a) instance GHC.Internal.Show.Show Agda.Syntax.Common.NotationPart instance GHC.Internal.Show.Show Agda.Syntax.Common.OpaqueId instance GHC.Internal.Show.Show Agda.Syntax.Common.Origin instance GHC.Internal.Show.Show Agda.Syntax.Common.OriginIrrelevant instance GHC.Internal.Show.Show Agda.Syntax.Common.OriginRelevant instance GHC.Internal.Show.Show Agda.Syntax.Common.OriginShapeIrrelevant instance GHC.Internal.Show.Show Agda.Syntax.Common.OverlapMode instance GHC.Internal.Show.Show Agda.Syntax.Common.Overlappable instance GHC.Internal.Show.Show Agda.Syntax.Common.PatternOrCopattern instance GHC.Internal.Show.Show Agda.Syntax.Common.PolarityModality instance GHC.Internal.Show.Show Agda.Syntax.Common.PositionInName instance GHC.Internal.Show.Show Agda.Syntax.Common.PositivityCheck instance GHC.Internal.Show.Show Agda.Syntax.Common.ProblemId instance GHC.Internal.Show.Show Agda.Syntax.Common.ProjOrigin instance GHC.Internal.Show.Show Agda.Syntax.Common.Q0Origin instance GHC.Internal.Show.Show Agda.Syntax.Common.Q1Origin instance GHC.Internal.Show.Show Agda.Syntax.Common.Quantity instance GHC.Internal.Show.Show Agda.Syntax.Common.QωOrigin instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Common.Ranged a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Common.RecordDirectives' a) instance GHC.Internal.Show.Show Agda.Syntax.Common.Relevance instance (GHC.Internal.Show.Show m, GHC.Internal.Show.Show n) => GHC.Internal.Show.Show (Agda.Syntax.Common.Renaming' n m) instance (GHC.Internal.Show.Show e, GHC.Internal.Show.Show qn, GHC.Internal.Show.Show nm, GHC.Internal.Show.Show p) => GHC.Internal.Show.Show (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance GHC.Internal.Show.Show m => GHC.Internal.Show.Show (Agda.Syntax.Common.TerminationCheck m) instance GHC.Internal.Show.Show t => GHC.Internal.Show.Show (Agda.Syntax.Common.UnderAddition t) instance GHC.Internal.Show.Show t => GHC.Internal.Show.Show (Agda.Syntax.Common.UnderComposition t) instance GHC.Internal.Show.Show Agda.Syntax.Common.UniverseCheck instance (GHC.Internal.Show.Show m, GHC.Internal.Show.Show n) => GHC.Internal.Show.Show (Agda.Syntax.Common.Using' n m) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Common.WithHiding a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Common.WithOrigin a) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.Arg instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.HasEta' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.MaybePlaceholder instance GHC.Internal.Data.Traversable.Traversable (Agda.Syntax.Common.Named name) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.Ranged instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.RecordDirectives' instance GHC.Internal.Data.Traversable.Traversable (Agda.Syntax.Common.RewriteEqn' qn nm p) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.WithHiding instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Common.WithOrigin instance Agda.Syntax.Common.Underscore Data.ByteString.Internal.Type.ByteString instance Agda.Syntax.Common.Underscore Agda.Syntax.Common.Pretty.Doc instance Agda.Syntax.Common.Underscore GHC.Internal.Base.String -- | Preprocessors for literate code formats. module Agda.Syntax.Parser.Literate -- | List of valid extensions for literate Agda files, and their -- corresponding preprocessors. -- -- If you add new extensions, remember to update test/Utils.hs so that -- test cases ending in the new extensions are found. literateProcessors :: [(String, (Processor, FileType))] -- | Short list of extensions for literate Agda files. For display -- purposes. literateExtsShortList :: List1 String -- | Preprocessor for literate TeX. literateTeX :: Processor -- | Preprocessor for reStructuredText. literateRsT :: Processor -- | Preprocessor for Markdown. literateMd :: Processor -- | Preprocessor for Org mode documents. literateOrg :: Processor -- | Blanks the non-code parts of a given file, preserving positions of -- characters corresponding to code. This way, there is a direct -- correspondence between source positions and positions in the processed -- result. illiterate :: [Layer] -> String atomizeLayers :: Layers -> [(LayerRole, Char)] -- | Type of a literate preprocessor: Invariants: -- --
-- f : Processor ---- -- proposition> f pos s /= [] -- -- proposition> f pos s >>= layerContent == s type Processor = PositionWithoutFile -> String -> [Layer] -- | A list of contiguous layers. type Layers = [Layer] -- | A sequence of characters in a file playing the same role. data Layer Layer :: LayerRole -> IntervalWithoutFile -> String -> Layer [layerRole] :: Layer -> LayerRole [interval] :: Layer -> IntervalWithoutFile [layerContent] :: Layer -> String -- | Role of a character in the file. data LayerRole Markup :: LayerRole Comment :: LayerRole Code :: LayerRole -- | Returns True if the role corresponds to Agda code. isCode :: LayerRole -> Bool -- | Returns True if the layer contains Agda code. isCodeLayer :: Layer -> Bool instance GHC.Classes.Eq Agda.Syntax.Parser.Literate.LayerRole instance Agda.Syntax.Position.HasRangeWithoutFile Agda.Syntax.Parser.Literate.Layer instance GHC.Internal.Show.Show Agda.Syntax.Parser.Literate.Layer instance GHC.Internal.Show.Show Agda.Syntax.Parser.Literate.LayerRole -- | Definitions for fixity, precedence levels, and declared syntax. module Agda.Syntax.Fixity -- | Decorating something with Fixity'. data ThingWithFixity x ThingWithFixity :: x -> Fixity' -> ThingWithFixity x -- | Do we prefer parens around arguments like λ x → x or not? See -- lamBrackets. data ParenPreference PreferParen :: ParenPreference PreferParenless :: ParenPreference preferParen :: ParenPreference -> Bool preferParenless :: ParenPreference -> Bool -- | Precedence is associated with a context. data Precedence TopCtx :: Precedence FunctionSpaceDomainCtx :: Precedence LeftOperandCtx :: Fixity -> Precedence RightOperandCtx :: Fixity -> ParenPreference -> Precedence FunctionCtx :: Precedence ArgumentCtx :: ParenPreference -> Precedence InsideOperandCtx :: Precedence WithFunCtx :: Precedence WithArgCtx :: Precedence DotPatternCtx :: Precedence -- | When printing we keep track of a stack of precedences in order to be -- able to decide whether it's safe to leave out parens around lambdas. -- An empty stack is equivalent to TopCtx. Invariant: `notElem -- TopCtx`. type PrecedenceStack = [Precedence] pushPrecedence :: Precedence -> PrecedenceStack -> PrecedenceStack headPrecedence :: PrecedenceStack -> Precedence -- | Argument context preferring parens. argumentCtx_ :: Precedence -- | Do we need to bracket an operator application of the given fixity in a -- context with the given precedence. opBrackets :: Fixity -> PrecedenceStack -> Bool -- | Do we need to bracket an operator application of the given fixity in a -- context with the given precedence. opBrackets' :: Bool -> Fixity -> PrecedenceStack -> Bool -- | Does a lambda-like thing (lambda, let or pi) need brackets in the -- given context? A peculiar thing with lambdas is that they don't need -- brackets in certain right operand contexts. To decide we need to look -- at the stack of precedences and not just the current precedence. -- Example: m₁ >>= (λ x → x) >>= m₂ (for -- _>>=_ left associative). lamBrackets :: PrecedenceStack -> Bool -- | Does a function application need brackets? appBrackets :: PrecedenceStack -> Bool -- | Does a function application need brackets? appBrackets' :: Bool -> PrecedenceStack -> Bool -- | Does a with application need brackets? withAppBrackets :: PrecedenceStack -> Bool -- | Does a function space need brackets? piBrackets :: PrecedenceStack -> Bool roundFixBrackets :: PrecedenceStack -> Bool instance GHC.Classes.Eq Agda.Syntax.Fixity.ParenPreference instance GHC.Classes.Eq Agda.Syntax.Fixity.Precedence instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Fixity.ThingWithFixity instance GHC.Internal.Base.Functor Agda.Syntax.Fixity.ThingWithFixity instance GHC.Internal.Generics.Generic Agda.Syntax.Fixity.ParenPreference instance GHC.Internal.Generics.Generic Agda.Syntax.Fixity.Precedence instance Agda.Syntax.Position.KillRange x => Agda.Syntax.Position.KillRange (Agda.Syntax.Fixity.ThingWithFixity x) instance Agda.Syntax.Common.LensFixity' (Agda.Syntax.Fixity.ThingWithFixity a) instance Agda.Syntax.Common.LensFixity (Agda.Syntax.Fixity.ThingWithFixity a) instance Control.DeepSeq.NFData Agda.Syntax.Fixity.ParenPreference instance Control.DeepSeq.NFData Agda.Syntax.Fixity.Precedence instance GHC.Classes.Ord Agda.Syntax.Fixity.ParenPreference instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Fixity.Precedence instance GHC.Internal.Show.Show Agda.Syntax.Fixity.ParenPreference instance GHC.Internal.Show.Show Agda.Syntax.Fixity.Precedence instance GHC.Internal.Show.Show x => GHC.Internal.Show.Show (Agda.Syntax.Fixity.ThingWithFixity x) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Fixity.ThingWithFixity -- | The parser monad used by the operator parser module Agda.Syntax.Concrete.Operators.Parser.Monad -- | Memoisation keys. data MemoKey NodeK :: PrecedenceKey -> MemoKey PostLeftsK :: PrecedenceKey -> MemoKey PreRightsK :: PrecedenceKey -> MemoKey TopK :: MemoKey AppK :: MemoKey NonfixK :: MemoKey type PrecedenceKey = Either PrecedenceLevel PrecedenceLevel -- | The parser monad. type Parser tok a = ParserWithGrammar MemoKey tok MaybePlaceholder tok a -- | Runs the parser. parse :: Parser tok a -> [MaybePlaceholder tok] -> [a] -- | Parses a token satisfying the given predicate. The computed value is -- returned. sat' :: (MaybePlaceholder tok -> Maybe a) -> Parser tok a -- | Parses a token satisfying the given predicate. sat :: (MaybePlaceholder tok -> Bool) -> Parser tok (MaybePlaceholder tok) -- | Uses the given document as the printed representation of the given -- parser. The document's precedence is taken to be atomP. doc :: Doc -> Parser tok a -> Parser tok a -- | Memoises the given parser. -- -- Every memoised parser must be annotated with a unique key. -- (Parametrised parsers must use distinct keys for distinct inputs.) memoise :: MemoKey -> Parser tok tok -> Parser tok tok -- | Memoises the given parser, but only if printing, not if parsing. -- -- Every memoised parser must be annotated with a unique key. -- (Parametrised parsers must use distinct keys for distinct inputs.) memoiseIfPrinting :: MemoKey -> Parser tok tok -> Parser tok tok -- | Tries to print the parser, or returns empty, depending on the -- implementation. This function might not terminate. grammar :: Parser tok a -> Doc instance GHC.Classes.Eq Agda.Syntax.Concrete.Operators.Parser.Monad.MemoKey instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Operators.Parser.Monad.MemoKey instance Data.Hashable.Class.Hashable Agda.Syntax.Concrete.Operators.Parser.Monad.MemoKey instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Operators.Parser.Monad.MemoKey -- | Names in the concrete syntax are just strings (or lists of strings for -- qualified names). module Agda.Syntax.Concrete.Name -- | A name is a non-empty list of alternating Ids and Holes. -- A normal name is represented by a singleton list, and operators are -- represented by a list with Holes where the arguments should go. -- For instance: [Hole,Id "+",Hole] is infix addition. -- -- Equality and ordering on Names are defined to ignore range so -- same names in different locations are equal. data Name -- | A (mixfix) identifier. Name :: Range -> NameInScope -> NameParts -> Name [nameRange] :: Name -> Range [nameInScope] :: Name -> NameInScope [nameNameParts] :: Name -> NameParts -- | _. NoName :: Range -> NameId -> Name [nameRange] :: Name -> Range [nameId] :: Name -> NameId type NameParts = List1 NamePart -- | An open mixfix identifier is either prefix, infix, or suffix. That is -- to say: at least one of its extremities is a Hole isOpenMixfix :: Name -> Bool -- | Mixfix identifiers are composed of words and holes, e.g. _+_ -- or if_then_else_ or [_/_]. data NamePart -- | _ part. Hole :: NamePart -- | Identifier part. Id :: RawName -> NamePart -- | QName is a list of namespaces and the name of the constant. -- For the moment assumes namespaces are just Names and not -- explicitly applied modules. Also assumes namespaces are generative by -- just using derived equality. We will have to define an equality -- instance to non-generative namespaces (as well as having some sort of -- lookup table for namespace names). data QName -- | A.rest. Qual :: Name -> QName -> QName -- | x. QName :: Name -> QName -- | Create an ordinary InScope name. simpleName :: RawName -> Name -- | Create a binary operator name in scope. simpleBinaryOperator :: RawName -> Name -- | Create an ordinary InScope name containing a single -- Hole. simpleHole :: Name -- | Don't use on 'NoName{}'. lensNameParts :: Lens' Name NameParts nameToRawName :: Name -> RawName nameParts :: Name -> NameParts nameStringParts :: Name -> [RawName] -- | Parse a string to parts of a concrete name. -- -- Note: stringNameParts "_" == [Id "_"] == nameParts NoName{} stringNameParts :: String -> NameParts -- | Number of holes in a Name (i.e., arity of a mixfix-operator). class NumHoles a numHoles :: NumHoles a => a -> Int -- | Is the name an operator? Needs at least 2 NameParts. isOperator :: Name -> Bool isHole :: NamePart -> Bool isPrefix :: Name -> Bool isPostfix :: Name -> Bool isInfix :: Name -> Bool isNonfix :: Name -> Bool data NameInScope InScope :: NameInScope NotInScope :: NameInScope class LensInScope a lensInScope :: LensInScope a => Lens' a NameInScope isInScope :: LensInScope a => a -> NameInScope mapInScope :: LensInScope a => (NameInScope -> NameInScope) -> a -> a setInScope :: LensInScope a => a -> a setNotInScope :: LensInScope a => a -> a -- | Method by which to generate fresh unshadowed names. data FreshNameMode -- | Append an integer Unicode subscript: x, x₁, x₂, … UnicodeSubscript :: FreshNameMode -- | Append an integer ASCII counter: x, x1, x2, … AsciiCounter :: FreshNameMode nextRawName :: FreshNameMode -> RawName -> RawName -- | Get the next version of the concrete name. For instance, nextName -- "x" = "x₁". The name must not be a NoName. nextName :: FreshNameMode -> Name -> Name -- | Zoom on the last non-hole in a name. lastIdPart :: Lens' NameParts RawName -- | Get the first version of the concrete name that does not satisfy the -- given predicate. firstNonTakenName :: FreshNameMode -> (Name -> Bool) -> Name -> Name -- | Lens for accessing and modifying the suffix of a name. The suffix of a -- NoName is always Nothing, and should not be changed. nameSuffix :: Lens' Name (Maybe Suffix) -- | Split a name into a base name plus a suffix. nameSuffixView :: Name -> (Maybe Suffix, Name) -- | Replaces the suffix of a name. Unless the suffix is Nothing, -- the name should not be NoName. setNameSuffix :: Maybe Suffix -> Name -> Name -- | Get a raw version of the name with all suffixes removed. For instance, -- nameRoot "x₁₂₃" = "x". nameRoot :: Name -> RawName sameRoot :: Name -> Name -> Bool -- | Lens for the unqualified part of a QName lensQNameName :: Lens' QName Name -- |
-- qualify A.B x == A.B.x --qualify :: QName -> Name -> QName -- |
-- unqualify A.B.x == x ---- -- The range is preserved. unqualify :: QName -> Name -- |
-- qnameParts A.B.x = [A, B, x] --qnameParts :: QName -> List1 Name -- | Is the name (un)qualified? isQualified :: QName -> Bool isUnqualified :: QName -> Maybe Name -- |
-- noName_ = noName noRange --noName_ :: Name noName :: Range -> Name -- | Check whether a name is the empty name "_". class IsNoName a isNoName :: IsNoName a => a -> Bool ($dmisNoName) :: forall (t :: Type -> Type) b. (IsNoName a, Foldable t, IsNoName b, t b ~ a) => a -> Bool instance GHC.Classes.Eq Agda.Syntax.Concrete.Name.Name instance GHC.Classes.Eq Agda.Syntax.Concrete.Name.NameInScope instance GHC.Classes.Eq Agda.Syntax.Concrete.Name.NamePart instance GHC.Classes.Eq Agda.Syntax.Concrete.Name.QName instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Name.NamePart instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Concrete.Name.IsNoName Data.ByteString.Internal.Type.ByteString instance Agda.Syntax.Concrete.Name.IsNoName GHC.Internal.Base.String instance Agda.Syntax.Concrete.Name.IsNoName Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Concrete.Name.IsNoName Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Concrete.Name.IsNoName a => Agda.Syntax.Concrete.Name.IsNoName (Agda.Syntax.Common.Ranged a) instance Agda.Syntax.Concrete.Name.IsNoName a => Agda.Syntax.Concrete.Name.IsNoName (Agda.Syntax.Common.WithOrigin a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Concrete.Name.LensInScope Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Concrete.Name.LensInScope Agda.Syntax.Concrete.Name.NameInScope instance Agda.Syntax.Concrete.Name.LensInScope Agda.Syntax.Concrete.Name.QName instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Name.Name instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Name.NameInScope instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Name.NamePart instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Concrete.Name.NameParts instance Agda.Syntax.Concrete.Name.NumHoles Agda.Syntax.Concrete.Name.QName instance GHC.Classes.Ord Agda.Syntax.Concrete.Name.Name instance GHC.Classes.Ord Agda.Syntax.Concrete.Name.NamePart instance GHC.Classes.Ord Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Name.NamePart instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Position.SetRange Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Position.SetRange Agda.Syntax.Concrete.Name.QName instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Name.Name instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Name.NameInScope instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Name.NamePart instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Common.Underscore Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Common.Underscore Agda.Syntax.Concrete.Name.QName -- | Provide names for the errors Agda throws.Options/Er module Agda.Interaction.Options.Errors -- | Extra information for error CannotQuoteTerm. data CannotQuoteTerm CannotQuoteTermHidden :: CannotQuoteTerm CannotQuoteTermNothing :: CannotQuoteTerm -- | What kind of declaration? -- -- See also DataRecOrFun. data DataRecOrFun_ -- | Name of a data type. DataName_ :: DataRecOrFun_ -- | Name of a record type. RecName_ :: DataRecOrFun_ -- | Name of a function. FunName_ :: DataRecOrFun_ -- | The reason for an ErasedDatatype error. data ErasedDatatypeReason -- | There are several constructors. SeveralConstructors :: ErasedDatatypeReason -- | The flag --erased-matches is not used. NoErasedMatches :: ErasedDatatypeReason -- | The K rule is not activated. NoK :: ErasedDatatypeReason -- | Things not allowed in dot patterns. data NotAllowedInDotPatterns LetExpressions :: NotAllowedInDotPatterns PatternLambdas :: NotAllowedInDotPatterns -- | Reasons for error NotAValidLetBinding. data NotAValidLetBinding MissingRHS :: NotAValidLetBinding NotAValidLetPattern :: NotAValidLetBinding WhereClausesNotAllowed :: NotAValidLetBinding -- | Reasons for error NotAValidLetExpression. data NotAValidLetExpression MissingBody :: NotAValidLetExpression -- | Symbolic name of an Agda error. data ErrorName ExecError_ :: ExecError_ -> ErrorName GHCBackendError_ :: GHCBackendError_ -> ErrorName ImpossibleConstructor_ :: NegativeUnification_ -> ErrorName InteractionError_ :: InteractionError_ -> ErrorName JSBackendError_ :: JSBackendError_ -> ErrorName NicifierError_ :: DeclarationException_ -> ErrorName SplitError_ :: SplitError_ -> ErrorName UnquoteError_ :: UnquoteError_ -> ErrorName CompilationError_ :: ErrorName CustomBackendError_ :: ErrorName GenericError_ :: ErrorName GenericDocError_ :: ErrorName InternalError_ :: ErrorName LibraryError_ :: ErrorName NonFatalErrors_ :: ErrorName NotImplemented_ :: ErrorName NotSupported_ :: ErrorName OptionError_ :: ErrorName SyntaxError_ :: ErrorName AbsentRHSRequiresAbsurdPattern_ :: ErrorName AbstractConstructorNotInScope_ :: ErrorName AmbiguousConstructor_ :: ErrorName AmbiguousField_ :: ErrorName AmbiguousModule_ :: ErrorName AmbiguousName_ :: ErrorName AmbiguousOverloadedProjection_ :: ErrorName AmbiguousParseForApplication_ :: ErrorName AmbiguousParseForLHS_ :: ErrorName AmbiguousProjection_ :: ErrorName AmbiguousTopLevelModuleName_ :: ErrorName AsPatternInPatternSynonym_ :: ErrorName AttributeKindNotEnabled_ :: ErrorName BackendDoesNotSupportOnlyScopeChecking_ :: ErrorName BadArgumentsToPatternSynonym_ :: ErrorName BothWithAndRHS_ :: ErrorName BuiltinInParameterisedModule_ :: ErrorName BuiltinMustBeConstructor_ :: ErrorName BuiltinMustBeData_ :: ErrorName BuiltinMustBeDef_ :: ErrorName BuiltinMustBeFunction_ :: ErrorName BuiltinMustBePostulate_ :: ErrorName CannotApply_ :: ErrorName CannotEliminateWithPattern_ :: ErrorName CannotEliminateWithProjection_ :: ErrorName CannotGenerateHCompClause_ :: ErrorName CannotGenerateTransportClause_ :: ErrorName CannotQuote_ :: CannotQuote_ -> ErrorName CannotQuoteTerm_ :: CannotQuoteTerm -> ErrorName CannotResolveAmbiguousPatternSynonym_ :: ErrorName CannotRewriteByNonEquation_ :: ErrorName CannotSolveSizeConstraints_ :: ErrorName CantResolveOverloadedConstructorsTargetingSameDatatype_ :: ErrorName ClashingDefinition_ :: ErrorName ClashingModule_ :: ErrorName ComatchingDisabledForRecord_ :: ErrorName ConstructorDoesNotTargetGivenType_ :: ErrorName ConstructorPatternInWrongDatatype_ :: ErrorName ContradictorySizeConstraint_ :: ErrorName CopatternHeadNotProjection_ :: ErrorName CubicalCompilationNotSupported_ :: ErrorName CubicalNotErasure_ :: ErrorName CubicalPrimitiveNotFullyApplied_ :: ErrorName CyclicModuleDependency_ :: ErrorName DatatypeIndexPolarity_ :: ErrorName DeBruijnIndexOutOfScope_ :: ErrorName DeclarationsAfterTopLevelModule_ :: ErrorName DefinitionInDifferentModule_ :: ErrorName DefinitionIsErased_ :: ErrorName DefinitionIsIrrelevant_ :: ErrorName DoNotationError_ :: ErrorName DoesNotMentionTicks_ :: ErrorName DotPatternInPatternSynonym_ :: ErrorName DuplicateBuiltinBinding_ :: ErrorName DuplicateConstructors_ :: ErrorName DuplicateFields_ :: ErrorName DuplicateImports_ :: ErrorName DuplicateOverlapPragma_ :: ErrorName DuplicatePrimitiveBinding_ :: ErrorName EmptyTypeOfSizes_ :: ErrorName ExpectedBindingForParameter_ :: ErrorName ExpectedIntervalLiteral_ :: ErrorName FieldOutsideRecord_ :: ErrorName FaceConstraintDisjunction_ :: ErrorName FaceConstraintUnsatisfiable_ :: ErrorName FileNotFound_ :: ErrorName ForcedConstructorNotInstantiated_ :: ErrorName FunctionTypeInSizeUniv_ :: ErrorName GeneralizeCyclicDependency_ :: ErrorName GeneralizeNotSupportedHere_ :: ErrorName GeneralizedVarInLetOpenedModule_ :: ErrorName ModuleNameHashCollision_ :: ErrorName HidingMismatch_ :: ErrorName IdiomBracketError_ :: ErrorName InvalidBuiltin_ :: ErrorName InvalidDottedExpression_ :: ErrorName IllTypedPatternAfterWithAbstraction_ :: ErrorName IllegalDeclarationBeforeTopLevelModule_ :: ErrorName IllegalDeclarationInDataDefinition_ :: ErrorName IllegalHidingInPostfixProjection_ :: ErrorName IllegalInstanceVariableInPatternSynonym_ :: ErrorName IllegalLetInTelescope_ :: ErrorName IllegalPatternInTelescope_ :: ErrorName IllformedProjectionPatternAbstract_ :: ErrorName IllformedProjectionPatternConcrete_ :: ErrorName IncorrectTypeForRewriteRelation_ :: ErrorName InstanceNoCandidate_ :: ErrorName InstanceSearchDepthExhausted_ :: ErrorName InvalidFileName_ :: ErrorName InvalidModalTelescopeUse_ :: ErrorName InvalidPattern_ :: ErrorName InvalidProjectionParameter_ :: ErrorName InvalidPun_ :: ConstructorOrPatternSynonym -> ErrorName InvalidTypeSort_ :: ErrorName LambdaIsErased_ :: ErrorName LibTooFarDown_ :: ErrorName LiteralTooBig_ :: ErrorName MacroResultTypeMismatch_ :: ErrorName MetaCannotDependOn_ :: ErrorName MetaErasedSolution_ :: ErrorName MetaIrrelevantSolution_ :: ErrorName MismatchedProjectionsError_ :: ErrorName MissingTypeSignature_ :: DataRecOrFun_ -> ErrorName ModuleArityMismatch_ :: ErrorName ModuleDefinedInOtherFile_ :: ErrorName ModuleNameDoesntMatchFileName_ :: ErrorName ModuleNameUnexpected_ :: ErrorName MultipleFixityDecls_ :: ErrorName MultiplePolarityPragmas_ :: ErrorName ExplicitPolarityVsPragma_ :: ErrorName ConstructorNameOfNonRecord_ :: ErrorName NamedWhereModuleInRefinedContext_ :: ErrorName NeedOptionAllowExec_ :: ErrorName NeedOptionCopatterns_ :: ErrorName NeedOptionCubical_ :: ErrorName NeedOptionPatternMatching_ :: ErrorName NeedOptionProp_ :: ErrorName NeedOptionRewriting_ :: ErrorName NeedOptionSizedTypes_ :: ErrorName NeedOptionTwoLevel_ :: ErrorName NeedOptionUniversePolymorphism_ :: ErrorName NegativeLiteralInPattern_ :: ErrorName NoBindingForBuiltin_ :: ErrorName NoBindingForPrimitive_ :: ErrorName NoKnownRecordWithSuchFields_ :: ErrorName NoParameterOfName_ :: ErrorName NoParseForApplication_ :: ErrorName NoParseForLHS_ :: ErrorName NoSuchBuiltinName_ :: ErrorName NoSuchModule_ :: ErrorName NoSuchPrimitiveFunction_ :: ErrorName NotAValidLetBinding_ :: Maybe NotAValidLetBinding -> ErrorName NotAValidLetExpression_ :: NotAValidLetExpression -> ErrorName NotAllowedInDotPatterns_ :: NotAllowedInDotPatterns -> ErrorName NotAnExpression_ :: ErrorName NotInScope_ :: ErrorName NotLeqSort_ :: ErrorName NotValidBeforeField_ :: ErrorName OverlappingProjects_ :: ErrorName PathAbstractionFailed_ :: ErrorName PatternInPathLambda_ :: ErrorName PatternInSystem_ :: ErrorName PatternSynonymArgumentShadows_ :: ConstructorOrPatternSynonym -> ErrorName PostulatedSizeInModule_ :: ErrorName PrivateRecordField_ :: ErrorName ProjectionIsIrrelevant_ :: ErrorName QualifiedLocalModule_ :: ErrorName QuantityMismatch_ :: ErrorName RecordIsErased_ :: ErrorName RecursiveRecordNeedsInductivity_ :: ErrorName ReferencesFutureVariables_ :: ErrorName RelevanceMismatch_ :: ErrorName RepeatedNamesInImportDirective_ :: ErrorName RepeatedVariablesInPattern_ :: ErrorName ShadowedModule_ :: ErrorName ShouldBeASort_ :: ErrorName ShouldBeEmpty_ :: ErrorName ShouldBePath_ :: ErrorName ShouldBePi_ :: ErrorName ShouldBeRecordPattern_ :: ErrorName ShouldBeRecordType_ :: ErrorName ShouldEndInApplicationOfTheDatatype_ :: ErrorName SolvedButOpenHoles_ :: ErrorName SortCannotDependOnItsIndex_ :: ErrorName SortDoesNotAdmitDataDefinitions_ :: ErrorName SortOfSplitVarError_ :: ErrorName SplitInProp_ :: ErrorName SplitOnAbstract_ :: ErrorName SplitOnCoinductive_ :: ErrorName SplitOnIrrelevant_ :: ErrorName SplitOnNonEtaRecord_ :: ErrorName SplitOnNonVariable_ :: ErrorName SplitOnPartial_ :: ErrorName SplitOnUnchecked_ :: ErrorName SplitOnUnusableCohesion_ :: ErrorName SplitOnUnusablePolarity_ :: ErrorName TacticAttributeNotAllowed_ :: ErrorName TooFewArgumentsToPatternSynonym_ :: ErrorName TooFewPatternsInWithClause_ :: ErrorName TooManyFields_ :: ErrorName TooManyPatternsInWithClause_ :: ErrorName TriedToCopyConstrainedPrim_ :: ErrorName InvalidInstanceHeadType_ :: ErrorName UnboundVariablesInPatternSynonym_ :: ErrorName UnequalCohesion_ :: ErrorName UnequalFiniteness_ :: ErrorName UnequalHiding_ :: ErrorName UnequalLevel_ :: ErrorName UnequalQuantity_ :: ErrorName UnequalRelevance_ :: ErrorName UnequalPolarity_ :: ErrorName UnequalSorts_ :: ErrorName UnequalTerms_ :: ErrorName UnexpectedModalityAnnotationInParameter_ :: ErrorName UnexpectedParameter_ :: ErrorName UnexpectedTypeSignatureForParameter_ :: ErrorName UnexpectedWithPatterns_ :: ErrorName UnknownBackend_ :: ErrorName UnusableAtModality_ :: ErrorName UnusedVariableInPatternSynonym_ :: ErrorName VariableIsErased_ :: ErrorName VariableIsIrrelevant_ :: ErrorName VariableIsOfUnusableCohesion_ :: ErrorName VariableIsOfUnusablePolarity_ :: ErrorName WithClausePatternMismatch_ :: ErrorName WithOnFreeVariable_ :: ErrorName WrongAnnotationInLambda_ :: ErrorName WrongArgInfoForPrimitive_ :: ErrorName WrongCohesionInLambda_ :: ErrorName WrongPolarityInLambda_ :: ErrorName WrongHidingInApplication_ :: ErrorName WrongHidingInLHS_ :: ErrorName WrongHidingInLambda_ :: ErrorName WrongHidingInProjection_ :: ErrorName WrongIrrelevanceInLambda_ :: ErrorName WrongNamedArgument_ :: ErrorName WrongNumberOfConstructorArguments_ :: ErrorName WrongQuantityInLambda_ :: ErrorName WrongSharpArity_ :: ErrorName -- | Nicifier errors. data DeclarationException_ AmbiguousConstructorN_ :: DeclarationException_ AmbiguousFunClauses_ :: DeclarationException_ BadMacroDef_ :: DeclarationException_ DisallowedInterleavedMutual_ :: DeclarationException_ DuplicateAnonDeclaration_ :: DeclarationException_ DuplicateDefinition_ :: DeclarationException_ InvalidMeasureMutual_ :: DeclarationException_ MissingWithClauses_ :: DeclarationException_ MultipleEllipses_ :: DeclarationException_ OpaqueInMutual_ :: DeclarationException_ UnfoldingOutsideOpaque_ :: DeclarationException_ UnquoteDefRequiresSignature_ :: DeclarationException_ WrongContentBlock_ :: DeclarationException_ WrongDefinition_ :: DeclarationException_ data GHCBackendError_ ConstructorCountMismatch_ :: GHCBackendError_ NotAHaskellType_ :: NotAHaskellType_ -> GHCBackendError_ WrongTypeOfMain_ :: GHCBackendError_ data JSBackendError_ BadCompilePragma_ :: JSBackendError_ data InteractionError_ CannotGive_ :: InteractionError_ CannotRefine_ :: InteractionError_ CaseSplitError_ :: InteractionError_ ExpectedIdentifier_ :: InteractionError_ ExpectedApplication_ :: InteractionError_ NoActionForInteractionPoint_ :: InteractionError_ NoSuchInteractionPoint_ :: InteractionError_ UnexpectedWhere_ :: InteractionError_ data NegativeUnification_ UnifyConflict_ :: NegativeUnification_ UnifyCycle_ :: NegativeUnification_ data NotAHaskellType_ BadDontCare_ :: NotAHaskellType_ BadLambda_ :: NotAHaskellType_ BadMeta_ :: NotAHaskellType_ NoPragmaFor_ :: NotAHaskellType_ NotCompiled_ :: NotAHaskellType_ WrongPragmaFor_ :: NotAHaskellType_ data SplitError_ ErasedDatatype_ :: ErasedDatatypeReason -> SplitError_ GenericSplitError_ :: SplitError_ BlockedType_ :: SplitError_ CannotCreateMissingClause_ :: SplitError_ CoinductiveDatatype_ :: SplitError_ CosplitCatchall_ :: SplitError_ CosplitNoRecordType_ :: SplitError_ CosplitNoTarget_ :: SplitError_ NotADatatype_ :: SplitError_ UnificationStuck_ :: SplitError_ data CannotQuote_ CannotQuoteAmbiguous_ :: CannotQuote_ CannotQuoteExpression_ :: CannotQuote_ CannotQuoteHidden_ :: CannotQuote_ CannotQuoteNothing_ :: CannotQuote_ CannotQuotePattern_ :: CannotQuote_ data ExecError_ ExeNotTrusted_ :: ExecError_ ExeNotFound_ :: ExecError_ ExeNotExecutable_ :: ExecError_ data UnquoteError_ BlockedOnMeta_ :: UnquoteError_ CannotDeclareHiddenFunction_ :: UnquoteError_ CommitAfterDef_ :: UnquoteError_ ConInsteadOfDef_ :: UnquoteError_ DefineDataNotData_ :: UnquoteError_ DefInsteadOfCon_ :: UnquoteError_ MissingDeclaration_ :: UnquoteError_ MissingDefinition_ :: UnquoteError_ NakedUnquote_ :: UnquoteError_ NonCanonical_ :: UnquoteError_ PatLamWithoutClauses_ :: UnquoteError_ StaleMeta_ :: UnquoteError_ TooManyParameters_ :: UnquoteError_ UnboundName_ :: UnquoteError_ defaultErrorNameString :: Show a => a -> String erasedDatatypeReasonString :: ErasedDatatypeReason -> String errorNameString :: ErrorName -> String constructorOrPatternSynonymNameString :: ConstructorOrPatternSynonym -> String dataRecOrFunString :: DataRecOrFun_ -> String declarationExceptionNameString :: DeclarationException_ -> String ghcBackendErrorNameString :: GHCBackendError_ -> String jsBackendErrorNameString :: JSBackendError_ -> String interactionErrorNameString :: InteractionError_ -> String negativeUnificationErrorNameString :: NegativeUnification_ -> String notAHaskellTypeErrorNameString :: NotAHaskellType_ -> String notAValidLetBindingString :: NotAValidLetBinding -> String notAValidLetExpressionString :: NotAValidLetExpression -> String notAllowedInDotPatternsString :: NotAllowedInDotPatterns -> String splitErrorNameString :: SplitError_ -> String cannotQuoteNameString :: CannotQuote_ -> String cannotQuoteTermNameString :: CannotQuoteTerm -> String execErrorNameString :: ExecError_ -> String unquoteErrorNameString :: UnquoteError_ -> String -- | Print list of errors. helpErrors :: String verbalizeNotAValidLetBinding :: NotAValidLetBinding -> String verbalizeNotAValidLetExpression :: NotAValidLetExpression -> String instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.CannotQuoteTerm instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.CannotQuote_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.DataRecOrFun_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.DeclarationException_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.ErasedDatatypeReason instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.ErrorName instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.ExecError_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.GHCBackendError_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.InteractionError_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.JSBackendError_ instance (GHC.Internal.Enum.Bounded a, GHC.Internal.Enum.Enum a) => GHC.Internal.Enum.Bounded (GHC.Internal.Maybe.Maybe a) instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.NegativeUnification_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.NotAHaskellType_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.NotAValidLetBinding instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.NotAValidLetExpression instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.NotAllowedInDotPatterns instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.SplitError_ instance GHC.Internal.Enum.Bounded Agda.Interaction.Options.Errors.UnquoteError_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.CannotQuoteTerm instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.CannotQuote_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.DataRecOrFun_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.DeclarationException_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.ErasedDatatypeReason instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.ErrorName instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.ExecError_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.GHCBackendError_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.InteractionError_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.JSBackendError_ instance (GHC.Internal.Enum.Bounded a, GHC.Internal.Enum.Enum a) => GHC.Internal.Enum.Enum (GHC.Internal.Maybe.Maybe a) instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.NegativeUnification_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.NotAHaskellType_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.NotAValidLetBinding instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.NotAValidLetExpression instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.NotAllowedInDotPatterns instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.SplitError_ instance GHC.Internal.Enum.Enum Agda.Interaction.Options.Errors.UnquoteError_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.CannotQuoteTerm instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.CannotQuote_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.DataRecOrFun_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.DeclarationException_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.ErasedDatatypeReason instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.ErrorName instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.ExecError_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.GHCBackendError_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.InteractionError_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.JSBackendError_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.NegativeUnification_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.NotAHaskellType_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.NotAValidLetBinding instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.NotAValidLetExpression instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.NotAllowedInDotPatterns instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.SplitError_ instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Errors.UnquoteError_ instance Control.DeepSeq.NFData Agda.Interaction.Options.Errors.CannotQuoteTerm instance Control.DeepSeq.NFData Agda.Interaction.Options.Errors.ErasedDatatypeReason instance Control.DeepSeq.NFData Agda.Interaction.Options.Errors.NotAValidLetBinding instance Control.DeepSeq.NFData Agda.Interaction.Options.Errors.NotAValidLetExpression instance Control.DeepSeq.NFData Agda.Interaction.Options.Errors.NotAllowedInDotPatterns instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.CannotQuoteTerm instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.CannotQuote_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.DataRecOrFun_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.DeclarationException_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.ErasedDatatypeReason instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.ErrorName instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.ExecError_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.GHCBackendError_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.InteractionError_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.JSBackendError_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.NegativeUnification_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.NotAHaskellType_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.NotAValidLetBinding instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.NotAValidLetExpression instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.NotAllowedInDotPatterns instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.SplitError_ instance GHC.Internal.Show.Show Agda.Interaction.Options.Errors.UnquoteError_ module Agda.Compiler.JS.Syntax data Exp Self :: Exp Local :: LocalId -> Exp Global :: GlobalId -> Exp Undefined :: Exp Null :: Exp String :: Text -> Exp Char :: Char -> Exp Integer :: Integer -> Exp Double :: Double -> Exp Lambda :: Nat -> Exp -> Exp Object :: Map MemberId Exp -> Exp Array :: [(Comment, Exp)] -> Exp Apply :: Exp -> [Exp] -> Exp Lookup :: Exp -> MemberId -> Exp If :: Exp -> Exp -> Exp -> Exp BinOp :: Exp -> String -> Exp -> Exp PreOp :: String -> Exp -> Exp Const :: String -> Exp -- | Arbitrary JS code. PlainJS :: String -> Exp newtype LocalId LocalId :: Nat -> LocalId newtype GlobalId GlobalId :: [String] -> GlobalId data MemberId MemberId :: String -> MemberId MemberIndex :: Int -> Comment -> MemberId newtype Comment Comment :: String -> Comment data Export Export :: JSQName -> Exp -> Export [expName] :: Export -> JSQName [defn] :: Export -> Exp type JSQName = List1 MemberId data Module Module :: GlobalId -> [GlobalId] -> [Export] -> Maybe Exp -> Module [modName] :: Module -> GlobalId [imports] :: Module -> [GlobalId] [exports] :: Module -> [Export] [callMain] :: Module -> Maybe Exp class Uses a uses :: Uses a => a -> Set JSQName ($dmuses) :: forall (t :: Type -> Type) b. (Uses a, a ~ t b, Foldable t, Uses b) => a -> Set JSQName class Globals a globals :: Globals a => a -> Set GlobalId ($dmglobals) :: forall (t :: Type -> Type) b. (Globals a, a ~ t b, Foldable t, Globals b) => a -> Set GlobalId instance GHC.Classes.Eq Agda.Compiler.JS.Syntax.Comment instance GHC.Classes.Eq Agda.Compiler.JS.Syntax.Exp instance GHC.Classes.Eq Agda.Compiler.JS.Syntax.GlobalId instance GHC.Classes.Eq Agda.Compiler.JS.Syntax.LocalId instance GHC.Classes.Eq Agda.Compiler.JS.Syntax.MemberId instance Agda.Compiler.JS.Syntax.Globals Agda.Compiler.JS.Syntax.Comment instance Agda.Compiler.JS.Syntax.Globals Agda.Compiler.JS.Syntax.Exp instance Agda.Compiler.JS.Syntax.Globals Agda.Compiler.JS.Syntax.Export instance Agda.Compiler.JS.Syntax.Globals a => Agda.Compiler.JS.Syntax.Globals [a] instance Agda.Compiler.JS.Syntax.Globals a => Agda.Compiler.JS.Syntax.Globals (Data.Map.Internal.Map k a) instance Agda.Compiler.JS.Syntax.Globals a => Agda.Compiler.JS.Syntax.Globals (GHC.Internal.Maybe.Maybe a) instance Agda.Compiler.JS.Syntax.Globals Agda.Compiler.JS.Syntax.Module instance (Agda.Compiler.JS.Syntax.Globals a, Agda.Compiler.JS.Syntax.Globals b) => Agda.Compiler.JS.Syntax.Globals (a, b) instance (Agda.Compiler.JS.Syntax.Globals a, Agda.Compiler.JS.Syntax.Globals b, Agda.Compiler.JS.Syntax.Globals c) => Agda.Compiler.JS.Syntax.Globals (a, b, c) instance GHC.Internal.Base.Monoid Agda.Compiler.JS.Syntax.Comment instance GHC.Classes.Ord Agda.Compiler.JS.Syntax.Comment instance GHC.Classes.Ord Agda.Compiler.JS.Syntax.GlobalId instance GHC.Classes.Ord Agda.Compiler.JS.Syntax.LocalId instance GHC.Classes.Ord Agda.Compiler.JS.Syntax.MemberId instance GHC.Internal.Base.Semigroup Agda.Compiler.JS.Syntax.Comment instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.Comment instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.Exp instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.Export instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.GlobalId instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.LocalId instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.MemberId instance GHC.Internal.Show.Show Agda.Compiler.JS.Syntax.Module instance Agda.Compiler.JS.Syntax.Uses Agda.Compiler.JS.Syntax.Comment instance Agda.Compiler.JS.Syntax.Uses Agda.Compiler.JS.Syntax.Exp instance Agda.Compiler.JS.Syntax.Uses Agda.Compiler.JS.Syntax.Export instance Agda.Compiler.JS.Syntax.Uses a => Agda.Compiler.JS.Syntax.Uses [a] instance Agda.Compiler.JS.Syntax.Uses a => Agda.Compiler.JS.Syntax.Uses (Data.Map.Internal.Map k a) instance (Agda.Compiler.JS.Syntax.Uses a, Agda.Compiler.JS.Syntax.Uses b) => Agda.Compiler.JS.Syntax.Uses (a, b) instance (Agda.Compiler.JS.Syntax.Uses a, Agda.Compiler.JS.Syntax.Uses b, Agda.Compiler.JS.Syntax.Uses c) => Agda.Compiler.JS.Syntax.Uses (a, b, c) module Agda.Compiler.JS.Substitution map :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp shift :: Nat -> Exp -> Exp shiftFrom :: Nat -> Nat -> Exp -> Exp shifter :: Nat -> Nat -> LocalId -> Exp subst :: Nat -> [Exp] -> Exp -> Exp substituter :: Nat -> [Exp] -> Nat -> LocalId -> Exp substShift :: Nat -> Nat -> [Exp] -> Exp -> Exp map' :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp subst' :: Nat -> [Exp] -> Exp -> Exp apply :: Exp -> [Exp] -> Exp lookup :: Exp -> MemberId -> Exp self :: Exp -> Exp -> Exp fix :: Exp -> Exp curriedApply :: Exp -> [Exp] -> Exp curriedLambda :: Nat -> Exp -> Exp emp :: Exp union :: Exp -> Exp -> Exp vine :: [MemberId] -> Exp -> Exp object :: [([MemberId], Exp)] -> Exp module Agda.Compiler.JS.Pretty data JSModuleStyle JSES6 :: JSModuleStyle JSCJS :: JSModuleStyle JSAMD :: JSModuleStyle data Doc Doc :: String -> Doc Indent :: Int -> Doc -> Doc Group :: Doc -> Doc Beside :: Doc -> Doc -> Doc Above :: Doc -> Doc -> Doc Enclose :: Doc -> Doc -> Doc -> Doc Space :: Doc Empty :: Doc minifiedCodeLinesLength :: Int render :: Bool -> Doc -> String ($+$) :: Doc -> Doc -> Doc infixr 5 $+$ -- | Separate by blank line. ($++$) :: Doc -> Doc -> Doc infixr 5 $++$ -- | Separate by space that will be removed by minify. -- -- For non-removable space, use d <> " " <> d'. (<+>) :: Doc -> Doc -> Doc infixr 6 <+> text :: String -> Doc group :: Doc -> Doc indentBy :: Int -> Doc -> Doc enclose :: Doc -> Doc -> Doc -> Doc space :: Doc indent :: Doc -> Doc hcat :: [Doc] -> Doc vcat :: [Doc] -> Doc -- | Concatenate vertically, separated by blank lines. vsep :: [Doc] -> Doc punctuate :: Doc -> [Doc] -> Doc parens :: Doc -> Doc brackets :: Doc -> Doc braces :: Doc -> Doc -- | Apply parens to Doc if boolean is true. mparens :: Bool -> Doc -> Doc unescape :: Char -> String unescapes :: String -> Doc class Pretty a pretty :: Pretty a => (Nat, Bool, JSModuleStyle) -> a -> Doc prettyPrec :: Pretty a => Int -> (Nat, Bool, JSModuleStyle) -> a -> Doc prettyShow :: Pretty a => Bool -> JSModuleStyle -> a -> String class Pretties a pretties :: Pretties a => (Nat, Bool, JSModuleStyle) -> a -> [Doc] block :: (Nat, Bool, JSModuleStyle) -> Exp -> Doc modname :: GlobalId -> Doc exports :: (Nat, Bool, JSModuleStyle) -> Set JSQName -> [Export] -> Doc variableName :: String -> String -- | Check if a string is a valid JS identifier. The check ignores keywords -- as we prepend z_ to our identifiers. The check is conservative and may -- not admit all valid JS identifiers. isValidJSIdent :: String -> Bool instance GHC.Internal.Generics.Generic Agda.Compiler.JS.Pretty.JSModuleStyle instance GHC.Internal.Data.String.IsString Agda.Compiler.JS.Pretty.Doc instance GHC.Internal.Base.Monoid Agda.Compiler.JS.Pretty.Doc instance Agda.Compiler.JS.Pretty.Pretty a => Agda.Compiler.JS.Pretty.Pretties [a] instance (Agda.Compiler.JS.Pretty.Pretty a, Agda.Compiler.JS.Pretty.Pretty b) => Agda.Compiler.JS.Pretty.Pretties (Data.Map.Internal.Map a b) instance Agda.Compiler.JS.Pretty.Pretty a => Agda.Compiler.JS.Pretty.Pretties (Agda.Utils.List1.List1 a) instance Agda.Compiler.JS.Pretty.Pretty Agda.Compiler.JS.Syntax.Comment instance Agda.Compiler.JS.Pretty.Pretty Agda.Compiler.JS.Syntax.Exp instance Agda.Compiler.JS.Pretty.Pretty Agda.Compiler.JS.Syntax.GlobalId instance Agda.Compiler.JS.Pretty.Pretty [(Agda.Compiler.JS.Syntax.GlobalId, Agda.Compiler.JS.Syntax.Export)] instance Agda.Compiler.JS.Pretty.Pretty Agda.Compiler.JS.Syntax.LocalId instance Agda.Compiler.JS.Pretty.Pretty a => Agda.Compiler.JS.Pretty.Pretty (GHC.Internal.Maybe.Maybe a) instance Agda.Compiler.JS.Pretty.Pretty Agda.Compiler.JS.Syntax.MemberId instance Agda.Compiler.JS.Pretty.Pretty Agda.Compiler.JS.Syntax.Module instance (Agda.Compiler.JS.Pretty.Pretty a, Agda.Compiler.JS.Pretty.Pretty b) => Agda.Compiler.JS.Pretty.Pretty (a, b) instance GHC.Internal.Base.Semigroup Agda.Compiler.JS.Pretty.Doc -- | Abstract names carry unique identifiers and stuff. module Agda.Syntax.Abstract.Name commonParentModule :: ModuleName -> ModuleName -> ModuleName -- | Get the name if unambiguous. getUnambiguous :: AmbiguousQName -> Maybe QName -- | Get the first of the ambiguous names. headAmbQ :: AmbiguousQName -> QName -- | Is a name ambiguous. isAmbiguous :: AmbiguousQName -> Bool -- | A module is anonymous if the qualification path ends in an underscore. isAnonymousModuleName :: ModuleName -> Bool isInModule :: QName -> ModuleName -> Bool -- | Is the first module a weak child of the second? isLeChildModuleOf :: ModuleName -> ModuleName -> Bool -- | Is the first module a weak parent of the second? isLeParentModuleOf :: ModuleName -> ModuleName -> Bool -- | Is the first module a proper child of the second? isLtChildModuleOf :: ModuleName -> ModuleName -> Bool -- | Is the first module a proper parent of the second? isLtParentModuleOf :: ModuleName -> ModuleName -> Bool -- | Is the name an operator? isOperator :: QName -> Bool lensQNameName :: Lens' QName Name makeName :: NameId -> Name -> Range -> Fixity' -> Bool -> Name mnameFromList :: [Name] -> ModuleName mnameFromList1 :: List1 Name -> ModuleName mnameToConcrete :: ModuleName -> QName mnameToList1 :: ModuleName -> List1 Name mnameToQName :: ModuleName -> QName nameToArgName :: Name -> ArgName namedArgName :: NamedArg Name -> ArgName -- | Get the next version of the concrete name. For instance, nextName -- "x" = "x₁". The name must not be a NoName. nextName :: FreshNameMode -> Name -> Name noModuleName :: ModuleName qnameFromList :: List1 Name -> QName -- | Turn a qualified name into a concrete name. This should only be used -- as a fallback when looking up the right concrete name in the scope -- fails. qnameToConcrete :: QName -> QName qnameToList :: QName -> List1 Name qnameToList0 :: QName -> [Name] qnameToMName :: QName -> ModuleName qualify :: ModuleName -> Name -> QName qualifyM :: ModuleName -> ModuleName -> ModuleName qualifyQ :: ModuleName -> QName -> QName -- | Convert a Name to a QName (add no module name). qualify_ :: Name -> QName sameRoot :: Name -> Name -> Bool showQNameId :: QName -> String -- | Useful for debugging scoping problems uglyShowName :: Name -> String -- | A singleton "ambiguous" name. unambiguous :: QName -> AmbiguousQName -- | Sets the ranges of the individual names in the module name to match -- those of the corresponding concrete names. If the concrete names are -- fewer than the number of module name name parts, then the initial name -- parts get the range noRange. -- -- C.D.E `withRangesOf` [A, B] returns C.D.E but with -- ranges set as follows: -- --
-- filterUsed used args = [ a | (a, ArgUsed) <- zip args $ used ++ repeat ArgUsed ] ---- -- Examples: -- --
-- filterUsed [] == id -- filterUsed (repeat ArgUsed) == id -- filterUsed (repeat ArgUnused) == const [] --filterUsed :: [ArgUsage] -> [a] -> [a] intView :: TTerm -> Maybe Integer isPrimEq :: TPrim -> Bool -- | Introduces a new binding mkLet :: TTerm -> TTerm -> TTerm mkTApp :: TTerm -> Args -> TTerm mkTLam :: Int -> TTerm -> TTerm negPlusKView :: TTerm -> Maybe (Integer, TTerm) plusKView :: TTerm -> Maybe (Integer, TTerm) tAppView :: TTerm -> (TTerm, [TTerm]) tIfThenElse :: TTerm -> TTerm -> TTerm -> TTerm tInt :: Integer -> TTerm tLamView :: TTerm -> (Int, TTerm) tLetView :: TTerm -> ([TTerm], TTerm) tNegPlusK :: Integer -> TTerm -> TTerm tOp :: TPrim -> TTerm -> TTerm -> TTerm tPlusK :: Integer -> TTerm -> TTerm tUnreachable :: TTerm word64View :: TTerm -> Maybe Word64 -- | Usage status of function arguments in treeless code. data ArgUsage ArgUsed :: ArgUsage ArgUnused :: ArgUsage type Args = [TTerm] data CaseInfo CaseInfo :: Bool -> Erased -> CaseType -> CaseInfo [caseLazy] :: CaseInfo -> Bool -- | Is this a match on an erased argument? [caseErased] :: CaseInfo -> Erased [caseType] :: CaseInfo -> CaseType data CaseType CTData :: QName -> CaseType CTNat :: CaseType CTInt :: CaseType CTChar :: CaseType CTString :: CaseType CTFloat :: CaseType CTQName :: CaseType data Compiled Compiled :: TTerm -> Maybe [ArgUsage] -> Compiled [cTreeless] :: Compiled -> TTerm -- | Nothing if treeless usage analysis has not run yet. [cArgUsage] :: Compiled -> Maybe [ArgUsage] -- | The treeless compiler can behave differently depending on the target -- language evaluation strategy. For instance, more aggressive erasure -- for lazy targets. data EvaluationStrategy LazyEvaluation :: EvaluationStrategy EagerEvaluation :: EvaluationStrategy data TAlt -- | Matches on the given constructor. If the match succeeds, the pattern -- variables are prepended to the current environment (pushes all -- existing variables aArity steps further away) TACon :: QName -> Int -> TTerm -> TAlt [aCon] :: TAlt -> QName [aArity] :: TAlt -> Int [aBody] :: TAlt -> TTerm -- | Binds no variables -- -- The guard must only use the variable that the case expression matches -- on. TAGuard :: TTerm -> TTerm -> TAlt [aGuard] :: TAlt -> TTerm [aBody] :: TAlt -> TTerm TALit :: Literal -> TTerm -> TAlt [aLit] :: TAlt -> Literal [aBody] :: TAlt -> TTerm data TError -- | Code which is unreachable. E.g. absurd branches or missing case -- defaults. Runtime behaviour of unreachable code is undefined, but -- preferably the program will exit with an error message. The compiler -- is free to assume that this code is unreachable and to remove it. TUnreachable :: TError -- | Code which could not be obtained because of a hole in the program. -- This should throw a runtime error. The string gives some information -- about the meta variable that got compiled. TMeta :: String -> TError -- | Compiler-related primitives. This are NOT the same thing as primitives -- in Agda's surface or internal syntax! Some of the primitives have a -- suffix indicating which type of arguments they take, using the -- following naming convention: Char | Type C | Character F | Float I | -- Integer Q | QName S | String data TPrim PAdd :: TPrim PAdd64 :: TPrim PSub :: TPrim PSub64 :: TPrim PMul :: TPrim PMul64 :: TPrim PQuot :: TPrim PQuot64 :: TPrim PRem :: TPrim PRem64 :: TPrim PGeq :: TPrim PLt :: TPrim PLt64 :: TPrim PEqI :: TPrim PEq64 :: TPrim PEqF :: TPrim PEqS :: TPrim PEqC :: TPrim PEqQ :: TPrim PIf :: TPrim PSeq :: TPrim PITo64 :: TPrim P64ToI :: TPrim -- | Treeless Term. All local variables are using de Bruijn indices. data TTerm TVar :: Int -> TTerm TPrim :: TPrim -> TTerm TDef :: QName -> TTerm TApp :: TTerm -> Args -> TTerm TLam :: TTerm -> TTerm TLit :: Literal -> TTerm TCon :: QName -> TTerm -- | introduces a new (non-recursive) local binding. The bound term MUST -- only be evaluated if it is used inside the body. Sharing may happen, -- but is optional. It is also perfectly valid to just inline the bound -- term in the body. TLet :: TTerm -> TTerm -> TTerm -- | Case scrutinee (always variable), case type, default value, -- alternatives First, all TACon alternatives are tried; then all TAGuard -- alternatives in top to bottom order. TACon alternatives must not -- overlap. TCase :: Int -> CaseInfo -> TTerm -> [TAlt] -> TTerm TUnit :: TTerm TSort :: TTerm TErased :: TTerm -- | Used by the GHC backend TCoerce :: TTerm -> TTerm -- | A runtime error, something bad has happened. TError :: TError -> TTerm class Unreachable a -- | Checks if the given expression is unreachable or not. isUnreachable :: Unreachable a => a -> Bool instance GHC.Classes.Eq Agda.Syntax.Treeless.ArgUsage instance GHC.Classes.Eq Agda.Syntax.Treeless.CaseInfo instance GHC.Classes.Eq Agda.Syntax.Treeless.CaseType instance GHC.Classes.Eq Agda.Syntax.Treeless.Compiled instance GHC.Classes.Eq Agda.Syntax.Treeless.EvaluationStrategy instance GHC.Classes.Eq Agda.Syntax.Treeless.TAlt instance GHC.Classes.Eq Agda.Syntax.Treeless.TError instance GHC.Classes.Eq Agda.Syntax.Treeless.TPrim instance GHC.Classes.Eq Agda.Syntax.Treeless.TTerm instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.ArgUsage instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.CaseInfo instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.CaseType instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.Compiled instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.TAlt instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.TError instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.TPrim instance GHC.Internal.Generics.Generic Agda.Syntax.Treeless.TTerm instance Agda.Syntax.Position.KillRange Agda.Syntax.Treeless.Compiled instance Control.DeepSeq.NFData Agda.Syntax.Treeless.ArgUsage instance Control.DeepSeq.NFData Agda.Syntax.Treeless.CaseInfo instance Control.DeepSeq.NFData Agda.Syntax.Treeless.CaseType instance Control.DeepSeq.NFData Agda.Syntax.Treeless.Compiled instance Control.DeepSeq.NFData Agda.Syntax.Treeless.TAlt instance Control.DeepSeq.NFData Agda.Syntax.Treeless.TError instance Control.DeepSeq.NFData Agda.Syntax.Treeless.TPrim instance Control.DeepSeq.NFData Agda.Syntax.Treeless.TTerm instance GHC.Classes.Ord Agda.Syntax.Treeless.ArgUsage instance GHC.Classes.Ord Agda.Syntax.Treeless.CaseInfo instance GHC.Classes.Ord Agda.Syntax.Treeless.CaseType instance GHC.Classes.Ord Agda.Syntax.Treeless.Compiled instance GHC.Classes.Ord Agda.Syntax.Treeless.TAlt instance GHC.Classes.Ord Agda.Syntax.Treeless.TError instance GHC.Classes.Ord Agda.Syntax.Treeless.TPrim instance GHC.Classes.Ord Agda.Syntax.Treeless.TTerm instance GHC.Internal.Show.Show Agda.Syntax.Treeless.ArgUsage instance GHC.Internal.Show.Show Agda.Syntax.Treeless.CaseInfo instance GHC.Internal.Show.Show Agda.Syntax.Treeless.CaseType instance GHC.Internal.Show.Show Agda.Syntax.Treeless.Compiled instance GHC.Internal.Show.Show Agda.Syntax.Treeless.EvaluationStrategy instance GHC.Internal.Show.Show Agda.Syntax.Treeless.TAlt instance GHC.Internal.Show.Show Agda.Syntax.Treeless.TError instance GHC.Internal.Show.Show Agda.Syntax.Treeless.TPrim instance GHC.Internal.Show.Show Agda.Syntax.Treeless.TTerm instance Agda.Syntax.Treeless.Unreachable Agda.Syntax.Treeless.TAlt instance Agda.Syntax.Treeless.Unreachable Agda.Syntax.Treeless.TTerm -- | Translates guard alternatives to if-then-else cascades. -- -- The builtin translation must be run before this transformation. module Agda.Compiler.Treeless.GuardsToPrims convertGuards :: TTerm -> TTerm module Agda.Compiler.Treeless.AsPatterns -- | We lose track of @-patterns in the internal syntax. This pass puts -- them back. recoverAsPatterns :: Monad m => TTerm -> m TTerm instance GHC.Internal.Show.Show Agda.Compiler.Treeless.AsPatterns.AsPat module Agda.Syntax.Parser.Tokens data Token TokKeyword :: Keyword -> Interval -> Token TokId :: (Interval, String) -> Token TokQId :: [(Interval, String)] -> Token TokLiteral :: RLiteral -> Token TokSymbol :: Symbol -> Interval -> Token -- | Arbitrary string (not enclosed in double quotes), used in pragmas. TokString :: (Interval, String) -> Token TokTeX :: (Interval, String) -> Token TokMarkup :: (Interval, String) -> Token TokComment :: (Interval, String) -> Token TokDummy :: Token TokEOF :: Interval -> Token data Keyword KwLet :: Keyword KwIn :: Keyword KwWhere :: Keyword KwData :: Keyword KwCoData :: Keyword KwDo :: Keyword KwPostulate :: Keyword KwAbstract :: Keyword KwPrivate :: Keyword KwInstance :: Keyword KwInterleaved :: Keyword KwMutual :: Keyword KwOverlap :: Keyword KwOpen :: Keyword KwImport :: Keyword KwModule :: Keyword KwPrimitive :: Keyword KwMacro :: Keyword KwInfix :: Keyword KwInfixL :: Keyword KwInfixR :: Keyword KwWith :: Keyword KwRewrite :: Keyword KwForall :: Keyword KwRecord :: Keyword KwConstructor :: Keyword KwField :: Keyword KwInductive :: Keyword KwCoInductive :: Keyword KwEta :: Keyword KwNoEta :: Keyword KwHiding :: Keyword KwUsing :: Keyword KwRenaming :: Keyword KwTo :: Keyword KwPublic :: Keyword KwOpaque :: Keyword KwUnfolding :: Keyword KwOPTIONS :: Keyword KwBUILTIN :: Keyword KwLINE :: Keyword KwFOREIGN :: Keyword KwCOMPILE :: Keyword KwIMPOSSIBLE :: Keyword KwSTATIC :: Keyword KwINJECTIVE :: Keyword KwINJECTIVE_FOR_INFERENCE :: Keyword KwINLINE :: Keyword KwNOINLINE :: Keyword KwETA :: Keyword KwNO_TERMINATION_CHECK :: Keyword KwTERMINATING :: Keyword KwNON_TERMINATING :: Keyword KwNOT_PROJECTION_LIKE :: Keyword KwNON_COVERING :: Keyword KwWARNING_ON_USAGE :: Keyword KwWARNING_ON_IMPORT :: Keyword KwMEASURE :: Keyword KwDISPLAY :: Keyword KwREWRITE :: Keyword KwOVERLAPPABLE :: Keyword KwOVERLAPPING :: Keyword KwOVERLAPS :: Keyword KwINCOHERENT :: Keyword KwQuote :: Keyword KwQuoteTerm :: Keyword KwUnquote :: Keyword KwUnquoteDecl :: Keyword KwUnquoteDef :: Keyword KwSyntax :: Keyword KwPatternSyn :: Keyword KwTactic :: Keyword KwCATCHALL :: Keyword KwVariable :: Keyword KwNO_POSITIVITY_CHECK :: Keyword KwPOLARITY :: Keyword KwNO_UNIVERSE_CHECK :: Keyword -- | Unconditional layout keywords. -- -- Some keywords introduce layout only in certain circumstances, these -- are not included here. layoutKeywords :: [Keyword] data Symbol SymDot :: Symbol SymSemi :: Symbol SymVirtualSemi :: Symbol SymBar :: Symbol SymColon :: Symbol SymArrow :: Symbol SymEqual :: Symbol SymLambda :: Symbol SymUnderscore :: Symbol SymQuestionMark :: Symbol SymAs :: Symbol SymOpenParen :: Symbol SymCloseParen :: Symbol SymOpenIdiomBracket :: Symbol SymCloseIdiomBracket :: Symbol SymEmptyIdiomBracket :: Symbol SymDoubleOpenBrace :: Symbol SymDoubleCloseBrace :: Symbol SymOpenBrace :: Symbol SymCloseBrace :: Symbol SymOpenVirtualBrace :: Symbol SymCloseVirtualBrace :: Symbol SymOpenPragma :: Symbol SymClosePragma :: Symbol SymEllipsis :: Symbol SymDotDot :: Symbol -- | A misplaced end-comment "-}". SymEndComment :: Symbol instance GHC.Classes.Eq Agda.Syntax.Parser.Tokens.Keyword instance GHC.Classes.Eq Agda.Syntax.Parser.Tokens.Symbol instance GHC.Classes.Eq Agda.Syntax.Parser.Tokens.Token instance Agda.Syntax.Position.HasRange Agda.Syntax.Parser.Tokens.Token instance Agda.Syntax.Position.HasRangeWithoutFile Agda.Syntax.Parser.Tokens.Token instance GHC.Internal.Show.Show Agda.Syntax.Parser.Tokens.Keyword instance GHC.Internal.Show.Show Agda.Syntax.Parser.Tokens.Symbol instance GHC.Internal.Show.Show Agda.Syntax.Parser.Tokens.Token module Agda.Syntax.Internal.Elim -- | Eliminations, subsuming applications and projections. data Elim' a -- | Application. Apply :: Arg a -> Elim' a -- | Projection. QName is name of a record projection. Proj :: ProjOrigin -> QName -> Elim' a -- | IApply x y r, x and y are the endpoints IApply :: a -> a -> a -> Elim' a -- | Drop Apply constructor. (Safe) isApplyElim :: Elim' a -> Maybe (Arg a) isApplyElim' :: Empty -> Elim' a -> Arg a -- | Only Apply variant. isProperApplyElim :: Elim' a -> Bool -- | Drop Apply constructors. (Safe) allApplyElims :: [Elim' a] -> Maybe [Arg a] -- | Split at first non-Apply splitApplyElims :: [Elim' a] -> ([Arg a], [Elim' a]) class IsProjElim e isProjElim :: IsProjElim e => e -> Maybe (ProjOrigin, QName) -- | Discards Proj f entries. argsFromElims :: [Elim' t] -> [Arg t] -- | Drop Proj constructors. (Safe) allProjElims :: [Elim' t] -> Maybe [(ProjOrigin, QName)] instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Internal.Elim.Elim' instance GHC.Internal.Base.Functor Agda.Syntax.Internal.Elim.Elim' instance Agda.Syntax.Internal.Elim.IsProjElim (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.Syntax.Common.LensOrigin (Agda.Syntax.Internal.Elim.Elim' a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.Syntax.Common.Pretty.Pretty tm => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Internal.Elim.Elim' tm) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Internal.Elim.Elim' a) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Internal.Elim.Elim' module Agda.Syntax.Internal.Blockers -- | Even if we are not stuck on a meta during reduction we can fail to -- reduce a definition by pattern matching for another reason. data NotBlocked' t -- | The Elim is neutral and blocks a pattern match. StuckOn :: Elim' t -> NotBlocked' t -- | Not enough arguments were supplied to complete the matching. Underapplied :: NotBlocked' t -- | We matched an absurd clause, results in a neutral Def. AbsurdMatch :: NotBlocked' t -- | We ran out of clauses for QName, all considered clauses -- produced an actual mismatch. This can happen when try to reduce a -- function application but we are still missing some function clauses. -- See Agda.TypeChecking.Patterns.Match. MissingClauses :: QName -> NotBlocked' t -- | Reduction was not blocked, we reached a whnf which can be anything but -- a stuck Def. ReallyNotBlocked :: NotBlocked' t -- | What is causing the blocking? Or in other words which metas or -- problems need to be solved to unblock the blocked -- computation/constraint. data Blocker UnblockOnAll :: Set Blocker -> Blocker UnblockOnAny :: Set Blocker -> Blocker -- | Unblock if meta is instantiated UnblockOnMeta :: MetaId -> Blocker UnblockOnProblem :: ProblemId -> Blocker -- | Unblock when function is defined UnblockOnDef :: QName -> Blocker alwaysUnblock :: Blocker neverUnblock :: Blocker unblockOnAll :: Set Blocker -> Blocker unblockOnAny :: Set Blocker -> Blocker unblockOnEither :: Blocker -> Blocker -> Blocker unblockOnBoth :: Blocker -> Blocker -> Blocker unblockOnMeta :: MetaId -> Blocker unblockOnProblem :: ProblemId -> Blocker unblockOnDef :: QName -> Blocker unblockOnAllMetas :: Set MetaId -> Blocker unblockOnAnyMeta :: Set MetaId -> Blocker onBlockingMetasM :: Monad m => (MetaId -> m Blocker) -> Blocker -> m Blocker allBlockingMetas :: Blocker -> Set MetaId allBlockingProblems :: Blocker -> Set ProblemId allBlockingDefs :: Blocker -> Set QName -- | Something where a meta variable may block reduction. Notably a -- top-level meta is considered blocking. This did not use to be the case -- (pre Aug 2020). data Blocked' t a Blocked :: Blocker -> a -> Blocked' t a [theBlocker] :: Blocked' t a -> Blocker [ignoreBlocking] :: Blocked' t a -> a NotBlocked :: NotBlocked' t -> a -> Blocked' t a [blockingStatus] :: Blocked' t a -> NotBlocked' t [ignoreBlocking] :: Blocked' t a -> a -- | When trying to reduce f es, on match failed on one -- elimination e ∈ es that came with info r :: -- NotBlocked. stuckOn e r produces the new -- NotBlocked info. -- -- MissingClauses must be propagated, as this is blockage that can -- be lifted in the future (as more clauses are added). -- -- StuckOn e0 is also propagated, since it provides more -- precise information as StuckOn e (as e0 is the -- original reason why reduction got stuck and usually a subterm of -- e). An information like StuckOn (Apply (Arg info (Var i -- []))) (stuck on a variable) could be used by the lhs/coverage -- checker to trigger a split on that (pattern) variable. -- -- In the remaining cases for r, we are terminally stuck due to -- StuckOn e. Propagating AbsurdMatch does not -- seem useful. -- -- Underapplied must not be propagated, as this would mean that -- f es is underapplied, which is not the case (it is stuck). -- Note that Underapplied can only arise when projection patterns -- were missing to complete the original match (in e). (Missing -- ordinary pattern would mean the e is of function type, but we -- cannot match against something of function type.) stuckOn :: Elim' t -> NotBlocked' t -> NotBlocked' t blockedOn :: Blocker -> a -> Blocked' t a blocked :: MetaId -> a -> Blocked' t a notBlocked :: a -> Blocked' t a blocked_ :: MetaId -> Blocked' t () notBlocked_ :: Blocked' t () getBlocker :: Blocked' t a -> Blocker -- | Should a constraint wake up or not? If not, we might refine the -- unblocker. data WakeUp WakeUp :: WakeUp DontWakeUp :: Maybe Blocker -> WakeUp wakeUpWhen :: (constr -> Bool) -> (constr -> WakeUp) -> constr -> WakeUp wakeUpWhen_ :: (constr -> Bool) -> constr -> WakeUp wakeIfBlockedOnProblem :: ProblemId -> Blocker -> WakeUp wakeIfBlockedOnMeta :: MetaId -> Blocker -> WakeUp wakeIfBlockedOnDef :: QName -> Blocker -> WakeUp unblockMeta :: MetaId -> Blocker -> Blocker unblockProblem :: ProblemId -> Blocker -> Blocker unblockDef :: QName -> Blocker -> Blocker instance GHC.Internal.Base.Applicative (Agda.Syntax.Internal.Blockers.Blocked' t) instance Agda.Utils.Functor.Decoration (Agda.Syntax.Internal.Blockers.Blocked' t) instance GHC.Classes.Eq Agda.Syntax.Internal.Blockers.Blocker instance GHC.Classes.Eq Agda.Syntax.Internal.Blockers.WakeUp instance GHC.Internal.Data.Foldable.Foldable (Agda.Syntax.Internal.Blockers.Blocked' t) instance GHC.Internal.Base.Functor (Agda.Syntax.Internal.Blockers.Blocked' t) instance GHC.Internal.Generics.Generic (Agda.Syntax.Internal.Blockers.Blocked' t a) instance GHC.Internal.Generics.Generic Agda.Syntax.Internal.Blockers.Blocker instance GHC.Internal.Generics.Generic (Agda.Syntax.Internal.Blockers.NotBlocked' t) instance (GHC.Internal.Base.Semigroup a, GHC.Internal.Base.Monoid a) => GHC.Internal.Base.Monoid (Agda.Syntax.Internal.Blockers.Blocked' t a) instance GHC.Internal.Base.Monoid (Agda.Syntax.Internal.Blockers.NotBlocked' t) instance (Control.DeepSeq.NFData t, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Agda.Syntax.Internal.Blockers.Blocked' t a) instance Control.DeepSeq.NFData Agda.Syntax.Internal.Blockers.Blocker instance Control.DeepSeq.NFData t => Control.DeepSeq.NFData (Agda.Syntax.Internal.Blockers.NotBlocked' t) instance GHC.Classes.Ord Agda.Syntax.Internal.Blockers.Blocker instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Internal.Blockers.Blocker instance Agda.Syntax.Common.Pretty.Pretty t => Agda.Syntax.Common.Pretty.Pretty (Agda.Syntax.Internal.Blockers.NotBlocked' t) instance GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Semigroup (Agda.Syntax.Internal.Blockers.Blocked' t a) instance GHC.Internal.Base.Semigroup (Agda.Syntax.Internal.Blockers.NotBlocked' t) instance (GHC.Internal.Show.Show t, GHC.Internal.Show.Show a) => GHC.Internal.Show.Show (Agda.Syntax.Internal.Blockers.Blocked' t a) instance GHC.Internal.Show.Show Agda.Syntax.Internal.Blockers.Blocker instance GHC.Internal.Show.Show t => GHC.Internal.Show.Show (Agda.Syntax.Internal.Blockers.NotBlocked' t) instance GHC.Internal.Show.Show Agda.Syntax.Internal.Blockers.WakeUp instance GHC.Internal.Data.Traversable.Traversable (Agda.Syntax.Internal.Blockers.Blocked' t) module Agda.Syntax.Internal -- | Constant level n pattern ClosedLevel :: Integer -> Level pattern EqualityType :: Sort -> QName -> Args -> Arg Term -> Arg Term -> Arg Term -> EqualityView pattern IsRecord_ :: DataOrRecord_ pattern Prop :: Level' t -> Sort' t pattern SSet :: Level' t -> Sort' t pattern Type :: Level' t -> Sort' t __DUMMY_DOM__ :: HasCallStack => Dom Type __DUMMY_LEVEL__ :: HasCallStack => Level __DUMMY_SORT__ :: HasCallStack => Sort __DUMMY_TERM_WITH__ :: HasCallStack => DummyTermKind -> Term __DUMMY_TERM__ :: HasCallStack => Term __DUMMY_TYPE__ :: HasCallStack => Type -- | Absurd lambdas are internally represented as identity with variable -- name "()". absurdBody :: Abs Term -- | Make an absurd pattern with the given de Bruijn index. absurdP :: Int -> DeBruijnPattern absurdPatternName :: PatVarName argFromDom :: Dom' t a -> Arg a -- | Doesn't do any reduction. arity :: Type -> Nat atomicLevel :: t -> Level' t clausePats :: Clause -> [Arg DeBruijnPattern] defaultArgDom :: ArgInfo -> a -> Dom a defaultDom :: a -> Dom a defaultNamedArgDom :: ArgInfo -> String -> a -> Dom a defaultPatternInfo :: PatternInfo domFromArg :: Arg a -> Dom a domFromNamedArg :: NamedArg a -> Dom a -- | Add DontCare is it is not already a DontCare. dontCare :: Term -> Term dotP :: Term -> Pattern' a -- | Context entries without a type have this dummy type. Note: use macro -- DUMMY_DOM ! dummyDom :: CallStack -> Dom Type -- | A dummy level to constitute a level/sort created at location. Note: -- use macro DUMMY_LEVEL ! dummyLevel :: CallStack -> Level -- | Construct a string representing the call-site that created the dummy -- thing. dummyLocName :: CallStack -> String -- | A dummy sort created at location. Note: use macro DUMMY_SORT ! dummySort :: CallStack -> Sort -- | A dummy term created at location. Note: use macro DUMMY_TERM ! dummyTerm :: CallStack -> Term -- | Aux: A dummy term to constitute a dummy termlevelsort/type. dummyTermWith :: DummyTermKind -> CallStack -> Term -- | A dummy type created at location. Note: use macro DUMMY_TYPE ! dummyType :: CallStack -> Type eqtLhs :: EqualityView -> Arg Term eqtName :: EqualityView -> QName eqtParams :: EqualityView -> Args eqtRhs :: EqualityView -> Arg Term eqtSort :: EqualityView -> Sort eqtType :: EqualityView -> Arg Term -- | Build ConInfo from ConPatternInfo. fromConPatternInfo :: ConPatternInfo -> ConInfo -- | A view distinguishing the neutrals Var, Def, and -- MetaV which can be projected. hasElims :: Term -> Maybe (Elims -> Term, Elims) impossibleTerm :: CallStack -> Term isAbsurdBody :: Abs Term -> Bool isAbsurdPatternName :: PatVarName -> Bool isEqualityType :: EqualityView -> Bool isIOne :: IntervalView -> Bool isPathType :: PathView -> Bool -- | Is this a Prop universe? Answers are yes (True) or maybe -- (False). isProp :: Sort' t -> Bool isSort :: Term -> Maybe Sort -- | Is this a strict universe inhabitable by data types? isStrictDataSort :: Sort' t -> Bool -- | Given a constant m and level l, compute m + -- l levelPlus :: Integer -> Level -> Level levelSuc :: Level -> Level -- | Lens to edit a Telescope as a list. listTel :: Lens' Telescope ListTel litP :: Literal -> Pattern' a mapAbsNames :: (ArgName -> ArgName) -> Tele a -> Tele a -- | A traversal for the names in a telescope. mapAbsNamesM :: Applicative m => (ArgName -> m ArgName) -> Tele a -> m (Tele a) mkProp :: Integer -> Sort mkSSet :: Integer -> Sort mkType :: Integer -> Sort nameToPatVarName :: Name -> PatVarName namedArgFromDom :: Dom' t a -> NamedArg a namedDBVarP :: Int -> PatVarName -> Named_ DeBruijnPattern namedVarP :: PatVarName -> Named_ Pattern noConPatternInfo :: ConPatternInfo pDom :: LensHiding a => a -> Doc -> Doc patVarNameToString :: PatVarName -> String -- | Retrieve the PatternInfo from a pattern patternInfo :: Pattern' x -> Maybe PatternInfo -- | Retrieve the origin of a pattern patternOrigin :: Pattern' x -> Maybe PatOrigin prettyPrecLevelSucs :: Int -> Integer -> (Int -> Doc) -> Doc -- | Turn a known UProp sort into a UType sort, leave others -- unchanged. propToType :: Sort' t -> Sort' t replaceEmptyName :: ArgName -> Tele a -> Tele a -- | Get the flavor of the universe. Nothing could also mean "don't -- know". sortUniv :: Sort' t -> Maybe Univ -- | Removing a topmost DontCare constructor. stripDontCare :: Term -> Term suggests :: [Suggestion] -> String -- | Convert a list telescope to a telescope. telFromList :: ListTel -> Telescope telFromList' :: (a -> ArgName) -> ListTel' a -> Telescope -- | Convert a telescope to its list form. telToList :: Tele (Dom t) -> [Dom (ArgName, t)] tmSSort :: Term -> Sort tmSort :: Term -> Sort -- | Build partial ConPatternInfo from ConInfo toConPatternInfo :: ConInfo -> ConPatternInfo -- | Convert top-level postfix projections into prefix projections. unSpine :: Term -> Term -- | Convert Proj projection eliminations according to their -- ProjOrigin into Def projection applications. unSpine' :: (ProjOrigin -> QName -> Bool) -> Term -> Term -- | An unapplied variable. var :: Nat -> Term varP :: a -> Pattern' a varSort :: Int -> Sort -- | Binder. -- -- Abs: The bound variable might appear in the body. NoAbs -- is pseudo-binder, it does not introduce a fresh variable, similar to -- the const of Haskell. data Abs a -- | The body has (at least) one free variable. Danger: unAbs -- doesn't shift variables properly Abs :: ArgName -> a -> Abs a [absName] :: Abs a -> ArgName [unAbs] :: Abs a -> a NoAbs :: ArgName -> a -> Abs a [absName] :: Abs a -> ArgName [unAbs] :: Abs a -> a -- | Type of argument lists. type Args = [Arg Term] type Blocked = Blocked' Term -- | 'Blocked a without the a. type Blocked_ = Blocked () -- | Newtypes for terms that produce a dummy, rather than crash, when -- applied to incompatible eliminations. newtype BraveTerm BraveTerm :: Term -> BraveTerm [unBrave] :: BraveTerm -> Term -- | A clause is a list of patterns and the clause body. -- -- The telescope contains the types of the pattern variables and the de -- Bruijn indices say how to get from the order the variables occur in -- the patterns to the order they occur in the telescope. The body binds -- the variables in the order they appear in the telescope. -- --
-- clauseTel ~ permute clausePerm (patternVars namedClausePats) ---- -- Terms in dot patterns are valid in the clause telescope. -- -- For the purpose of the permutation and the body dot patterns count as -- variables. TODO: Change this! data Clause Clause :: Range -> Range -> Telescope -> NAPs -> Maybe Term -> Maybe (Arg Type) -> Catchall -> Maybe Bool -> Maybe Bool -> ExpandedEllipsis -> Maybe ModuleName -> Clause [clauseLHSRange] :: Clause -> Range [clauseFullRange] :: Clause -> Range -- | Δ: The types of the pattern variables in dependency order. [clauseTel] :: Clause -> Telescope -- | Δ ⊢ ps. The de Bruijn indices refer to Δ. [namedClausePats] :: Clause -> NAPs -- | Just v with Δ ⊢ v for a regular clause, or -- Nothing for an absurd one. [clauseBody] :: Clause -> Maybe Term -- | Δ ⊢ t. The type of the rhs under clauseTel. Used, -- e.g., by TermCheck. Can be Irrelevant if we -- encountered an irrelevant projection pattern on the lhs. [clauseType] :: Clause -> Maybe (Arg Type) -- | Clause has been labelled as CATCHALL. [clauseCatchall] :: Clause -> Catchall -- | clauseBody contains recursive calls; computed by termination -- checker. Nothing means that termination checker has not run -- yet, or that clauseBody contains meta-variables; these could -- be filled with recursive calls later! Just False means -- definitely no recursive call. Just True means definitely a -- recursive call. [clauseRecursive] :: Clause -> Maybe Bool -- | Clause has been labelled as unreachable by the coverage checker. -- Nothing means coverage checker has not run yet (clause may be -- unreachable). Just False means clause is not unreachable. -- Just True means clause is unreachable. [clauseUnreachable] :: Clause -> Maybe Bool -- | Was this clause created by expansion of an ellipsis? [clauseEllipsis] :: Clause -> ExpandedEllipsis -- | Keeps track of the module name associate with the clause's where -- clause. [clauseWhereModule] :: Clause -> Maybe ModuleName -- | Store the names of the record fields in the constructor. This allows -- reduction of projection redexes outside of TCM. For instance, during -- substitution and application. data ConHead ConHead :: QName -> DataOrRecord -> Induction -> [Arg QName] -> ConHead -- | The name of the constructor. [conName] :: ConHead -> QName -- | Data or record constructor? [conDataRecord] :: ConHead -> DataOrRecord -- | Record constructors can be coinductive. [conInductive] :: ConHead -> Induction -- | The name of the record fields. Arg is stored since the info in -- the constructor args might not be accurate because of subtyping (issue -- #2170). [conFields] :: ConHead -> [Arg QName] type ConInfo = ConOrigin -- | The ConPatternInfo states whether the constructor belongs to -- a record type (True) or data type (False). In the -- former case, the PatOrigin of the conPInfo says -- whether the record pattern orginates from the expansion of an implicit -- pattern. The Type is the type of the whole record pattern. -- The scope used for the type is given by any outer scope plus the -- clause's telescope (clauseTel). data ConPatternInfo ConPatternInfo :: PatternInfo -> Bool -> Bool -> Maybe (Arg Type) -> Bool -> ConPatternInfo -- | Information on the origin of the pattern. [conPInfo] :: ConPatternInfo -> PatternInfo -- | False if data constructor. True if record -- constructor. [conPRecord] :: ConPatternInfo -> Bool -- | Should the match block on non-canonical terms or can it proceed to the -- catch-all clause? [conPFallThrough] :: ConPatternInfo -> Bool -- | The type of the whole constructor pattern. Should be present -- (Just) if constructor pattern is is generated ordinarily by -- type-checking. Could be absent (Nothing) if pattern comes -- from some plugin (like Agsy). Needed e.g. for with-clause stripping. [conPType] :: ConPatternInfo -> Maybe (Arg Type) -- | Lazy patterns are generated by the forcing translation in the unifier -- (unifyStep) and are dropped by the clause compiler (TODO: not -- yet) (compileClauses) when the variables they bind are unused. -- The GHC backend compiles lazy matches to lazy patterns in Haskell -- (TODO: not yet). [conPLazy] :: ConPatternInfo -> Bool -- | Type used when numbering pattern variables. data DBPatVar DBPatVar :: PatVarName -> !Int -> DBPatVar [dbPatVarName] :: DBPatVar -> PatVarName [dbPatVarIndex] :: DBPatVar -> !Int type DataOrRecord = DataOrRecord' PatternOrCopattern data DataOrRecord' p IsData :: DataOrRecord' p IsRecord :: p -> DataOrRecord' p type DataOrRecord_ = DataOrRecord' () type DeBruijnPattern = Pattern' DBPatVar type Dom = Dom' Term -- | Similar to Arg, but we need to distinguish an irrelevance -- annotation in a function domain (the domain itself is not irrelevant!) -- from an irrelevant argument. -- -- Dom is used in Pi of internal syntax, in -- Context and Telescope. Arg is used for actual -- arguments (Var, Con, Def etc.) and in -- Abstract syntax and other situations. -- --
-- x --VarP :: PatternInfo -> x -> Pattern' x -- |
-- .t --DotP :: PatternInfo -> Term -> Pattern' x -- | c ps The subpatterns do not contain any projection -- copatterns. ConP :: ConHead -> ConPatternInfo -> [NamedArg (Pattern' x)] -> Pattern' x -- | E.g. 5, "hello". LitP :: PatternInfo -> Literal -> Pattern' x -- | Projection copattern. Can only appear by itself. ProjP :: ProjOrigin -> QName -> Pattern' x -- | Path elimination pattern, like VarP but keeps track of -- endpoints. IApplyP :: PatternInfo -> Term -> Term -> x -> Pattern' x -- | Used for HITs, the QName should be the one from primHComp. DefP :: PatternInfo -> QName -> [NamedArg (Pattern' x)] -> Pattern' x data PatternInfo PatternInfo :: PatOrigin -> [Name] -> PatternInfo [patOrigin] :: PatternInfo -> PatOrigin [patAsNames] :: PatternInfo -> [Name] type PatternSubstitution = Substitution' DeBruijnPattern type family PatternVarOut a -- | Extract pattern variables in left-to-right order. A DotP is -- also treated as variable (see docu for Clause). class PatternVars a where { type PatternVarOut a; } patternVars :: PatternVars a => a -> [Arg (Either (PatternVarOut a) Term)] type PlusLevel = PlusLevel' Term data PlusLevel' t Plus :: !Integer -> t -> PlusLevel' t -- | Constructing a singleton telescope. class SgTel a sgTel :: SgTel a => a -> Telescope type Sort = Sort' Term -- | Sorts. data Sort' t -- | Prop ℓ, Set ℓ, SSet ℓ. Univ :: Univ -> Level' t -> Sort' t -- | Propωᵢ, (S)Setωᵢ. Inf :: Univ -> !Integer -> Sort' t -- | SizeUniv, a sort inhabited by type Size. SizeUniv :: Sort' t -- | LockUniv, a sort for locks. LockUniv :: Sort' t -- | LevelUniv, a sort inhabited by type Level. When -- --level-universe isn't on, this universe reduces to Set 0 LevelUniv :: Sort' t -- | IntervalUniv, a sort inhabited by the cubical interval. IntervalUniv :: Sort' t -- | Sort of the pi type. PiSort :: Dom' t t -> Sort' t -> Abs (Sort' t) -> Sort' t -- | Sort of a (non-dependent) function type. FunSort :: Sort' t -> Sort' t -> Sort' t -- | Sort of another sort. UnivSort :: Sort' t -> Sort' t MetaS :: {-# UNPACK #-} !MetaId -> [Elim' t] -> Sort' t -- | A postulated sort. DefS :: QName -> [Elim' t] -> Sort' t -- | A (part of a) term or type which is only used for internal purposes. -- Replaces the abuse of Prop for a dummy sort. The -- String typically describes the location where we create this -- dummy, but can contain other information as well. DummyS :: String -> Sort' t type Substitution = Substitution' Term -- | Substitutions. data Substitution' a -- | Identity substitution. Γ ⊢ IdS : Γ IdS :: Substitution' a -- | Empty substitution, lifts from the empty context. First argument is -- IMPOSSIBLE. Apply this to closed terms you want to use -- in a non-empty context. Γ ⊢ EmptyS : () EmptyS :: Impossible -> Substitution' a -- | Substitution extension, `cons'. Γ ⊢ u : Aρ Γ ⊢ ρ : Δ -- ---------------------- Γ ⊢ u :# ρ : Δ, A (:#) :: a -> Substitution' a -> Substitution' a -- | Strengthening substitution. First argument is -- IMPOSSIBLE. In 'Strengthen err n ρ the number -- n must be non-negative. This substitution should only be -- applied to values t for which none of the variables -- 0 up to n - 1 are free in t[ρ], and in that -- case n is subtracted from all free de Bruijn indices in -- t[ρ]. Γ ⊢ ρ : Δ |Θ| = n --------------------------- Γ ⊢ -- Strengthen n ρ : Δ, Θ @ Strengthen :: Impossible -> !Int -> Substitution' a -> Substitution' a -- | Weakening substitution, lifts to an extended context. Γ ⊢ ρ : Δ -- ------------------- Γ, Ψ ⊢ Wk |Ψ| ρ : Δ Wk :: !Int -> Substitution' a -> Substitution' a -- | Lifting substitution. Use this to go under a binder. Lift 1 ρ == -- var 0 :# Wk 1 ρ. Γ ⊢ ρ : Δ ------------------------- Γ, Ψρ ⊢ -- Lift |Ψ| ρ : Δ, Ψ Lift :: !Int -> Substitution' a -> Substitution' a infixr 4 :# -- | Suggest a name if available (i.e. name is not "_") class Suggest a suggestName :: Suggest a => a -> Maybe String data Suggestion Suggestion :: a -> Suggestion -- | Drop the types from a telescope. class TelToArgs a telToArgs :: TelToArgs a => a -> [Arg ArgName] -- | Sequence of types. An argument of the first type is bound in later -- types and so on. data Tele a EmptyTel :: Tele a -- | Abs is never NoAbs. ExtendTel :: a -> Abs (Tele a) -> Tele a type Telescope = Tele Dom Type -- | Raw values. -- -- Def is used for both defined and undefined constants. Assume -- there is a type declaration and a definition for every constant, even -- if the definition is an empty list of clauses. data Term -- | x es neutral Var :: {-# UNPACK #-} !Int -> Elims -> Term -- | Terms are beta normal. Relevance is ignored Lam :: ArgInfo -> Abs Term -> Term Lit :: Literal -> Term -- | f es, possibly a delta/iota-redex Def :: QName -> Elims -> Term -- | c es or record { fs = es } es allows only -- Apply and IApply eliminations, and IApply only for data constructors. Con :: ConHead -> ConInfo -> Elims -> Term -- | dependent or non-dependent function space Pi :: Dom Type -> Abs Type -> Term Sort :: Sort -> Term Level :: Level -> Term MetaV :: {-# UNPACK #-} !MetaId -> Elims -> Term -- | Irrelevant stuff in relevant position, but created in an irrelevant -- context. Basically, an internal version of the irrelevance axiom -- .irrAx : .A -> A. DontCare :: Term -> Term -- | A (part of a) term or type which is only used for internal purposes. -- Replaces the Sort Prop hack. The String typically -- describes the location where we create this dummy, but can contain -- other information as well. The second field accumulates eliminations -- in case we apply a dummy term to more of them. Dummy terms should -- never be used in places where they can affect type checking, so -- syntactic checks are free to ignore the eliminators, which are only -- there to ease debugging when a dummy term incorrectly leaks into a -- relevant position. Dummy :: String -> Elims -> Term -- | The size of a term is roughly the number of nodes in its syntax tree. -- This number need not be precise for logical correctness of Agda, it is -- only used for reporting (and maybe decisions regarding performance). -- -- Not counting towards the term size are: -- --
-- unquoteDecl xs = e --UnquoteDecl :: Range -> [Name] -> Expr -> Declaration -- |
-- unquoteDef xs = e --UnquoteDef :: Range -> [Name] -> Expr -> Declaration -- |
-- unquoteDecl data d constructor xs = e --UnquoteData :: Range -> Name -> [Name] -> Expr -> Declaration Pragma :: Pragma -> Declaration -- |
-- opaque ... --Opaque :: KwRange -> [Declaration] -> Declaration -- |
-- unfolding ... --Unfolding :: KwRange -> [QName] -> Declaration -- | Return Pragma if Declaration is Pragma. isPragma :: CMaybe Pragma m => Declaration -> m -- | Isolated record directives parsed as Declarations data RecordDirective -- | Range of keyword [co]inductive. Induction :: Ranged Induction -> RecordDirective Constructor :: Name -> IsInstance -> RecordDirective -- | Range of [no-]eta-equality keyword. Eta :: Ranged HasEta0 -> RecordDirective -- | If declaration pattern is present, give its range. PatternOrCopattern :: Range -> RecordDirective type RecordDirectives = RecordDirectives' Maybe (Name, IsInstance) data ModuleApplication -- | tel M exprs where M exprs is a RawApp just -- after parsing. SectionApp :: Range -> Telescope -> QName -> [Expr] -> ModuleApplication -- |
-- M {{...}} --RecordModuleInstance :: Range -> QName -> ModuleApplication -- | Just type signatures. type TypeSignature = Declaration -- | Just type signatures or instance blocks. type TypeSignatureOrInstanceBlock = Declaration -- | The things you are allowed to say when you shuffle names between name -- spaces (i.e. in import, namespace, or open -- declarations). type ImportDirective = ImportDirective' Name Name type Using = Using' Name Name -- | An imported name can be a module or a defined name. type ImportedName = ImportedName' Name Name type Renaming = Renaming' Name Name type RenamingDirective = RenamingDirective' Name Name type HidingDirective = HidingDirective' Name Name -- | The content of the as-clause of the import statement. data AsName' a AsName :: a -> Range -> AsName' a -- | The "as" name. [asName] :: AsName' a -> a -- | The range of the "as" keyword. Retained for highlighting purposes. [asRange] :: AsName' a -> Range -- | From the parser, we get an expression for the as-Name, -- which we have to parse into a Name. type AsName = AsName' Either Expr Name data OpenShortHand DoOpen :: OpenShortHand DontOpen :: OpenShortHand type RewriteEqn = RewriteEqn' () Name Pattern Expr type WithExpr = Named Name Arg Expr -- | Left hand sides can be written in infix style. For example: -- --
-- n + suc m = suc (n + m) -- (f ∘ g) x = f (g x) ---- -- We use fixity information to see which name is actually defined. data LHS -- | Original pattern (including with-patterns), rewrite equations and -- with-expressions. LHS :: Pattern -> [RewriteEqn] -> [WithExpr] -> LHS -- | e.g. f ps | wps [lhsOriginalPattern] :: LHS -> Pattern -- | (rewrite e | with p <- e in eq) (many) [lhsRewriteEqn] :: LHS -> [RewriteEqn] -- | with e1 in eq | {e2} | ... (many) [lhsWithExpr] :: LHS -> [WithExpr] -- | Concrete patterns. No literals in patterns at the moment. data Pattern -- | c or x -- -- If the boolean is False, then the QName must not refer -- to a constructor or a pattern synonym. The value False is used -- when a hidden argument pun is expanded. IdentP :: Bool -> QName -> Pattern -- |
-- quote --QuoteP :: Range -> Pattern -- | p p' or p {x = p'} AppP :: Pattern -> NamedArg Pattern -> Pattern -- | p1..pn before parsing operators RawAppP :: Range -> List2 Pattern -> Pattern -- | eg: p => p' for operator _=>_ The QName -- is possibly ambiguous, but it must correspond to one of the names in -- the set. OpAppP :: Range -> QName -> Set1 Name -> List1 (NamedArg Pattern) -> Pattern -- | {p} or {x = p} HiddenP :: Range -> Named_ Pattern -> Pattern -- | {{p}} or {{x = p}} InstanceP :: Range -> Named_ Pattern -> Pattern -- |
-- (p) --ParenP :: Range -> Pattern -> Pattern -- |
-- _ --WildP :: Range -> Pattern -- |
-- () --AbsurdP :: Range -> Pattern -- |
-- x@p --AsP :: Range -> Name -> Pattern -> Pattern -- | .e, the KwRange is for the dot, the Range for -- the whole thing (including the dot). DotP :: KwRange -> Range -> Expr -> Pattern -- | 0, 1, etc. LitP :: Range -> Literal -> Pattern -- |
-- record {x = p; y = q} --RecP :: Range -> [FieldAssignment' Pattern] -> Pattern -- | i = i1 i.e. cubical face lattice generator EqualP :: Range -> List1 (Expr, Expr) -> Pattern -- | ..., only as left-most pattern. Second arg is -- Nothing before expansion, and Just p after expanding -- ellipsis to p. EllipsisP :: Range -> Maybe Pattern -> Pattern -- | | p, for with-patterns. WithP :: Range -> Pattern -> Pattern -- | Processed (operator-parsed) intermediate form of the core f -- ps of LHS. Corresponds to lhsOriginalPattern. data LHSCore LHSHead :: QName -> [NamedArg Pattern] -> LHSCore -- |
-- f --[lhsDefName] :: LHSCore -> QName -- |
-- ps --[lhsPats] :: LHSCore -> [NamedArg Pattern] LHSProj :: QName -> [NamedArg Pattern] -> NamedArg LHSCore -> [NamedArg Pattern] -> LHSCore -- | Record projection. [lhsDestructor] :: LHSCore -> QName -- | Patterns for record indices (currently none). [lhsPatsLeft] :: LHSCore -> [NamedArg Pattern] -- | Main argument. [lhsFocus] :: LHSCore -> NamedArg LHSCore -- |
-- ps --[lhsPats] :: LHSCore -> [NamedArg Pattern] LHSWith :: LHSCore -> List1 Pattern -> [NamedArg Pattern] -> LHSCore [lhsHead] :: LHSCore -> LHSCore -- | At least one (| p). [lhsWithPatterns] :: LHSCore -> List1 Pattern -- |
-- ps --[lhsPats] :: LHSCore -> [NamedArg Pattern] LHSEllipsis :: Range -> LHSCore -> LHSCore [lhsEllipsisRange] :: LHSCore -> Range -- | Pattern that was expanded from an ellipsis .... [lhsEllipsisPat] :: LHSCore -> LHSCore data LamClause LamClause :: [Pattern] -> RHS -> Catchall -> LamClause -- | Possibly empty sequence. [lamLHS] :: LamClause -> [Pattern] [lamRHS] :: LamClause -> RHS [lamCatchall] :: LamClause -> Catchall type RHS = RHS' Expr data RHS' e -- | No right hand side because of absurd match. AbsurdRHS :: RHS' e RHS :: e -> RHS' e -- | where block following a clause. type WhereClause = WhereClause' [Declaration] -- | The generalization WhereClause' is for the sake of -- Agda.Concrete.Generic. data WhereClause' decls -- | No where clauses. NoWhere :: WhereClause' decls -- | Ordinary where. Range of the where keyword. -- List of declarations can be empty. AnyWhere :: Range -> decls -> WhereClause' decls -- | Named where: module M where ds. Range of the keywords -- module and where. The Access flag applies to -- the Name (not the module contents!) and is propagated from the -- parent function. List of declarations can be empty. SomeWhere :: Range -> Erased -> Name -> Access -> decls -> WhereClause' decls -- | Type of where block following a clause. data WhereClause_ -- | No where clauses. NoWhere_ :: WhereClause_ -- | Ordinary where. AnyWhere_ :: WhereClause_ -- | Named where: module M where .... SomeWhere_ :: WhereClause_ -- | An expression followed by a where clause. Currently only used to give -- better a better error message in interaction. data ExprWhere ExprWhere :: Expr -> WhereClause -> ExprWhere whereClause_ :: WhereClause' a -> WhereClause_ data DoStmt -- |
-- p ← e where cs --DoBind :: Range -> Pattern -> Expr -> [LamClause] -> DoStmt DoThen :: Expr -> DoStmt DoLet :: Range -> List1 Declaration -> DoStmt data Pragma OptionsPragma :: Range -> [String] -> Pragma BuiltinPragma :: Range -> RString -> QName -> Pragma -- | Second Range is for REWRITE keyword. RewritePragma :: Range -> Range -> [QName] -> Pragma ForeignPragma :: Range -> Ranged BackendName -> String -> Pragma CompilePragma :: Range -> Ranged BackendName -> QName -> String -> Pragma StaticPragma :: Range -> QName -> Pragma -- | INLINE or NOINLINE InlinePragma :: Range -> Bool -> QName -> Pragma -- | Throws an internal error in the scope checker. The Strings are -- words to be displayed with the error. ImpossiblePragma :: Range -> [String] -> Pragma -- | For coinductive records, use pragma instead of regular -- eta-equality definition (as it is might make Agda loop). EtaPragma :: Range -> QName -> Pragma -- | Applies to the named function WarningOnUsage :: Range -> QName -> Text -> Pragma -- | Applies to the current module WarningOnImport :: Range -> Text -> Pragma -- | Mark a definition as injective for the pattern matching unifier. InjectivePragma :: Range -> QName -> Pragma -- | Mark a definition as injective for the conversion checker InjectiveForInferencePragma :: Range -> QName -> Pragma -- | Display lhs as rhs (modifies the printer). DisplayPragma :: Range -> Pattern -> Expr -> Pragma -- | Applies to the following function clause. CatchallPragma :: Range -> Pragma -- | Applies to the following function (and all that are mutually recursive -- with it) or to the functions in the following mutual block. TerminationCheckPragma :: Range -> TerminationCheck Name -> Pragma -- | Applies to the following function (and all that are mutually recursive -- with it) or to the functions in the following mutual block. NoCoverageCheckPragma :: Range -> Pragma -- | Applies to the following data/record type or mutual block. NoPositivityCheckPragma :: Range -> Pragma PolarityPragma :: Range -> Name -> [Ranged Occurrence] -> Pragma -- | Applies to the following data/record type. NoUniverseCheckPragma :: Range -> Pragma -- | Applies to the stated function NotProjectionLikePragma :: Range -> QName -> Pragma -- | Applies to the given name(s), which must be instance names (checked by -- the type checker). OverlapPragma :: Range -> [QName] -> OverlapMode -> Pragma -- | Modules: Top-level pragmas plus other top-level declarations. data Module Mod :: [Pragma] -> [Declaration] -> Module [modPragmas] :: Module -> [Pragma] [modDecls] :: Module -> [Declaration] -- | Decorating something with Fixity'. data ThingWithFixity x ThingWithFixity :: x -> Fixity' -> ThingWithFixity x type HoleContent = HoleContent' () Name Pattern Expr -- | Extended content of an interaction hole. data HoleContent' qn nm p e -- |
-- e --HoleContentExpr :: e -> HoleContent' qn nm p e -- |
-- (rewrite | invert) e0 | ... | en --HoleContentRewrite :: [RewriteEqn' qn nm p e] -> HoleContent' qn nm p e -- | Splits off allowed (= import) declarations before the first -- non-allowed declaration. After successful parsing, the first -- non-allowed declaration should be a module declaration. spanAllowedBeforeModule :: [Declaration] -> ([Declaration], [Declaration]) ungatherRecordDirectives :: RecordDirectives -> [RecordDirective] instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Concrete.AsName' a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Concrete.Binder' a) instance GHC.Classes.Eq Agda.Syntax.Concrete.BoundName instance GHC.Classes.Eq Agda.Syntax.Concrete.Declaration instance GHC.Classes.Eq Agda.Syntax.Concrete.DoStmt instance GHC.Classes.Eq Agda.Syntax.Concrete.Expr instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Concrete.FieldAssignment' a) instance GHC.Classes.Eq Agda.Syntax.Concrete.LHS instance GHC.Classes.Eq Agda.Syntax.Concrete.LHSCore instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Concrete.LamBinding' a) instance GHC.Classes.Eq Agda.Syntax.Concrete.LamClause instance GHC.Classes.Eq Agda.Syntax.Concrete.ModuleApplication instance GHC.Classes.Eq Agda.Syntax.Concrete.ModuleAssignment instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Concrete.OpApp e) instance GHC.Classes.Eq Agda.Syntax.Concrete.OpenShortHand instance GHC.Classes.Eq Agda.Syntax.Concrete.Pattern instance GHC.Classes.Eq Agda.Syntax.Concrete.Pragma instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Concrete.RHS' e) instance GHC.Classes.Eq Agda.Syntax.Concrete.RecordDirective instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Concrete.TacticAttribute' a) instance GHC.Classes.Eq e => GHC.Classes.Eq (Agda.Syntax.Concrete.TypedBinding' e) instance GHC.Classes.Eq decls => GHC.Classes.Eq (Agda.Syntax.Concrete.WhereClause' decls) instance GHC.Classes.Eq Agda.Syntax.Concrete.WhereClause_ instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.AsName' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.Binder' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.FieldAssignment' instance GHC.Internal.Data.Foldable.Foldable (Agda.Syntax.Concrete.HoleContent' qn nm p) instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.LamBinding' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.OpApp instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.RHS' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.TacticAttribute' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.TypedBinding' instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Concrete.WhereClause' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.AsName' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.Binder' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.FieldAssignment' instance GHC.Internal.Base.Functor (Agda.Syntax.Concrete.HoleContent' qn nm p) instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.LamBinding' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.OpApp instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.RHS' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.TacticAttribute' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.TypedBinding' instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.WhereClause' instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.OpenShortHand instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.WhereClause_ instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.AsName instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Binder instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.BoundName instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Declaration instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.DoStmt instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Expr instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.LHS instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.LHSCore instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.LamBinding instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.LamClause instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.ModuleApplication instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.ModuleAssignment instance Agda.Syntax.Position.HasRange e => Agda.Syntax.Position.HasRange (Agda.Syntax.Concrete.OpApp e) instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Pattern instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Pragma instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.RHS instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.RecordDirective instance Agda.Syntax.Position.HasRange (Agda.Syntax.Concrete.TacticAttribute' a) instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.TypedBinding instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.WhereClause instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.AsName instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Binder instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.BoundName instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Declaration instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.DoStmt instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Expr instance Agda.Syntax.Position.KillRange a => Agda.Syntax.Position.KillRange (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.LHS instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.LamBinding instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.LamClause instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.ModuleApplication instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.ModuleAssignment instance Agda.Syntax.Position.KillRange e => Agda.Syntax.Position.KillRange (Agda.Syntax.Concrete.OpApp e) instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Pattern instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.Pragma instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.RHS instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.RecordDirective instance Agda.Syntax.Position.KillRange (Agda.Syntax.Concrete.TacticAttribute' a) instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.TypedBinding instance Agda.Syntax.Position.KillRange Agda.Syntax.Concrete.WhereClause instance Agda.Syntax.Common.LensHiding Agda.Syntax.Concrete.LamBinding instance Agda.Syntax.Common.LensHiding Agda.Syntax.Concrete.TypedBinding instance Agda.Syntax.Common.LensRelevance Agda.Syntax.Concrete.TypedBinding instance Control.DeepSeq.NFData Agda.Syntax.Concrete.AsName instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Binder instance Control.DeepSeq.NFData Agda.Syntax.Concrete.BoundName instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Declaration instance Control.DeepSeq.NFData Agda.Syntax.Concrete.DoStmt instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Expr instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.FieldAssignment' a) instance Control.DeepSeq.NFData Agda.Syntax.Concrete.LHS instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.LamBinding' a) instance Control.DeepSeq.NFData Agda.Syntax.Concrete.LamClause instance Control.DeepSeq.NFData Agda.Syntax.Concrete.ModuleApplication instance Control.DeepSeq.NFData Agda.Syntax.Concrete.ModuleAssignment instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.OpApp a) instance Control.DeepSeq.NFData Agda.Syntax.Concrete.OpenShortHand instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Pattern instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Pragma instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.RHS' a) instance Control.DeepSeq.NFData Agda.Syntax.Concrete.RecordDirective instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.TacticAttribute' a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.TypedBinding' a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Syntax.Concrete.WhereClause' a) instance Control.DeepSeq.NFData Agda.Syntax.Concrete.WhereClause_ instance Agda.Utils.Null.Null (Agda.Syntax.Concrete.TacticAttribute' a) instance Agda.Utils.Null.Null (Agda.Syntax.Concrete.WhereClause' a) instance Agda.Utils.Null.Null Agda.Syntax.Concrete.WhereClause_ instance Agda.Syntax.Position.SetRange Agda.Syntax.Concrete.Pattern instance Agda.Syntax.Position.SetRange Agda.Syntax.Concrete.TypedBinding instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Concrete.AsName' a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Concrete.FieldAssignment' a) instance GHC.Internal.Show.Show Agda.Syntax.Concrete.OpenShortHand instance GHC.Internal.Show.Show Agda.Syntax.Concrete.RecordDirective instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Concrete.TacticAttribute' a) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.AsName' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.Binder' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.FieldAssignment' instance GHC.Internal.Data.Traversable.Traversable (Agda.Syntax.Concrete.HoleContent' qn nm p) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.LamBinding' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.OpApp instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.RHS' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.TacticAttribute' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.TypedBinding' instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Concrete.WhereClause' module Agda.Syntax.TopLevelModuleName -- | Hashes a raw top-level module name. hashRawTopLevelModuleName :: RawTopLevelModuleName -> ModuleNameHash -- | A lens focusing on the moduleNameParts. lensTopLevelModuleNameParts :: Lens' TopLevelModuleName TopLevelModuleNameParts -- | Turns a top-level module name into a file name with the given suffix. moduleNameToFileName :: TopLevelModuleName -> String -> FilePath -- | Finds the current project's "root" directory, given a project file and -- the corresponding top-level module name. -- -- Example: If the module "A.B.C" is located in the file -- "fooABC.agda", then the root is "foo". -- -- Precondition: The module name must be well-formed. projectRoot :: AbsolutePath -> TopLevelModuleName -> AbsolutePath -- | Converts a top-level module name to a raw top-level module name. rawTopLevelModuleName :: TopLevelModuleName -> RawTopLevelModuleName -- | Computes the top-level module name. -- -- Precondition: The Module has to be well-formed. This means that -- there are only allowed declarations before the first module -- declaration, typically import declarations. See -- spanAllowedBeforeModule. rawTopLevelModuleNameForModule :: Module -> RawTopLevelModuleName -- | Computes the RawTopLevelModuleName corresponding to the given -- module name, which is assumed to represent a top-level module name. -- -- Precondition: The module name must be well-formed. rawTopLevelModuleNameForModuleName :: ModuleName -> RawTopLevelModuleName -- | Turns a qualified name into a RawTopLevelModuleName. The -- qualified name is assumed to represent a top-level module name. rawTopLevelModuleNameForQName :: QName -> RawTopLevelModuleName -- | Turns a raw top-level module name into a string. rawTopLevelModuleNameToString :: RawTopLevelModuleName -> String -- | A corresponding QName. The range of each Name part is -- the whole range of the TopLevelModuleName. topLevelModuleNameToQName :: TopLevelModuleName -> QName -- | Converts a raw top-level module name and a hash to a top-level module -- name. -- -- This function does not ensure that there are no hash collisions, that -- is taken care of by topLevelModuleName. unsafeTopLevelModuleName :: RawTopLevelModuleName -> ModuleNameHash -> TopLevelModuleName -- | Raw top-level module names (with linear-time comparisons). data RawTopLevelModuleName RawTopLevelModuleName :: Range -> TopLevelModuleNameParts -> RawTopLevelModuleName [rawModuleNameRange] :: RawTopLevelModuleName -> Range [rawModuleNameParts] :: RawTopLevelModuleName -> TopLevelModuleNameParts -- | Top-level module names (with constant-time comparisons). type TopLevelModuleName = TopLevelModuleName' Range instance GHC.Classes.Eq Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance GHC.Internal.Generics.Generic Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Syntax.Position.HasRange Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Syntax.Concrete.Name.IsNoName Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Syntax.Position.KillRange Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Control.DeepSeq.NFData Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance GHC.Classes.Ord Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.TopLevelModuleName.TopLevelModuleName instance Agda.Syntax.Position.SetRange Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance GHC.Internal.Show.Show Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Utils.Size.Sized Agda.Syntax.TopLevelModuleName.RawTopLevelModuleName instance Agda.Utils.Size.Sized Agda.Syntax.TopLevelModuleName.TopLevelModuleName -- | Tools for patterns in concrete syntax. module Agda.Syntax.Concrete.Pattern -- | Check for ellipsis .... class IsEllipsis a isEllipsis :: IsEllipsis a => a -> Bool -- | Has the lhs an occurrence of the ellipsis ...? class HasEllipsis a hasEllipsis :: HasEllipsis a => a -> Bool -- | Check for with-pattern | p. class IsWithP p isWithP :: IsWithP p => p -> Maybe p ($dmisWithP) :: forall q (f :: Type -> Type). (IsWithP p, IsWithP q, Decoration f, f q ~ p) => p -> Maybe p -- | The next patterns are ... -- -- (This view discards PatInfo.) data LHSPatternView -- | Application patterns (non-empty list). LHSAppP :: List1 (NamedArg Pattern) -> LHSPatternView -- | With patterns (non-empty list). These patterns are not prefixed with -- WithP. LHSWithP :: List1 Pattern -> LHSPatternView -- | Construct the LHSPatternView of the given list (if not empty). -- -- Return the view and the remaining patterns. lhsPatternView :: [NamedArg Pattern] -> Maybe (LHSPatternView, [NamedArg Pattern]) -- | Add applicative patterns (non-projection / non-with patterns) to the -- right. lhsCoreApp :: LHSCore -> List1 (NamedArg Pattern) -> LHSCore -- | Add with-patterns to the right. lhsCoreWith :: LHSCore -> List1 Pattern -> LHSCore -- | Append patterns to LHSCore, separating with patterns from the -- rest. lhsCoreAddSpine :: LHSCore -> [NamedArg Pattern] -> LHSCore -- | Modify the Pattern component in LHS. mapLhsOriginalPattern :: (Pattern -> Pattern) -> LHS -> LHS -- | Effectfully modify the Pattern component in LHS. mapLhsOriginalPatternM :: (Functor m, Applicative m) => (Pattern -> m Pattern) -> LHS -> m LHS -- | Does the LHS contain projection patterns? hasCopatterns :: LHSCore -> Bool -- | Generic pattern traversal. -- -- See APatternLike. class CPatternLike p -- | Fold pattern. foldrCPattern :: (CPatternLike p, Monoid m) => (Pattern -> m -> m) -> p -> m ($dmfoldrCPattern) :: forall m (f :: Type -> Type) q. (CPatternLike p, Monoid m, Foldable f, CPatternLike q, f q ~ p) => (Pattern -> m -> m) -> p -> m -- | Traverse pattern with option of post-traversal modification. traverseCPatternA :: (CPatternLike p, Applicative m, Functor m) => (Pattern -> m Pattern -> m Pattern) -> p -> m p ($dmtraverseCPatternA) :: forall (f :: Type -> Type) q m. (CPatternLike p, Traversable f, CPatternLike q, f q ~ p, Applicative m, Functor m) => (Pattern -> m Pattern -> m Pattern) -> p -> m p -- | Traverse pattern. traverseCPatternM :: (CPatternLike p, Monad m) => (Pattern -> m Pattern) -> (Pattern -> m Pattern) -> p -> m p ($dmtraverseCPatternM) :: forall (f :: Type -> Type) q m. (CPatternLike p, Traversable f, CPatternLike q, f q ~ p, Monad m) => (Pattern -> m Pattern) -> (Pattern -> m Pattern) -> p -> m p -- | Compute a value from each subpattern and collect all values in a -- monoid. foldCPattern :: (CPatternLike p, Monoid m) => (Pattern -> m) -> p -> m -- | Traverse pattern(s) with a modification before the recursive descent. preTraverseCPatternM :: (CPatternLike p, Monad m) => (Pattern -> m Pattern) -> p -> m p -- | Traverse pattern(s) with a modification after the recursive descent. postTraverseCPatternM :: (CPatternLike p, Monad m) => (Pattern -> m Pattern) -> p -> m p -- | Map pattern(s) with a modification after the recursive descent. mapCPattern :: CPatternLike p => (Pattern -> Pattern) -> p -> p -- | Get all the identifiers in a pattern in left-to-right order. -- -- Implemented using difference lists. patternQNames :: CPatternLike p => p -> [QName] -- | Get all the identifiers in a pattern in left-to-right order. patternNames :: Pattern -> [Name] -- | Does the pattern contain a with-pattern? (Shortcutting.) hasWithPatterns :: CPatternLike p => p -> Bool -- | Is WithP? isWithPattern :: Pattern -> Bool -- | Count the number of with-subpatterns in a pattern? numberOfWithPatterns :: CPatternLike p => p -> Int -- | Compute the context in which the ellipsis occurs, if at all. If there -- are several occurrences, this is an error. This only counts ellipsis -- that haven't already been expanded. hasEllipsis' :: CPatternLike p => p -> AffineHole Pattern p reintroduceEllipsis :: ExpandedEllipsis -> Pattern -> Pattern splitEllipsis :: IsWithP p => Int -> [p] -> ([p], [p]) -- | View a pattern p as a list p0 .. pn where -- p0 is the identifier (in most cases a constructor). -- -- Pattern needs to be parsed already (operators resolved). patternAppView :: Pattern -> List1 (NamedArg Pattern) instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike (Agda.Syntax.Common.Arg p) instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike (Agda.Syntax.Concrete.FieldAssignment' p) instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike [p] instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike (Agda.Utils.List2.List2 p) instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike (GHC.Internal.Maybe.Maybe p) instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike (Agda.Syntax.Common.Named n p) instance Agda.Syntax.Concrete.Pattern.CPatternLike p => Agda.Syntax.Concrete.Pattern.CPatternLike (Agda.Utils.List1.List1 p) instance Agda.Syntax.Concrete.Pattern.CPatternLike Agda.Syntax.Concrete.Pattern instance (Agda.Syntax.Concrete.Pattern.CPatternLike a, Agda.Syntax.Concrete.Pattern.CPatternLike b) => Agda.Syntax.Concrete.Pattern.CPatternLike (a, b) instance Agda.Syntax.Concrete.Pattern.HasEllipsis Agda.Syntax.Concrete.LHS instance Agda.Syntax.Concrete.Pattern.HasEllipsis Agda.Syntax.Concrete.Pattern instance Agda.Syntax.Concrete.Pattern.IsEllipsis Agda.Syntax.Concrete.Pattern instance Agda.Syntax.Concrete.Pattern.IsWithP p => Agda.Syntax.Concrete.Pattern.IsWithP (Agda.Syntax.Common.Arg p) instance Agda.Syntax.Concrete.Pattern.IsWithP p => Agda.Syntax.Concrete.Pattern.IsWithP (Agda.Syntax.Common.Named n p) instance Agda.Syntax.Concrete.Pattern.IsWithP Agda.Syntax.Concrete.Pattern -- | Generic traversal and reduce for concrete syntax, in the style of -- Agda.Syntax.Internal.Generic. -- -- However, here we use the terminology of Traversable. module Agda.Syntax.Concrete.Generic -- | Generic traversals for concrete expressions. -- -- Note: does not go into patterns! class ExprLike a -- | This corresponds to map. mapExpr :: ExprLike a => (Expr -> Expr) -> a -> a ($dmmapExpr) :: forall (t :: Type -> Type) b. (ExprLike a, Functor t, ExprLike b, t b ~ a) => (Expr -> Expr) -> a -> a -- | This corresponds to foldMap. foldExpr :: (ExprLike a, Monoid m) => (Expr -> m) -> a -> m ($dmfoldExpr) :: forall m (t :: Type -> Type) b. (ExprLike a, Monoid m, Foldable t, ExprLike b, t b ~ a) => (Expr -> m) -> a -> m -- | This corresponds to mapM. traverseExpr :: (ExprLike a, Monad m) => (Expr -> m Expr) -> a -> m a ($dmtraverseExpr) :: forall m (t :: Type -> Type) b. (ExprLike a, Monad m, Traversable t, ExprLike b, t b ~ a) => (Expr -> m Expr) -> a -> m a class FoldDecl a -- | Collect declarations and subdeclarations, transitively. Prefix-order -- tree traversal. foldDecl :: (FoldDecl a, Monoid m) => (Declaration -> m) -> a -> m ($dmfoldDecl) :: forall m (t :: Type -> Type) b. (FoldDecl a, Monoid m, Foldable t, FoldDecl b, t b ~ a) => (Declaration -> m) -> a -> m class TraverseDecl a -- | Update declarations and their subdeclarations. Prefix-order traversal: -- traverses subdeclarations of updated declaration. preTraverseDecl :: (TraverseDecl a, Monad m) => (Declaration -> m Declaration) -> a -> m a ($dmpreTraverseDecl) :: forall m (t :: Type -> Type) b. (TraverseDecl a, Monad m, Traversable t, TraverseDecl b, t b ~ a) => (Declaration -> m Declaration) -> a -> m a instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Concrete.Generic.ExprLike GHC.Types.Bool instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.Declaration instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.DoStmt instance (Agda.Syntax.Concrete.Generic.ExprLike a, Agda.Syntax.Concrete.Generic.ExprLike b) => Agda.Syntax.Concrete.Generic.ExprLike (GHC.Internal.Data.Either.Either a b) instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.Expr instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.FieldAssignment instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.LHS instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.LamBinding instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.LamClause instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike [a] instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Utils.List2.List2 a) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.MaybePlaceholder a) instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.ModuleApplication instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.ModuleAssignment instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.Name.Name instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.Named name a) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Utils.List1.List1 a) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Concrete.OpApp a) instance Agda.Syntax.Concrete.Generic.ExprLike Agda.Syntax.Concrete.Name.QName instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Concrete.RHS' a) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.Ranged a) instance (Agda.Syntax.Concrete.Generic.ExprLike qn, Agda.Syntax.Concrete.Generic.ExprLike e) => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.RewriteEqn' qn nm p e) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Concrete.TacticAttribute' a) instance (Agda.Syntax.Concrete.Generic.ExprLike a, Agda.Syntax.Concrete.Generic.ExprLike b) => Agda.Syntax.Concrete.Generic.ExprLike (a, b) instance (Agda.Syntax.Concrete.Generic.ExprLike a, Agda.Syntax.Concrete.Generic.ExprLike b, Agda.Syntax.Concrete.Generic.ExprLike c) => Agda.Syntax.Concrete.Generic.ExprLike (a, b, c) instance (Agda.Syntax.Concrete.Generic.ExprLike a, Agda.Syntax.Concrete.Generic.ExprLike b, Agda.Syntax.Concrete.Generic.ExprLike c, Agda.Syntax.Concrete.Generic.ExprLike d) => Agda.Syntax.Concrete.Generic.ExprLike (a, b, c, d) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Concrete.TypedBinding' a) instance Agda.Syntax.Concrete.Generic.ExprLike () instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Concrete.WhereClause' a) instance Agda.Syntax.Concrete.Generic.ExprLike a => Agda.Syntax.Concrete.Generic.ExprLike (Agda.Syntax.Common.WithHiding a) instance Agda.Syntax.Concrete.Generic.FoldDecl Agda.Syntax.Concrete.Declaration instance Agda.Syntax.Concrete.Generic.FoldDecl a => Agda.Syntax.Concrete.Generic.FoldDecl [a] instance Agda.Syntax.Concrete.Generic.FoldDecl a => Agda.Syntax.Concrete.Generic.FoldDecl (Agda.Utils.List2.List2 a) instance Agda.Syntax.Concrete.Generic.FoldDecl a => Agda.Syntax.Concrete.Generic.FoldDecl (Agda.Utils.List1.List1 a) instance Agda.Syntax.Concrete.Generic.FoldDecl a => Agda.Syntax.Concrete.Generic.FoldDecl (Agda.Syntax.Concrete.WhereClause' a) instance Agda.Syntax.Concrete.Generic.TraverseDecl Agda.Syntax.Concrete.Declaration instance Agda.Syntax.Concrete.Generic.TraverseDecl a => Agda.Syntax.Concrete.Generic.TraverseDecl [a] instance Agda.Syntax.Concrete.Generic.TraverseDecl a => Agda.Syntax.Concrete.Generic.TraverseDecl (Agda.Utils.List2.List2 a) instance Agda.Syntax.Concrete.Generic.TraverseDecl a => Agda.Syntax.Concrete.Generic.TraverseDecl (Agda.Utils.List1.List1 a) instance Agda.Syntax.Concrete.Generic.TraverseDecl a => Agda.Syntax.Concrete.Generic.TraverseDecl (Agda.Syntax.Concrete.WhereClause' a) -- | Collecting fixity declarations (and polarity pragmas) for concrete -- declarations. module Agda.Syntax.Concrete.Fixity type Fixities = Map Name Fixity' type Polarities = Map Name PragmaPolarities class Monad m => MonadFixityError (m :: Type -> Type) throwMultipleFixityDecls :: MonadFixityError m => List1 (Name, Pair Fixity') -> m a throwMultiplePolarityPragmas :: MonadFixityError m => List1 Name -> m a warnUnknownNamesInFixityDecl :: MonadFixityError m => Set1 Name -> m () warnUnknownNamesInPolarityPragmas :: MonadFixityError m => Set1 Name -> m () warnUnknownFixityInMixfixDecl :: MonadFixityError m => Set1 Name -> m () warnPolarityPragmasButNotPostulates :: MonadFixityError m => Set1 Name -> m () warnEmptyPolarityPragma :: MonadFixityError m => Range -> m () data DoWarn NoWarn :: DoWarn DoWarn :: DoWarn -- | Get the fixities and polarity pragmas from the current block. Doesn't -- go inside modules and where blocks. The reason for this is that these -- declarations have to appear at the same level (or possibly outside an -- abstract or mutual block) as their target declaration. fixitiesAndPolarities :: MonadFixityError m => DoWarn -> [Declaration] -> m (Fixities, Polarities) instance GHC.Classes.Eq Agda.Syntax.Concrete.Fixity.DoWarn instance GHC.Internal.Base.Monoid Agda.Syntax.Concrete.Fixity.DeclaredNames instance Agda.Syntax.Concrete.Fixity.MonadFixityError m => GHC.Internal.Base.Monoid (Agda.Syntax.Concrete.Fixity.MonadicFixPol m) instance GHC.Internal.Base.Semigroup Agda.Syntax.Concrete.Fixity.DeclaredNames instance Agda.Syntax.Concrete.Fixity.MonadFixityError m => GHC.Internal.Base.Semigroup (Agda.Syntax.Concrete.Fixity.MonadicFixPol m) instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Fixity.DoWarn -- | Basic data types for library management. module Agda.Interaction.Library.Base -- | A symbolic library name. -- -- Library names are structured into the base name and a suffix of -- version numbers, e.g. mylib-1.2.3. The version suffix is -- optional. data LibName LibName :: Text -> [Integer] -> LibName -- | Actual library name. [libNameBase] :: LibName -> Text -- | Major version, minor version, subminor version, etc., all -- non-negative. [libNameVersion] :: LibName -> [Integer] -- | Split a library name into basename and a list of version numbers. -- --
-- parseLibName "foo-1.2.3" == LibName "foo" [1, 2, 3] -- parseLibName "foo-01.002.3" == LibName "foo" [1, 2, 3] ---- -- Note that because of leading zeros, parseLibName is not -- injective. (prettyShow . parseLibName would produce a normal -- form.) parseLibName :: String -> LibName data LibrariesFile LibrariesFile :: FilePath -> Bool -> LibrariesFile -- | E.g. ~.agdalibraries. [lfPath] :: LibrariesFile -> FilePath -- | The libraries file might not exist, but we may print its assumed -- location in error messages. [lfExists] :: LibrariesFile -> Bool -- | A symbolic executable name. type ExeName = Text type ExeMap = Map ExeName FilePath data ExecutablesFile ExecutablesFile :: FilePath -> Bool -> ExecutablesFile -- | E.g. ~.agdaexecutables. [efPath] :: ExecutablesFile -> FilePath -- | The executables file might not exist, but we may print its assumed -- location in error messages. [efExists] :: ExecutablesFile -> Bool -- | The special name "." is used to indicated that the current -- directory should count as a project root. libNameForCurrentDir :: LibName -- | A file can either belong to a project located at a given root -- containing an .agda-lib file, or be part of the default project. data ProjectConfig ProjectConfig :: FilePath -> FilePath -> !Int -> ProjectConfig -- | Directory which contains the .agda-lib file for the current -- project. [configRoot] :: ProjectConfig -> FilePath -- | .agda-lib file relative to configRoot (filename only, -- no directory). [configAgdaLibFile] :: ProjectConfig -> FilePath -- | How many directories above the Agda file is the .agda-lib -- file located? [configAbove] :: ProjectConfig -> !Int DefaultProjectConfig :: ProjectConfig -- | The options from an OPTIONS pragma (or a .agda-lib -- file). -- -- In the future it might be nice to switch to a more structured -- representation. Note that, currently, there is not a one-to-one -- correspondence between list elements and options. data OptionsPragma OptionsPragma :: [String] -> Range -> OptionsPragma -- | The options. [pragmaStrings] :: OptionsPragma -> [String] -- | The range of the options in the pragma (not including things like an -- OPTIONS keyword). [pragmaRange] :: OptionsPragma -> Range -- | Content of a .agda-lib file. data AgdaLibFile AgdaLibFile :: LibName -> FilePath -> !Int -> [FilePath] -> [LibName] -> OptionsPragma -> AgdaLibFile -- | The symbolic name of the library. [_libName] :: AgdaLibFile -> LibName -- | Path to this .agda-lib file (not content of the file). [_libFile] :: AgdaLibFile -> FilePath -- | How many directories above the Agda file is the .agda-lib -- file located? [_libAbove] :: AgdaLibFile -> !Int -- | Roots where to look for the modules of the library. [_libIncludes] :: AgdaLibFile -> [FilePath] -- | Dependencies. [_libDepends] :: AgdaLibFile -> [LibName] -- | Default pragma options for all files in the library. [_libPragmas] :: AgdaLibFile -> OptionsPragma emptyLibFile :: AgdaLibFile lensConfigAbove :: Lens' ProjectConfig Int libName :: Lens' AgdaLibFile LibName libFile :: Lens' AgdaLibFile FilePath libAbove :: Lens' AgdaLibFile Int libIncludes :: Lens' AgdaLibFile [FilePath] libDepends :: Lens' AgdaLibFile [LibName] libPragmas :: Lens' AgdaLibFile OptionsPragma type LineNumber = Int -- | Information about which .agda-lib file we are reading and -- from where in the libraries file it came from. data LibPositionInfo LibPositionInfo :: Maybe FilePath -> LineNumber -> FilePath -> LibPositionInfo -- | Name of libraries file. [libFilePos] :: LibPositionInfo -> Maybe FilePath -- | Line number in libraries file. [lineNumPos] :: LibPositionInfo -> LineNumber -- | Library file. [filePos] :: LibPositionInfo -> FilePath data LibWarning LibWarning :: Maybe LibPositionInfo -> LibWarning' -> LibWarning -- | Library Warnings. data LibWarning' UnknownField :: String -> LibWarning' libraryWarningName :: LibWarning -> WarningName data LibError LibError :: Maybe LibPositionInfo -> LibError' -> LibError -- | Collected errors while processing library files. data LibError' -- | The user specified replacement for the default libraries file -- does not exist. LibrariesFileNotFound :: FilePath -> LibError' -- | Raised when a library name could not successfully be resolved to an -- .agda-lib file. LibNotFound :: LibrariesFile -> LibName -> LibError' -- | Raised when a library name is defined in several .agda-lib -- files. AmbiguousLib :: LibName -> List2 AgdaLibFile -> LibError' -- | The given project root contains more than one .agda-lib file. SeveralAgdaLibFiles :: FilePath -> List2 FilePath -> LibError' -- | The .agda-lib file could not be parsed. LibParseError :: LibParseError -> LibError' -- | An I/O Error occurred when reading a file. ReadError :: IOException -> String -> LibError' -- | The executables file contains duplicate entries. DuplicateExecutable :: FilePath -> Text -> List2 (LineNumber, FilePath) -> LibError' -- | Exceptions thrown by the .agda-lib parser. data LibParseError -- | An invalid library name, e.g., containing spaces. BadLibraryName :: String -> LibParseError -- | I/O error while reading file. ReadFailure :: FilePath -> IOException -> LibParseError -- | Missing these mandatory fields. MissingFields :: List1 String -> LibParseError -- | These fields occur each more than once. DuplicateFields :: List1 String -> LibParseError -- | At the given line number, a field name is missing before the -- :. MissingFieldName :: LineNumber -> LibParseError -- | At the given line number, an invalid field name is encountered before -- the :. (E.g., containing spaces.) BadFieldName :: LineNumber -> String -> LibParseError -- | At the given line number, the given field is not followed by -- :. MissingColonForField :: LineNumber -> String -> LibParseError -- | At the given line number, indented text (content) is not preceded by a -- field. ContentWithoutField :: LineNumber -> LibParseError -- | Collection of LibErrors and LibWarnings. type LibErrWarns = [Either LibError LibWarning] warnings :: MonadWriter LibErrWarns m => List1 LibWarning -> m () warnings' :: MonadWriter LibErrWarns m => List1 LibWarning' -> m () raiseErrors' :: MonadWriter LibErrWarns m => List1 LibError' -> m () raiseErrors :: MonadWriter LibErrWarns m => List1 LibError -> m () -- | Collects LibErrors and LibWarnings. type LibErrorIO = WriterT LibErrWarns StateT LibState IO -- | Throws LibErrors exceptions, still collects LibWarnings. type LibM = ExceptT LibErrors WriterT [LibWarning] StateT LibState IO type LibState = LibCache -- | Cache locations of project configurations and parsed -- .agda-lib files. data LibCache LibCache :: !Map FilePath ProjectConfig -> !Map FilePath AgdaLibFile -> LibCache -- | Map from directories to paths of closest enclosing .agda-lib -- files (or DefaultProjectConfig if there are none). [projectConfigs] :: LibCache -> !Map FilePath ProjectConfig -- | Contents of .agda-lib files that have already been parsed. [agdaLibFiles] :: LibCache -> !Map FilePath AgdaLibFile -- | Collected errors when processing an .agda-lib file. data LibErrors LibErrors :: [AgdaLibFile] -> List1 LibError -> LibErrors [libErrorsInstalledLibraries] :: LibErrors -> [AgdaLibFile] [libErrors] :: LibErrors -> List1 LibError runLibM :: LibM a -> LibState -> IO ((Either LibErrors a, [LibWarning]), LibState) getCachedProjectConfig :: (MonadState LibState m, MonadIO m) => FilePath -> m (Maybe ProjectConfig) storeCachedProjectConfig :: (MonadState LibState m, MonadIO m) => FilePath -> ProjectConfig -> m () getCachedAgdaLibFile :: (MonadState LibState m, MonadIO m) => FilePath -> m (Maybe AgdaLibFile) storeCachedAgdaLibFile :: (MonadState LibState m, MonadIO m) => FilePath -> AgdaLibFile -> m () -- | Pretty-print LibError. formatLibError :: [AgdaLibFile] -> LibError -> Doc -- | Pretty-print LibErrors. formatLibErrors :: LibErrors -> Doc -- | Does a parse error contain a line number? hasLineNumber :: LibParseError -> Maybe LineNumber -- | Compute a position position prefix. -- -- Depending on the error to be printed, it will -- --
-- name: Main -- depend: -- standard-library -- include: . -- src more-src -- -- ---- -- Should parse as: -- --
-- AgdaLib -- { libName = Main -- , libFile = path_to_this_file -- , libIncludes = [ "." , "src" , "more-src" ] -- , libDepends = [ "standard-library" ] -- } -- --module Agda.Interaction.Library.Parse -- | Parse .agda-lib file. -- -- Sets libFile name and turn mentioned include directories into -- absolute pathes (provided the given FilePath is absolute). parseLibFile :: FilePath -> IO (P AgdaLibFile) -- | Break a comma-separated string. Result strings are trimmed. splitCommas :: String -> [String] -- | Remove leading whitespace and line comment. trimLineComment :: String -> String runP :: P a -> (Either LibParseError a, [LibWarning']) instance GHC.Internal.Show.Show Agda.Interaction.Library.Parse.GenericLine -- | Ranges. module Agda.Interaction.Highlighting.Range -- | Character ranges. The first character in the file has position 1. Note -- that the to position is considered to be outside of the range. -- -- Invariant: from <= to. data Range Range :: !Int -> !Int -> Range [from] :: Range -> !Int [to] :: Range -> !Int -- | The Range invariant. rangeInvariant :: Range -> Bool -- | Zero or more consecutive and separated ranges. newtype Ranges Ranges :: [Range] -> Ranges -- | The Ranges invariant. rangesInvariant :: Ranges -> Bool -- | True iff the ranges overlap. -- -- The ranges are assumed to be well-formed. overlapping :: Range -> Range -> Bool overlappings :: Ranges -> Ranges -> Bool empty :: Null a => a -- | Converts a range to a list of positions. rangeToPositions :: Range -> [Int] -- | Converts several ranges to a list of positions. rangesToPositions :: Ranges -> [Int] -- | Converts a Range to a Ranges. rToR :: Range -> Ranges -- | Converts a Range, seen as a continuous range, to a -- Range. rangeToRange :: Range -> Range -- | minus xs ys computes the difference between xs and -- ys: the result contains those positions which are present in -- xs but not in ys. -- -- Linear in the lengths of the input ranges. minus :: Ranges -> Ranges -> Ranges instance GHC.Classes.Eq Agda.Interaction.Highlighting.Range.Range instance GHC.Classes.Eq Agda.Interaction.Highlighting.Range.Ranges instance Control.DeepSeq.NFData Agda.Interaction.Highlighting.Range.Range instance Control.DeepSeq.NFData Agda.Interaction.Highlighting.Range.Ranges instance Agda.Utils.Null.Null Agda.Interaction.Highlighting.Range.Range instance GHC.Classes.Ord Agda.Interaction.Highlighting.Range.Range instance GHC.Internal.Show.Show Agda.Interaction.Highlighting.Range.Range instance GHC.Internal.Show.Show Agda.Interaction.Highlighting.Range.Ranges -- | Maps containing non-overlapping intervals. module Agda.Utils.RangeMap -- | A class that is intended to make it easy to swap between different -- range map implementations. -- -- Note that some RangeMap operations are not included in this -- class. class IsBasicRangeMap a m | m -> a -- | The map singleton rs x contains the ranges from -- rs, and every position in those ranges is associated with -- x. singleton :: IsBasicRangeMap a m => Ranges -> a -> m -- | Converts range maps to IntMaps from positions to values. toMap :: IsBasicRangeMap a m => m -> IntMap a -- | Converts the map to a list. The ranges are non-overlapping and -- non-empty, and earlier ranges precede later ones in the list. toList :: IsBasicRangeMap a m => m -> [(Range, a)] -- | Returns the smallest range covering everything in the map (or -- Nothing, if the range would be empty). -- -- Note that the default implementation of this operation might be -- inefficient. coveringRange :: IsBasicRangeMap a m => m -> Maybe Range -- | Like singleton, but with several Ranges instead of only -- one. several :: (IsBasicRangeMap a hl, Monoid hl) => [Ranges] -> a -> hl -- | A strict pair type where the first argument must be an Int. -- -- This type is included because there is no NFData instance for -- Pair in the package strict before version 4. newtype PairInt a PairInt :: Pair Int a -> PairInt a -- | Maps containing non-overlapping intervals. -- -- The implementation does not use IntMap, because IntMap does not come -- with a constant-time size function. -- -- Note the invariant which RangeMaps should satisfy -- (rangeMapInvariant). newtype RangeMap a RangeMap :: Map Int (PairInt a) -> RangeMap a -- | The keys are starting points of ranges, and the pairs contain -- endpoints and values. [rangeMap] :: RangeMap a -> Map Int (PairInt a) -- | Invariant for RangeMap. -- -- The ranges must not be empty, and they must not overlap. rangeMapInvariant :: RangeMap a -> Bool -- | Converts a list of pairs of ranges and values to a RangeMap. -- The ranges have to be non-overlapping and non-empty, and earlier -- ranges have to precede later ones. fromNonOverlappingNonEmptyAscendingList :: [(Range, a)] -> RangeMap a -- | Inserts a value, along with a corresponding Range, into a -- RangeMap. No attempt is made to merge adjacent ranges with -- equal values. -- -- The function argument is used to combine values. The inserted value is -- given as the first argument to the function. insert :: (a -> a -> a) -> Range -> a -> RangeMap a -> RangeMap a -- | The value of splitAt p f is a pair (f1, f2) -- which contains everything from f. All the positions in -- f1 are less than p, and all the positions in -- f2 are greater than or equal to p. splitAt :: Int -> RangeMap a -> (RangeMap a, RangeMap a) -- | Returns a RangeMap overlapping the given range, as well as the -- rest of the map. insideAndOutside :: Range -> RangeMap a -> (RangeMap a, RangeMap a) -- | Restricts the RangeMap to the given range. restrictTo :: Range -> RangeMap a -> RangeMap a instance Agda.Utils.RangeMap.IsBasicRangeMap a (Agda.Utils.RangeMap.RangeMap a) instance GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Monoid (Agda.Utils.RangeMap.RangeMap a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Utils.RangeMap.PairInt a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.Utils.RangeMap.RangeMap a) instance Agda.Utils.Null.Null (Agda.Utils.RangeMap.RangeMap a) instance GHC.Internal.Base.Semigroup a => GHC.Internal.Base.Semigroup (Agda.Utils.RangeMap.RangeMap a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.RangeMap.PairInt a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.RangeMap.RangeMap a) -- | Agda-specific benchmarking structure. module Agda.Benchmarking -- | Phases to allocate CPU time to. data Phase -- | Happy parsing and operator parsing. Parsing :: Phase -- | Import chasing. Import :: Phase -- | Reading interface files. Deserialization :: Phase -- | Scope checking and translation to abstract syntax. Scoping :: Phase -- | Type checking and translation to internal syntax. Typing :: Phase -- | Termination checking. Termination :: Phase -- | Positivity checking and polarity computation. Positivity :: Phase -- | Injectivity checking. Injectivity :: Phase -- | Checking for projection likeness. ProjectionLikeness :: Phase -- | Coverage checking and compilation to case trees. Coverage :: Phase -- | Generating highlighting info. Highlighting :: Phase -- | Writing interface files. Serialization :: Phase -- | Dead code elimination. DeadCode :: Phase -- | Unfolding all metas before serialization. InterfaceInstantiateFull :: Phase -- | Dead code reachable definitions subphase. DeadCodeReachable :: Phase -- | Subphase for Termination. Graph :: Phase -- | Subphase for Termination. RecCheck :: Phase -- | Subphase for Termination. Reduce :: Phase -- | Subphase for Termination. Level :: Phase -- | Subphase for Termination. Compare :: Phase -- | Subphase for Termination. With :: Phase -- | Subphase for Import. ModuleName :: Phase -- | Subphase for Deserialization: compacting interfaces. Compaction :: Phase -- | Subphase for Serialization. BuildInterface :: Phase -- | Subphase for Serialization. Sort :: Phase -- | Subphase for Serialization. BinaryEncode :: Phase -- | Subphase for Serialization. Compress :: Phase -- | Subphase for Parsing. OperatorsExpr :: Phase -- | Subphase for Parsing. OperatorsPattern :: Phase -- | Subphase for Typing: free variable computation. Free :: Phase -- | Subphase for Typing: occurs check for solving metas. OccursCheck :: Phase -- | Subphase for Typing: checking the LHS CheckLHS :: Phase -- | Subphase for Typing: checking the RHS CheckRHS :: Phase -- | Subphase for Typing: checking a type signature TypeSig :: Phase -- | Subphase for Typing: generalizing over variables Generalize :: Phase -- | Subphase for Typing: solving instance goals InstanceSearch :: Phase -- | Subphase for Typing: evaluating elaborator reflection Reflection :: Phase -- | Subphase for InstanceSearch: collecting initial candidates InitialCandidates :: Phase -- | Subphase for InstanceSearch: checking candidates for validity FilterCandidates :: Phase -- | Subphase for InstanceSearch: ordering candidates for -- specificity OrderCandidates :: Phase -- | Subphase for InstanceSearch: reducing overlapping instances CheckOverlap :: Phase -- | Subphase for CheckLHS: unification of the indices UnifyIndices :: Phase -- | Pretty printing names. InverseScopeLookup :: Phase TopModule :: TopLevelModuleName -> Phase Typeclass :: QName -> Phase Definition :: QName -> Phase type Benchmark = Benchmark Phase type Account = Account Phase isModuleAccount :: Account -> Bool isDefAccount :: Account -> Bool isInternalAccount :: Account -> Bool -- | Global variable to store benchmark statistics. benchmarks :: IORef Benchmark -- | Benchmark an IO computation and bill it to the given account. billToIO :: Account -> IO a -> IO a -- | Benchmark a pure computation and bill it to the given account. billToPure :: Account -> a -> a instance GHC.Classes.Eq Agda.Benchmarking.Phase instance GHC.Internal.Generics.Generic Agda.Benchmarking.Phase instance Agda.Utils.Benchmark.MonadBench GHC.Types.IO instance Control.DeepSeq.NFData Agda.Benchmarking.Phase instance GHC.Classes.Ord Agda.Benchmarking.Phase instance Agda.Syntax.Common.Pretty.Pretty Agda.Benchmarking.Phase instance GHC.Internal.Show.Show Agda.Benchmarking.Phase -- | Computing the free variables of a term. -- -- The distinction between rigid and strongly rigid occurrences comes -- from: Jason C. Reed, PhD thesis, 2009, page 96 (see also his LFMTP -- 2009 paper) -- -- The main idea is that x = t(x) is unsolvable if x occurs strongly -- rigidly in t. It might have a solution if the occurrence is not -- strongly rigid, e.g. -- -- x = f -> suc (f (x ( y -> k))) has x = f -> suc (f (suc k)) -- --
-- Γ ⊢ ρ : Δ, Ψ -- ------------------- -- Γ ⊢ dropS |Ψ| ρ : Δ -- --dropS :: Int -> Substitution' a -> Substitution' a -- |
-- applySubst (ρ composeS σ) v == applySubst ρ (applySubst σ v) --composeS :: EndoSubst a => Substitution' a -> Substitution' a -> Substitution' a splitS :: Int -> Substitution' a -> (Substitution' a, Substitution' a) (++#) :: DeBruijn a => [a] -> Substitution' a -> Substitution' a infixr 4 ++# -- |
-- Γ ⊢ ρ : Δ Γ ⊢ reverse vs : Θ -- ----------------------------- (treating Nothing as having any type) -- Γ ⊢ prependS vs ρ : Δ, Θ -- --prependS :: DeBruijn a => Impossible -> [Maybe a] -> Substitution' a -> Substitution' a -- |
-- Γ ⊢ reverse vs : Δ -- ----------------------------- -- Γ ⊢ parallelS vs ρ : Γ, Δ -- ---- -- Note the Γ in Γ, Δ. parallelS :: DeBruijn a => [a] -> Substitution' a -- | Γ ⊢ (strengthenS ⊥ |Δ|) : Γ,Δ strengthenS :: Impossible -> Int -> Substitution' a -- | A "smart" variant of Strengthen. If strengthenS is -- applied to a substitution with an outermost Strengthen -- constructor, then the "error message" of that constructor is discarded -- in favour of the Impossible argument of this function. strengthenS' :: Impossible -> Int -> Substitution' a -> Substitution' a lookupS :: EndoSubst a => Substitution' a -> Nat -> a -- | lookupS (listS [(x0,t0)..(xn,tn)]) xi = ti, assuming x0 < .. < -- xn. listS :: EndoSubst a => [(Int, a)] -> Substitution' a -- |
-- Γ, Ξ, Δ ⊢ raiseFromS |Δ| |Ξ| : Γ, Δ --raiseFromS :: Nat -> Nat -> Substitution' a -- | Instantiate an abstraction. Strict in the term. absApp :: Subst a => Abs a -> SubstArg a -> a -- | Instantiate an abstraction. Lazy in the term, which allow it to be -- IMPOSSIBLE in the case where the variable shouldn't be used but -- we cannot use noabsApp. Used in Apply. lazyAbsApp :: Subst a => Abs a -> SubstArg a -> a -- | Instantiate an abstraction that doesn't use its argument. noabsApp :: Subst a => Impossible -> Abs a -> a absBody :: Subst a => Abs a -> a mkAbs :: (Subst a, Free a) => ArgName -> a -> Abs a reAbs :: (Subst a, Free a) => Abs a -> Abs a instance GHC.Internal.Base.Functor (Agda.TypeChecking.Substitute.Class.NoSubst t) instance GHC.Internal.Generics.Generic (Agda.TypeChecking.Substitute.Class.NoSubst t a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Agda.TypeChecking.Substitute.Class.NoSubst t a) instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn t => Agda.TypeChecking.Substitute.Class.Subst (Agda.TypeChecking.Substitute.Class.NoSubst t a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Abstract.Name.QName -- | This module defines the notion of a scope and operations on scopes. module Agda.Syntax.Scope.Base -- | A scope is a named collection of names partitioned into public and -- private names. data Scope Scope :: ModuleName -> [ModuleName] -> ScopeNameSpaces -> Map QName ModuleName -> Maybe DataOrRecordModule -> Scope [scopeName] :: Scope -> ModuleName [scopeParents] :: Scope -> [ModuleName] [scopeNameSpaces] :: Scope -> ScopeNameSpaces [scopeImports] :: Scope -> Map QName ModuleName [scopeDatatypeModule] :: Scope -> Maybe DataOrRecordModule data DataOrRecordModule IsDataModule :: DataOrRecordModule IsRecordModule :: DataOrRecordModule -- | See Access. data NameSpaceId -- | Things not exported by this module. PrivateNS :: NameSpaceId -- | Things defined and exported by this module. PublicNS :: NameSpaceId -- | Things from open public, exported by this module. ImportedNS :: NameSpaceId allNameSpaces :: [NameSpaceId] type ScopeNameSpaces = [(NameSpaceId, NameSpace)] localNameSpace :: Access -> NameSpaceId nameSpaceAccess :: NameSpaceId -> Access -- | Get a NameSpace from Scope. scopeNameSpace :: NameSpaceId -> Scope -> NameSpace -- | A lens for scopeNameSpaces updateScopeNameSpaces :: (ScopeNameSpaces -> ScopeNameSpaces) -> Scope -> Scope -- | `Monadic' lens (Functor sufficient). updateScopeNameSpacesM :: Functor m => (ScopeNameSpaces -> m ScopeNameSpaces) -> Scope -> m Scope -- | The complete information about the scope at a particular program point -- includes the scope stack, the local variables, and the context -- precedence. data ScopeInfo ScopeInfo :: ModuleName -> Map ModuleName Scope -> LocalVars -> LocalVars -> !PrecedenceStack -> NameMap -> ModuleMap -> InScopeSet -> Fixities -> Polarities -> Map QName (QName, Maybe Induction) -> ScopeInfo [_scopeCurrent] :: ScopeInfo -> ModuleName [_scopeModules] :: ScopeInfo -> Map ModuleName Scope -- | The variables that will be bound at the end of the current block of -- variables (i.e. clause). We collect them here instead of binding them -- immediately so we can avoid shadowing between variables in the same -- variable block. [_scopeVarsToBind] :: ScopeInfo -> LocalVars [_scopeLocals] :: ScopeInfo -> LocalVars [_scopePrecedence] :: ScopeInfo -> !PrecedenceStack [_scopeInverseName] :: ScopeInfo -> NameMap [_scopeInverseModule] :: ScopeInfo -> ModuleMap [_scopeInScope] :: ScopeInfo -> InScopeSet -- | Maps concrete names C.Name to fixities [_scopeFixities] :: ScopeInfo -> Fixities -- | Maps concrete names C.Name to polarities [_scopePolarities] :: ScopeInfo -> Polarities -- | Maps the name of a record to the name of its (co)constructor. [_scopeRecords] :: ScopeInfo -> Map QName (QName, Maybe Induction) -- | For the sake of highlighting, the _scopeInverseName map also -- stores the KindOfName of an A.QName. data NameMapEntry NameMapEntry :: KindOfName -> List1 QName -> NameMapEntry -- | The anameKind. [qnameKind] :: NameMapEntry -> KindOfName -- | Possible renderings of the abstract name. [qnameConcrete] :: NameMapEntry -> List1 QName type NameMap = Map QName NameMapEntry type ModuleMap = Map ModuleName [QName] -- | Local variables. type LocalVars = AssocList Name LocalVar -- | For each bound variable, we want to know whether it was bound by a λ, -- Π, module telescope, pattern, or let. data BindingSource -- | λ (currently also used for Π and module parameters) LambdaBound :: BindingSource -- | f ... =. Remember Hiding for pattern variables -- {x} and {{x}}. This information is only used for -- checking pattern synonyms. It is not serialized. PatternBound :: Hiding -> BindingSource -- |
-- let ... in --LetBound :: BindingSource -- |
-- | ... in q --WithBound :: BindingSource -- | Binding added to scope by one of context-manipulating reflection -- primitives MacroBound :: BindingSource -- | A local variable can be shadowed by an import. In case of reference to -- a shadowed variable, we want to report a scope error. data LocalVar LocalVar :: Name -> BindingSource -> [AbstractName] -> LocalVar -- | Unique ID of local variable. [localVar] :: LocalVar -> Name -- | Kind of binder used to introduce the variable (λ, -- let, ...). [localBindingSource] :: LocalVar -> BindingSource -- | If this list is not empty, the local variable is shadowed by one or -- more imports. [localShadowedBy] :: LocalVar -> [AbstractName] -- | Shadow a local name by a non-empty list of imports. shadowLocal :: List1 AbstractName -> LocalVar -> LocalVar -- | Treat patternBound variable as a module parameter patternToModuleBound :: LocalVar -> LocalVar -- | Project name of unshadowed local variable. notShadowedLocal :: LocalVar -> Maybe Name -- | Get all locals that are not shadowed by imports. notShadowedLocals :: LocalVars -> AssocList Name Name -- | Lenses for ScopeInfo components scopeCurrent :: Lens' ScopeInfo ModuleName scopeModules :: Lens' ScopeInfo (Map ModuleName Scope) scopeVarsToBind :: Lens' ScopeInfo LocalVars scopeLocals :: Lens' ScopeInfo LocalVars scopePrecedence :: Lens' ScopeInfo PrecedenceStack scopeInverseName :: Lens' ScopeInfo NameMap scopeInverseModule :: Lens' ScopeInfo ModuleMap scopeInScope :: Lens' ScopeInfo InScopeSet scopeFixities :: Lens' ScopeInfo Fixities scopePolarities :: Lens' ScopeInfo Polarities scopeRecords :: Lens' ScopeInfo (Map QName (QName, Maybe Induction)) scopeFixitiesAndPolarities :: Lens' ScopeInfo (Fixities, Polarities) -- | Lens for scopeVarsToBind. updateVarsToBind :: (LocalVars -> LocalVars) -> ScopeInfo -> ScopeInfo setVarsToBind :: LocalVars -> ScopeInfo -> ScopeInfo -- | Lens for scopeLocals. updateScopeLocals :: (LocalVars -> LocalVars) -> ScopeInfo -> ScopeInfo setScopeLocals :: LocalVars -> ScopeInfo -> ScopeInfo -- | A NameSpace contains the mappings from concrete names that -- the user can write to the abstract fully qualified names that the type -- checker wants to read. data NameSpace NameSpace :: NamesInScope -> ModulesInScope -> InScopeSet -> NameSpace -- | Maps concrete names to a list of abstract names. [nsNames] :: NameSpace -> NamesInScope -- | Maps concrete module names to a list of abstract module names. [nsModules] :: NameSpace -> ModulesInScope -- | All abstract names targeted by a concrete name in scope. Computed by -- recomputeInScopeSets. [nsInScope] :: NameSpace -> InScopeSet type ThingsInScope a = Map Name List1 a type NamesInScope = ThingsInScope AbstractName type ModulesInScope = ThingsInScope AbstractModule type InScopeSet = Set QName -- | Set of types consisting of exactly AbstractName and -- AbstractModule. -- -- A GADT just for some dependent-types trickery. data InScopeTag a [NameTag] :: InScopeTag AbstractName [ModuleTag] :: InScopeTag AbstractModule -- | Type class for some dependent-types trickery. class Ord a => InScope a inScopeTag :: InScope a => InScopeTag a -- | inNameSpace selects either the name map or the module name -- map from a NameSpace. What is selected is determined by result -- type (using the dependent-type trickery). inNameSpace :: InScope a => NameSpace -> ThingsInScope a -- | Non-dependent tag for name or module. data NameOrModule NameNotModule :: NameOrModule ModuleNotName :: NameOrModule -- | For the sake of parsing left-hand sides, we distinguish constructor -- and record field names from defined names. data KindOfName -- | Constructor name (Inductive or don't know). ConName :: KindOfName -- | Constructor name (definitely CoInductive). CoConName :: KindOfName -- | Record field name. FldName :: KindOfName -- | Name of a pattern synonym. PatternSynName :: KindOfName -- | Name to be generalized GeneralizeName :: KindOfName -- | Generalizable variable from a let open DisallowedGeneralizeName :: KindOfName -- | Name of a macro MacroName :: KindOfName -- | A name that can only be quoted. Previous category DefName: -- (Refined in a flat manner as Enum and Bounded are not hereditary.) QuotableName :: KindOfName -- | Name of a data. DataName :: KindOfName -- | Name of a record. RecName :: KindOfName -- | Name of a defined function. FunName :: KindOfName -- | Name of a postulate. AxiomName :: KindOfName -- | Name of a primitive. PrimName :: KindOfName -- | A DefName, but either other kind or don't know which kind. -- End DefName. Keep these together in sequence, for sake of -- isDefName! OtherDefName :: KindOfName -- | All kinds of regular definitions. defNameKinds :: [KindOfName] isDefName :: KindOfName -> Bool -- | Constructor and pattern synonyms. conLikeNameKinds :: [KindOfName] isConName :: KindOfName -> Maybe Induction conKindOfName :: Induction -> KindOfName -- | For ambiguous constructors, we might have both alternatives of -- Induction. In this case, we default to ConName. conKindOfName' :: Foldable t => t Induction -> KindOfName -- | For ambiguous constructors, we might have both alternatives of -- Induction. In this case, we default to Inductive. approxConInduction :: Foldable t => t Induction -> Induction exactConInduction :: Foldable t => t Induction -> Maybe Induction -- | Only return [Co]ConName if no ambiguity. exactConName :: Foldable t => t Induction -> Maybe KindOfName -- | A set of KindOfName, for the sake of elemKindsOfNames. data KindsOfNames AllKindsOfNames :: KindsOfNames -- | Only these kinds. SomeKindsOfNames :: Set KindOfName -> KindsOfNames -- | All but these Kinds. ExceptKindsOfNames :: Set KindOfName -> KindsOfNames elemKindsOfNames :: KindOfName -> KindsOfNames -> Bool allKindsOfNames :: KindsOfNames someKindsOfNames :: [KindOfName] -> KindsOfNames exceptKindsOfNames :: [KindOfName] -> KindsOfNames -- | Decorate something with KindOfName data WithKind a WithKind :: KindOfName -> a -> WithKind a [theKind] :: WithKind a -> KindOfName [kindedThing] :: WithKind a -> a -- | Where does a name come from? -- -- This information is solely for reporting to the user, see -- whyInScope. data WhyInScope -- | Defined in this module. Defined :: WhyInScope -- | Imported from another module. Opened :: QName -> WhyInScope -> WhyInScope -- | Imported by a module application. Applied :: QName -> WhyInScope -> WhyInScope -- | A decoration of QName. data AbstractName AbsName :: QName -> KindOfName -> WhyInScope -> NameMetadata -> AbstractName -- | The resolved qualified name. [anameName] :: AbstractName -> QName -- | The kind (definition, constructor, record field etc.). [anameKind] :: AbstractName -> KindOfName -- | Explanation where this name came from. [anameLineage] :: AbstractName -> WhyInScope -- | Additional information needed during scope checking. Currently used -- for generalized data/record params. [anameMetadata] :: AbstractName -> NameMetadata data NameMetadata NoMetadata :: NameMetadata GeneralizedVarsMetadata :: Map QName Name -> NameMetadata -- | A decoration of abstract syntax module names. data AbstractModule AbsModule :: ModuleName -> WhyInScope -> AbstractModule -- | The resolved module name. [amodName] :: AbstractModule -> ModuleName -- | Explanation where this name came from. [amodLineage] :: AbstractModule -> WhyInScope -- | Van Laarhoven lens on anameName. lensAnameName :: Lens' AbstractName QName -- | Van Laarhoven lens on amodName. lensAmodName :: Lens' AbstractModule ModuleName data ResolvedName -- | Local variable bound by λ, Π, module telescope, pattern, let. VarName :: Name -> BindingSource -> ResolvedName [resolvedVar] :: ResolvedName -> Name -- | What kind of binder? [resolvedBindingSource] :: ResolvedName -> BindingSource -- | Function, data/record type, postulate. DefinedName :: Access -> AbstractName -> Suffix -> ResolvedName -- | Record field name. Needs to be distinguished to parse copatterns. FieldName :: List1 AbstractName -> ResolvedName -- | Data or record constructor name. ConstructorName :: Set1 Induction -> List1 AbstractName -> ResolvedName -- | Name of pattern synonym. PatternSynResName :: List1 AbstractName -> ResolvedName -- | Unbound name. UnknownName :: ResolvedName -- | Why is a resolved name ambiguous? What did it resolve to? -- -- Invariant (statically enforced): At least two resolvents in total. data AmbiguousNameReason -- | The name resolves both to a local variable and some declared names. AmbiguousLocalVar :: LocalVar -> List1 AbstractName -> AmbiguousNameReason -- | The name resolves to at least 2 declared names. AmbiguousDeclName :: List2 AbstractName -> AmbiguousNameReason -- | A failure in name resolution, indicating the reason that a name which -- is in scope could not be returned from tryResolveName. data NameResolutionError -- | Ambiguous names are not supported in this situation. IllegalAmbiguity :: AmbiguousNameReason -> NameResolutionError -- | The name was Foo.constructor, and Foo is in scope, -- but it is not a record. ConstrOfNonRecord :: QName -> ResolvedName -> NameResolutionError -- | The flat list of ambiguous names in AmbiguousNameReason. ambiguousNamesInReason :: AmbiguousNameReason -> List2 QName data WhyInScopeData WhyInScopeData :: QName -> FilePath -> Maybe LocalVar -> [AbstractName] -> [AbstractModule] -> WhyInScopeData whyInScopeDataFromAmbiguousNameReason :: QName -> AmbiguousNameReason -> WhyInScopeData mergeNames :: Eq a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a mergeNamesMany :: Eq a => [ThingsInScope a] -> ThingsInScope a -- | The empty name space. emptyNameSpace :: NameSpace -- | Map functions over the names and modules in a name space. mapNameSpace :: (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet) -> NameSpace -> NameSpace -- | Zip together two name spaces. zipNameSpace :: (NamesInScope -> NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet -> InScopeSet) -> NameSpace -> NameSpace -> NameSpace -- | Map monadic function over a namespace. mapNameSpaceM :: Applicative m => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> (InScopeSet -> m InScopeSet) -> NameSpace -> m NameSpace -- | The empty scope. emptyScope :: Scope -- | The empty scope info. emptyScopeInfo :: ScopeInfo -- | Map functions over the names and modules in a scope. mapScope :: (NameSpaceId -> NamesInScope -> NamesInScope) -> (NameSpaceId -> ModulesInScope -> ModulesInScope) -> (NameSpaceId -> InScopeSet -> InScopeSet) -> Scope -> Scope -- | Same as mapScope but applies the same function to all name -- spaces. mapScope_ :: (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet) -> Scope -> Scope -- | Same as mapScope but applies the function only on the given -- name space. mapScopeNS :: NameSpaceId -> (NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet) -> Scope -> Scope -- | Map monadic functions over the names and modules in a scope. mapScopeM :: Applicative m => (NameSpaceId -> NamesInScope -> m NamesInScope) -> (NameSpaceId -> ModulesInScope -> m ModulesInScope) -> (NameSpaceId -> InScopeSet -> m InScopeSet) -> Scope -> m Scope -- | Same as mapScopeM but applies the same function to both the -- public and private name spaces. mapScopeM_ :: Applicative m => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> (InScopeSet -> m InScopeSet) -> Scope -> m Scope -- | Zip together two scopes. The resulting scope has the same name as the -- first scope. zipScope :: (NameSpaceId -> NamesInScope -> NamesInScope -> NamesInScope) -> (NameSpaceId -> ModulesInScope -> ModulesInScope -> ModulesInScope) -> (NameSpaceId -> InScopeSet -> InScopeSet -> InScopeSet) -> Scope -> Scope -> Scope -- | Same as zipScope but applies the same function to both the -- public and private name spaces. zipScope_ :: (NamesInScope -> NamesInScope -> NamesInScope) -> (ModulesInScope -> ModulesInScope -> ModulesInScope) -> (InScopeSet -> InScopeSet -> InScopeSet) -> Scope -> Scope -> Scope -- | Recompute the inScope sets of a scope. recomputeInScopeSets :: Scope -> Scope -- | Filter a scope keeping only concrete names matching the predicates. -- The first predicate is applied to the names and the second to the -- modules. filterScope :: (Name -> Bool) -> (Name -> Bool) -> Scope -> Scope -- | Return all names in a scope. allNamesInScope :: InScope a => Scope -> ThingsInScope a allNamesInScope' :: InScope a => Scope -> ThingsInScope (a, Access) -- | Look up a single name in the current scope. -- -- This is equivalent to Map.lookup n . allNamesInScope', but -- more efficient when only a single name needs to be looked up. findNameInScope :: InScope a => Name -> Scope -> [(a, Access)] -- | Returns the scope's non-private names. exportedNamesInScope :: InScope a => Scope -> ThingsInScope a namesInScope :: InScope a => [NameSpaceId] -> Scope -> ThingsInScope a allThingsInScope :: Scope -> NameSpace thingsInScope :: [NameSpaceId] -> Scope -> NameSpace -- | Merge two scopes. The result has the name of the first scope. mergeScope :: Scope -> Scope -> Scope -- | Merge a non-empty list of scopes. The result has the name of the first -- scope in the list. mergeScopes :: [Scope] -> Scope -- | Move all names in a scope to the given name space (except never move -- from Imported to Public). setScopeAccess :: NameSpaceId -> Scope -> Scope -- | Update a particular name space. setNameSpace :: NameSpaceId -> NameSpace -> Scope -> Scope -- | Modify a particular name space. modifyNameSpace :: NameSpaceId -> (NameSpace -> NameSpace) -> Scope -> Scope -- | Add a name to a scope. addNameToScope :: NameSpaceId -> Name -> AbstractName -> Scope -> Scope -- | Remove a name from a scope. Caution: does not update the nsInScope -- set. This is only used by rebindName and in that case we add the name -- right back (but with a different kind). removeNameFromScope :: NameSpaceId -> Name -> Scope -> Scope -- | Add a module to a scope. addModuleToScope :: NameSpaceId -> Name -> AbstractModule -> Scope -> Scope -- | When we get here we cannot have both using and -- hiding. data UsingOrHiding UsingOnly :: [ImportedName] -> UsingOrHiding HidingOnly :: [ImportedName] -> UsingOrHiding usingOrHiding :: ImportDirective -> UsingOrHiding -- | Apply an ImportDirective to a scope: -- --
-- disjoint (fromList [2,4,6]) (fromList [1,3]) == True -- disjoint (fromList [2,4,6,8]) (fromList [2,3,5,7]) == False -- disjoint (fromList [1,2]) (fromList [1,2,3,4]) == False -- disjoint (fromList []) (fromList []) == True --disjoint :: IntSet -> IntSet -> Bool -- | <math>. Is this a subset? (s1 `isSubsetOf` s2) tells -- whether s1 is a subset of s2. isSubsetOf :: IntSet -> IntSet -> Bool -- | <math>. Is the value a member of the set? member :: Key -> IntSet -> Bool -- | <math>. Is the set empty? null :: IntSet -> Bool -- | <math>. Delete a value in the set. Returns the original set when -- the value was not present. delete :: Key -> IntSet -> IntSet -- | <math>. Difference between two sets. difference :: IntSet -> IntSet -> IntSet -- | <math>. Filter all elements that satisfy some predicate. filter :: (Key -> Bool) -> IntSet -> IntSet -- | Keep only elements greater or equal to the given pivot. filterGE :: Int -> VarSet -> VarSet -- | <math>. The intersection of two sets. intersection :: IntSet -> IntSet -> IntSet -- | <math>. The -- -- mapMonotonic f s == map f s, but works only -- when f is strictly increasing. The precondition is not -- checked. Semi-formally, we have: -- --
-- and [x < y ==> f x < f y | x <- ls, y <- ls] -- ==> mapMonotonic f s == map f s -- where ls = toList s --mapMonotonic :: (Key -> Key) -> IntSet -> IntSet -- | Subtract from each element. subtract :: Int -> VarSet -> VarSet -- | Precompute free variables in a term (and store in ArgInfo). module Agda.TypeChecking.Free.Precompute class PrecomputeFreeVars a precomputeFreeVars :: PrecomputeFreeVars a => a -> FV a precomputedFreeVars :: PrecomputeFreeVars a => a -> VarSet precomputeFreeVars_ :: PrecomputeFreeVars a => a -> a instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars Agda.Syntax.Internal.Level instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars [a] instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a, Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars b) => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (a, b) instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars Agda.Syntax.Internal.Type -- | Potentially uninitialised Booleans. -- -- The motivation for this small library is to distinguish between a -- boolean option with a default value and an option which has been set -- to what happens to be the default value. In one case the default can -- be overriden (e.g. --cubical implies --without-K) -- while in the other case the user has made a mistake which they need to -- fix. module Agda.Utils.WithDefault -- | We don't want to have to remember for each flag whether its default -- value is True or False. So we bake it into the -- representation: the flag's type will mention its default value as a -- phantom parameter. data WithDefault' a (b :: Bool) Default :: WithDefault' a (b :: Bool) Value :: !a -> WithDefault' a (b :: Bool) type WithDefault (b :: Bool) = WithDefault' Bool b -- | The main mode of operation of these flags, apart from setting them -- explicitly, is to toggle them one way or the other if they hadn't been -- set already. setDefault :: forall a (b :: Bool). Boolean a => a -> WithDefault' a b -> WithDefault' a b -- | Only modify non-Default values. mapValue :: forall a (b :: Bool). Boolean a => (a -> a) -> WithDefault' a b -> WithDefault' a b -- | Provided that the default value is a known boolean (in practice we -- only use True or False), we can collapse a -- potentially uninitialised value to a boolean. collapseDefault :: forall a (b :: Bool). (Boolean a, KnownBool b) => WithDefault' a b -> a -- | Focus, overwriting Default. lensCollapseDefault :: forall a (b :: Bool). (Boolean a, KnownBool b) => Lens' (WithDefault' a b) a -- | Update, but keep Default when new value is default value. lensKeepDefault :: forall a (b :: Bool). (Boolean a, Eq a, KnownBool b) => Lens' (WithDefault' a b) a instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.WithDefault.WithDefault' a b) instance Control.DeepSeq.NFData (Agda.Utils.WithDefault.WithDefault' a b) instance Agda.Utils.Null.Null (Agda.Utils.WithDefault.WithDefault' a b) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.WithDefault.WithDefault' a b) module Agda.Utils.Zipper class Zipper z where { type Carrier z; type Element z; } firstHole :: Zipper z => Carrier z -> Maybe (Element z, z) plugHole :: Zipper z => Element z -> z -> Carrier z nextHole :: Zipper z => Element z -> z -> Either (Carrier z) (Element z, z) data ListZipper a ListZip :: [a] -> [a] -> ListZipper a data ComposeZipper f g ComposeZip :: f -> g -> ComposeZipper f g instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Utils.Zipper.ListZipper a) instance GHC.Internal.Data.Foldable.Foldable Agda.Utils.Zipper.ListZipper instance GHC.Internal.Base.Functor Agda.Utils.Zipper.ListZipper instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Utils.Zipper.ListZipper a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Utils.Zipper.ListZipper a) instance GHC.Internal.Data.Traversable.Traversable Agda.Utils.Zipper.ListZipper instance (Agda.Utils.Zipper.Zipper f, Agda.Utils.Zipper.Zipper g, Agda.Utils.Zipper.Element f GHC.Types.~ Agda.Utils.Zipper.Carrier g) => Agda.Utils.Zipper.Zipper (Agda.Utils.Zipper.ComposeZipper f g) instance Agda.Utils.Zipper.Zipper (Agda.Utils.Zipper.ListZipper a) module Agda.Version -- | The version of Agda. version :: String -- | This package name. This is mainly intended for use in the test suites -- to filter ephemeral hash-fingerprinted package names like -- Agda-2.6.2-5ceeWeguf1QFMaHLput4zw. package :: String -- | Returns a URL corresponding to the given section in the documentation -- for the current version. docsUrl :: String -> String instance GHC.Internal.Generics.Generic Agda.Version.AnArbitrarySymbolInThisPackage module Agda.VersionCommit -- | Agda's version suffixed with the git commit hash. versionWithCommitInfo :: String -- | Information about current git commit, generated at compile time. commitInfo :: Maybe String -- | Agda's self-setup. module Agda.Setup -- | Get the path to ~/.agda (system-specific). Can be overwritten -- by the AGDA_DIR environment variable. -- -- (This is not to be confused with the directory getDataDir for -- the data files that Agda needs (e.g. the primitive modules).) getAgdaAppDir :: IO FilePath getDataDir :: IO FilePath -- | This overrides the getDataFileName from 'Paths_Agda'. getDataFileName :: FilePath -> IO FilePath -- | False: Check whether we need to setup Agda. This function can -- be called when starting up Agda. -- -- True: force a setup e.g. when passing Agda option -- --setup. -- -- Copies the embedded data files to the designated data directory. setup :: Bool -> IO () -- | Setup up the emacs mode for Agda. module Agda.Setup.EmacsMode -- | Help topic for --emacs-mode. help :: String locateFlag :: String -- | Prints out the path to the Agda mode's main file (using UTF-8 and -- without any trailing newline). printEmacsModeFile :: IO () setupFlag :: String -- | Tries to set up the Agda mode in the given .emacs file. setupDotEmacs :: String -> IO () compileFlag :: String -- | Tries to compile the Agda mode's Emacs Lisp files. compileElispFiles :: IO () inform :: String -> IO () module Agda.Interaction.Options.Help -- | Interface to the help function data Help -- | General usage information GeneralHelp :: Help -- | Specialised usage information about TOPIC HelpFor :: HelpTopic -> Help -- | Usage information generation helpTopicUsage :: HelpTopic -> String -- | Conversion functions to strings string2HelpTopic :: String -> Maybe HelpTopic allHelpTopics :: [(String, HelpTopic)] instance GHC.Classes.Eq Agda.Interaction.Options.Help.Help instance GHC.Classes.Eq Agda.Interaction.Options.Help.HelpTopic instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Help.Help instance GHC.Internal.Generics.Generic Agda.Interaction.Options.Help.HelpTopic instance Control.DeepSeq.NFData Agda.Interaction.Options.Help.Help instance Control.DeepSeq.NFData Agda.Interaction.Options.Help.HelpTopic instance GHC.Internal.Show.Show Agda.Interaction.Options.Help.Help instance GHC.Internal.Show.Show Agda.Interaction.Options.Help.HelpTopic -- | Library management. -- -- Sample use: -- --
-- -- Get libraries as listed in .agda/libraries file. -- libs <- getInstalledLibraries Nothing -- -- -- Get the libraries (and immediate paths) relevant for projectRoot. -- -- This involves locating and processing the .agda-lib file for the project. -- (libNames, includePaths) <- getDefaultLibraries projectRoot True -- -- -- Get include paths of depended-on libraries. -- resolvedPaths <- libraryIncludePaths Nothing libs libNames -- -- let allPaths = includePaths ++ resolvedPaths -- --module Agda.Interaction.Library -- | Get project root findProjectRoot :: FilePath -> LibM (Maybe FilePath) -- | Get dependencies and include paths for given project root: -- -- Look for .agda-lib files according to -- findAgdaLibFiles. If none are found, use default dependencies -- (according to defaults file) and current directory (project -- root). getDefaultLibraries :: FilePath -> Bool -> LibM ([LibName], [FilePath]) -- | Parse the descriptions of the libraries Agda knows about. -- -- Returns none if there is no libraries file. getInstalledLibraries :: Maybe FilePath -> LibM [AgdaLibFile] -- | Return the trusted executables Agda knows about. -- -- Returns none if there is no executables file. getTrustedExecutables :: LibM (Map ExeName FilePath) -- | Get all include pathes for a list of libraries to use. libraryIncludePaths :: Maybe FilePath -> [AgdaLibFile] -> [LibName] -> LibM [FilePath] -- | Get the content of the .agda-lib file in the given project -- root. getAgdaLibFile :: FilePath -> LibM [AgdaLibFile] -- | Returns the absolute default lib dir. This directory is used to store -- the Primitive.agda file. getPrimitiveLibDir :: IO AbsolutePath -- | Determine whether the second absolute path refers to one of Agda's -- primitive modules. The first argument should be the result of -- getPrimitiveLibDir. classifyBuiltinModule_ :: AbsolutePath -> AbsolutePath -> Maybe IsBuiltinModule -- | All builtin modules. builtinModules :: Set FilePath -- | These builtins may use postulates, and are still considered -- --safe. builtinModulesWithSafePostulates :: Set FilePath -- | These builtins may not use postulates under --safe. They are -- not automatically unsafe, but will be if they use an unsafe feature. builtinModulesWithUnsafePostulates :: Set FilePath -- | The very magical, auto-imported modules. primitiveModules :: Set FilePath -- | A symbolic library name. -- -- Library names are structured into the base name and a suffix of -- version numbers, e.g. mylib-1.2.3. The version suffix is -- optional. data LibName -- | Split a library name into basename and a list of version numbers. -- --
-- parseLibName "foo-1.2.3" == LibName "foo" [1, 2, 3] -- parseLibName "foo-01.002.3" == LibName "foo" [1, 2, 3] ---- -- Note that because of leading zeros, parseLibName is not -- injective. (prettyShow . parseLibName would produce a normal -- form.) parseLibName :: String -> LibName -- | The options from an OPTIONS pragma (or a .agda-lib -- file). -- -- In the future it might be nice to switch to a more structured -- representation. Note that, currently, there is not a one-to-one -- correspondence between list elements and options. data OptionsPragma OptionsPragma :: [String] -> Range -> OptionsPragma -- | The options. [pragmaStrings] :: OptionsPragma -> [String] -- | The range of the options in the pragma (not including things like an -- OPTIONS keyword). [pragmaRange] :: OptionsPragma -> Range -- | Content of a .agda-lib file. data AgdaLibFile AgdaLibFile :: LibName -> FilePath -> !Int -> [FilePath] -> [LibName] -> OptionsPragma -> AgdaLibFile -- | The symbolic name of the library. [_libName] :: AgdaLibFile -> LibName -- | Path to this .agda-lib file (not content of the file). [_libFile] :: AgdaLibFile -> FilePath -- | How many directories above the Agda file is the .agda-lib -- file located? [_libAbove] :: AgdaLibFile -> !Int -- | Roots where to look for the modules of the library. [_libIncludes] :: AgdaLibFile -> [FilePath] -- | Dependencies. [_libDepends] :: AgdaLibFile -> [LibName] -- | Default pragma options for all files in the library. [_libPragmas] :: AgdaLibFile -> OptionsPragma -- | A symbolic executable name. type ExeName = Text -- | Throws LibErrors exceptions, still collects LibWarnings. type LibM = ExceptT LibErrors WriterT [LibWarning] StateT LibState IO -- | Raise collected LibErrors as exception. mkLibM :: [AgdaLibFile] -> LibErrorIO a -> LibM a data LibWarning LibWarning :: Maybe LibPositionInfo -> LibWarning' -> LibWarning -- | Information about which .agda-lib file we are reading and -- from where in the libraries file it came from. data LibPositionInfo LibPositionInfo :: Maybe FilePath -> LineNumber -> FilePath -> LibPositionInfo -- | Name of libraries file. [libFilePos] :: LibPositionInfo -> Maybe FilePath -- | Line number in libraries file. [lineNumPos] :: LibPositionInfo -> LineNumber -- | Library file. [filePos] :: LibPositionInfo -> FilePath libraryWarningName :: LibWarning -> WarningName -- | A file can either belong to a project located at a given root -- containing an .agda-lib file, or be part of the default project. data ProjectConfig ProjectConfig :: FilePath -> FilePath -> !Int -> ProjectConfig -- | Directory which contains the .agda-lib file for the current -- project. [configRoot] :: ProjectConfig -> FilePath -- | .agda-lib file relative to configRoot (filename only, -- no directory). [configAgdaLibFile] :: ProjectConfig -> FilePath -- | How many directories above the Agda file is the .agda-lib -- file located? [configAbove] :: ProjectConfig -> !Int DefaultProjectConfig :: ProjectConfig -- | Generalized version of findLib for testing. -- --
-- findLib' id "a" [ "a-1", "a-02", "a-2", "b" ] == [ "a-02", "a-2" ] ---- --
-- findLib' id "a" [ "a", "a-1", "a-01", "a-2", "b" ] == [ "a" ] -- findLib' id "a-1" [ "a", "a-1", "a-01", "a-2", "b" ] == [ "a-1", "a-01" ] -- findLib' id "a-2" [ "a", "a-1", "a-01", "a-2", "b" ] == [ "a-2" ] -- findLib' id "c" [ "a", "a-1", "a-01", "a-2", "b" ] == [] --findLib' :: (a -> LibName) -> LibName -> [a] -> [a] module Agda.Syntax.Common.Pretty.ANSI -- | Render an annotated, pretty-printing Document into a string -- suitable for printing on VT100-compatible terminals. renderAnsiIO :: Doc -> IO () putDoc :: (MonadIO m, HasOptions m) => Doc -> m () module Agda.Interaction.Options -- | Checks that the given options are consistent. Also makes adjustments -- (e.g. when one option implies another). checkOpts :: MonadError OptionError m => CommandLineOptions -> m CommandLineOptions -- | Command line options of previous versions of Agda. Should not be -- listed in the usage info, put parsed by GetOpt for good error -- messaging. deadStandardOptions :: [OptDescr (Flag CommandLineOptions)] defaultInteractionOptions :: PragmaOptions defaultOptions :: CommandLineOptions defaultPragmaOptions :: PragmaOptions -- | Simple interface for System.Console.GetOpt Could be moved to -- Agda.Utils.Options (does not exist yet) getOptSimple :: [String] -> [OptDescr (Flag opts)] -> (String -> Flag opts) -> Flag opts impliedPragmaOptions :: [ImpliedPragmaOption] -- | Infective and coinfective options. -- -- Note that --cubical and --erased-cubical are -- "jointly infective": if one of them is used in one module, then one or -- the other must be used in all modules that depend on this module. infectiveCoinfectiveOptions :: [InfectiveCoinfectiveOption] inputFlag :: FilePath -> Flag CommandLineOptions lensOptAllowExec :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptAllowIncompleteMatch :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptAllowUnsolved :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptAutoInline :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptBacktrackingInstances :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptCaching :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptCallByName :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptCohesion :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptCompileMain :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptConfluenceCheck :: Functor f => (Maybe ConfluenceCheck -> f (Maybe ConfluenceCheck)) -> PragmaOptions -> f PragmaOptions lensOptCopatterns :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptCountClusters :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptCubical :: Functor f => (Maybe Cubical -> f (Maybe Cubical)) -> PragmaOptions -> f PragmaOptions lensOptCubicalCompatible :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptCumulativity :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptDoubleCheck :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptEraseRecordParameters :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptErasedMatches :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptErasure :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptEta :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptExactSplit :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptExperimentalIrrelevance :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptFastReduce :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptFirstOrder :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptFlatSplit :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptForcing :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptGuarded :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptGuardedness :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptHiddenArgumentPuns :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptImportSorts :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptInferAbsurdClauses :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptInjectiveTypeConstructors :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptInstanceSearchDepth :: Functor f => (Int -> f Int) -> PragmaOptions -> f PragmaOptions lensOptInversionMaxDepth :: Functor f => (Int -> f Int) -> PragmaOptions -> f PragmaOptions lensOptIrrelevantProjections :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptKeepCoveringClauses :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptKeepPatternVariables :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptLevelUniverse :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptLoadPrimitives :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptNoUniverseCheck :: Functor f => (WithDefault' Bool 'True -> f (WithDefault' Bool 'True)) -> PragmaOptions -> f PragmaOptions lensOptOmegaInOmega :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptPatternMatching :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptPolarity :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptPositivityCheck :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptPostfixProjections :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptPrintPatternSynonyms :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptProfiling :: Functor f => (ProfileOptions -> f ProfileOptions) -> PragmaOptions -> f PragmaOptions lensOptProjectionLike :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptProp :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptQualifiedInstances :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptRequireUniqueMetaSolutions :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptRewriting :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptSafe :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptSaveMetas :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptShowIdentitySubstitutions :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptShowImplicit :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptShowIrrelevant :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptSizedTypes :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptSyntacticEquality :: Functor f => (Maybe Int -> f (Maybe Int)) -> PragmaOptions -> f PragmaOptions lensOptTerminationCheck :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptTerminationDepth :: Functor f => (CutOff -> f CutOff) -> PragmaOptions -> f PragmaOptions lensOptTwoLevel :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions lensOptUniverseCheck :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptUniversePolymorphism :: Functor f => (WithDefault 'True -> f (WithDefault 'True)) -> PragmaOptions -> f PragmaOptions lensOptUseUnicode :: Functor f => (WithDefault' UnicodeOrAscii 'True -> f (WithDefault' UnicodeOrAscii 'True)) -> PragmaOptions -> f PragmaOptions lensOptVerbose :: Functor f => (Verbosity -> f Verbosity) -> PragmaOptions -> f PragmaOptions lensOptWarningMode :: Functor f => (WarningMode -> f WarningMode) -> PragmaOptions -> f PragmaOptions lensOptWithoutK :: Functor f => (WithDefault 'False -> f (WithDefault 'False)) -> PragmaOptions -> f PragmaOptions -- | Map a function over the long options. Also removes the short options. -- Will be used to add the plugin name to the plugin options. mapFlag :: (String -> String) -> OptDescr a -> OptDescr a optAllowExec :: PragmaOptions -> Bool optAllowIncompleteMatch :: PragmaOptions -> Bool optAllowUnsolved :: PragmaOptions -> Bool optAutoInline :: PragmaOptions -> Bool optBacktrackingInstances :: PragmaOptions -> Bool optCaching :: PragmaOptions -> Bool optCallByName :: PragmaOptions -> Bool -- | optCohesion is implied by optFlatSplit. optCohesion :: PragmaOptions -> Bool optCompileNoMain :: PragmaOptions -> Bool optConfluenceCheck :: PragmaOptions -> Maybe ConfluenceCheck optCopatterns :: PragmaOptions -> Bool optCountClusters :: PragmaOptions -> Bool optCubical :: PragmaOptions -> Maybe Cubical optCubicalCompatible :: PragmaOptions -> Bool optCumulativity :: PragmaOptions -> Bool optDoubleCheck :: PragmaOptions -> Bool optEraseRecordParameters :: PragmaOptions -> Bool optErasedMatches :: PragmaOptions -> Bool -- | optErasure is implied by optEraseRecordParameters. -- optErasure is also implied by an explicitly given -- `--erased-matches`. optErasure :: PragmaOptions -> Bool optEta :: PragmaOptions -> Bool optExperimentalIrrelevance :: PragmaOptions -> Bool optFastReduce :: PragmaOptions -> Bool optFirstOrder :: PragmaOptions -> Bool optFlatSplit :: PragmaOptions -> Bool optForcedArgumentRecursion :: PragmaOptions -> Bool optForcing :: PragmaOptions -> Bool optGuarded :: PragmaOptions -> Bool optGuardedness :: PragmaOptions -> Bool optHiddenArgumentPuns :: PragmaOptions -> Bool -- | optImportSorts requires optLoadPrimitives. optImportSorts :: PragmaOptions -> Bool optInferAbsurdClauses :: PragmaOptions -> Bool optInjectiveTypeConstructors :: PragmaOptions -> Bool optInstanceSearchDepth :: PragmaOptions -> Int optInversionMaxDepth :: PragmaOptions -> Int optIrrelevantProjections :: PragmaOptions -> Bool optKeepCoveringClauses :: PragmaOptions -> Bool optKeepPatternVariables :: PragmaOptions -> Bool optLargeIndices :: PragmaOptions -> Bool optLevelUniverse :: PragmaOptions -> Bool optLoadPrimitives :: PragmaOptions -> Bool optOmegaInOmega :: PragmaOptions -> Bool optPatternMatching :: PragmaOptions -> Bool optPolarity :: PragmaOptions -> Bool optPositivityCheck :: PragmaOptions -> Bool optPostfixProjections :: PragmaOptions -> Bool optPrintPatternSynonyms :: PragmaOptions -> Bool optProfiling :: PragmaOptions -> ProfileOptions optProjectionLike :: PragmaOptions -> Bool optProp :: PragmaOptions -> Bool optQualifiedInstances :: PragmaOptions -> Bool optRequireUniqueMetaSolutions :: PragmaOptions -> Bool optRewriting :: PragmaOptions -> Bool optSafe :: PragmaOptions -> Bool optSaveMetas :: PragmaOptions -> Bool optShowGeneralized :: PragmaOptions -> Bool optShowIdentitySubstitutions :: PragmaOptions -> Bool optShowImplicit :: PragmaOptions -> Bool optShowIrrelevant :: PragmaOptions -> Bool optSizedTypes :: PragmaOptions -> Bool optSyntacticEquality :: PragmaOptions -> Maybe Int optTerminationCheck :: PragmaOptions -> Bool optTerminationDepth :: PragmaOptions -> CutOff optTwoLevel :: PragmaOptions -> Bool optUniverseCheck :: PragmaOptions -> Bool optUniversePolymorphism :: PragmaOptions -> Bool optUseUnicode :: PragmaOptions -> UnicodeOrAscii optVerbose :: PragmaOptions -> Verbosity optWarningMode :: PragmaOptions -> WarningMode optWithoutK :: PragmaOptions -> Bool optionWarningName :: OptionWarning -> WarningName -- | Parse options for a plugin. parsePluginOptions :: [String] -> [OptDescr (Flag opts)] -> Flag opts -- | Parse options from an options pragma. parsePragmaOptions :: OptionsPragma -> CommandLineOptions -> OptM PragmaOptions parseVerboseKey :: VerboseKey -> [VerboseKeyItem] -- | This function returns True if the file should be rechecked. recheckBecausePragmaOptionsChanged :: PragmaOptions -> PragmaOptions -> Bool runOptM :: OptM opts -> (Either OptionError opts, OptionWarnings) safeFlag :: Flag PragmaOptions standardOptions :: [OptDescr (Flag CommandLineOptions)] -- | Used for printing usage info. Does not include the dead options. standardOptions_ :: [OptDescr ()] -- | Removes RTS options from a list of options. stripRTS :: [String] -> [String] -- | Check for unsafe pragmas. Gives a list of used unsafe flags. unsafePragmaOptions :: PragmaOptions -> [String] -- | The usage info message. The argument is the program name (probably -- agda). usage :: [OptDescr ()] -> String -> Help -> String -- | The default termination depth. defaultCutOff :: CutOff -- | f :: Flag opts is an action on the option record that results -- from parsing an option. f opts produces either an error -- message or an updated options record type Flag opts = opts -> OptM opts data ImpliedPragmaOption [ImpliesPragmaOption] :: forall (a :: Bool) (b :: Bool). String -> Bool -> (PragmaOptions -> WithDefault a) -> String -> Bool -> (PragmaOptions -> WithDefault b) -> ImpliedPragmaOption -- | Descriptions of infective and coinfective options. data InfectiveCoinfectiveOption ICOption :: (PragmaOptions -> Bool) -> String -> InfectiveCoinfective -> (PragmaOptions -> PragmaOptions -> Bool) -> (TopLevelModuleName -> Doc) -> InfectiveCoinfectiveOption -- | Is the option active? [icOptionActive] :: InfectiveCoinfectiveOption -> PragmaOptions -> Bool -- | A description of the option (typically a flag that activates the -- option). [icOptionDescription] :: InfectiveCoinfectiveOption -> String -- | Is the option (roughly speaking) infective or coinfective? [icOptionKind] :: InfectiveCoinfectiveOption -> InfectiveCoinfective -- | This function returns True exactly when, from the perspective -- of the option in question, the options in the current module (the -- first argument) are compatible with the options in a given imported -- module (the second argument). [icOptionOK] :: InfectiveCoinfectiveOption -> PragmaOptions -> PragmaOptions -> Bool -- | A warning message that should be used if this option is not used -- correctly. The given module name is the name of an imported module for -- which icOptionOK failed. [icOptionWarning] :: InfectiveCoinfectiveOption -> TopLevelModuleName -> Doc -- | The options parse monad OptM collects warnings that are not -- discarded when a fatal error occurrs data OptM a type OptionError = String -- | Warnings when parsing options. data OptionWarning -- | Name of option changed in a newer version of Agda. OptionRenamed :: String -> String -> OptionWarning [oldOptionName] :: OptionWarning -> String [newOptionName] :: OptionWarning -> String -- | A problem with setting or unsetting a warning. WarningProblem :: WarningModeError -> OptionWarning data CommandLineOptions Options :: String -> Maybe FilePath -> [FilePath] -> [AbsolutePath] -> [LibName] -> Maybe FilePath -> Bool -> Bool -> Integer -> Map ExeName FilePath -> Bool -> Bool -> Maybe PrintAgdaVersion -> Maybe Help -> Bool -> Bool -> Set EmacsModeCommand -> Bool -> Bool -> Bool -> !Bool -> Maybe FilePath -> Bool -> Bool -> Bool -> PragmaOptions -> Bool -> Bool -> DiagnosticsColours -> CommandLineOptions [optProgramName] :: CommandLineOptions -> String [optInputFile] :: CommandLineOptions -> Maybe FilePath [optIncludePaths] :: CommandLineOptions -> [FilePath] -- | The list should not contain duplicates. [optAbsoluteIncludePaths] :: CommandLineOptions -> [AbsolutePath] [optLibraries] :: CommandLineOptions -> [LibName] -- | Use this (if Just) instead of ~/.agda/libraries. [optOverrideLibrariesFile] :: CommandLineOptions -> Maybe FilePath -- | Use ~/.agda/defaults. [optDefaultLibs] :: CommandLineOptions -> Bool -- | look for .agda-lib files. [optUseLibs] :: CommandLineOptions -> Bool -- | Configure notifications about imported modules. [optTraceImports] :: CommandLineOptions -> Integer -- | Map names of trusted executables to absolute paths. [optTrustedExecutables] :: CommandLineOptions -> Map ExeName FilePath [optPrintAgdaDataDir] :: CommandLineOptions -> Bool [optPrintAgdaAppDir] :: CommandLineOptions -> Bool [optPrintVersion] :: CommandLineOptions -> Maybe PrintAgdaVersion [optPrintHelp] :: CommandLineOptions -> Maybe Help -- | --build-library: Build all modules in the current library. [optBuildLibrary] :: CommandLineOptions -> Bool -- | Force Agda to self-setup at startup. [optSetup] :: CommandLineOptions -> Bool -- | Emacs mode administration (formerly done by the agda-mode -- executable). Accepted subcommands: locate, setup, -- compile. Can be given several times, subcommands are -- accumulated in the set. [optEmacsMode] :: CommandLineOptions -> Set EmacsModeCommand -- | Agda REPL (-I). [optInteractive] :: CommandLineOptions -> Bool -- | --interaction mode. [optGHCiInteraction] :: CommandLineOptions -> Bool -- | --interaction-json mode. [optJSONInteraction] :: CommandLineOptions -> Bool -- | Exit if an interactive command fails. [optExitOnError] :: CommandLineOptions -> !Bool -- | In the absence of a path the project root is used. [optCompileDir] :: CommandLineOptions -> Maybe FilePath [optGenerateVimFile] :: CommandLineOptions -> Bool [optIgnoreInterfaces] :: CommandLineOptions -> Bool [optIgnoreAllInterfaces] :: CommandLineOptions -> Bool [optPragmaOptions] :: CommandLineOptions -> PragmaOptions -- | Should the top-level module only be scope-checked, and not -- type-checked? [optOnlyScopeChecking] :: CommandLineOptions -> Bool -- | Should code points that are not supported by the locale be -- transliterated? [optTransliterate] :: CommandLineOptions -> Bool -- | Configure colour output. [optDiagnosticsColour] :: CommandLineOptions -> DiagnosticsColours data ConfluenceCheck LocalConfluenceCheck :: ConfluenceCheck GlobalConfluenceCheck :: ConfluenceCheck data DiagnosticsColours AlwaysColour :: DiagnosticsColours NeverColour :: DiagnosticsColours AutoColour :: DiagnosticsColours -- | If several --emacs-mode commands are given, they are executed -- in the order as given in this datatype. data EmacsModeCommand -- | Compile the .el files to .elc. EmacsModeCompile :: EmacsModeCommand -- | Add the initialization lines to .emacs. EmacsModeSetup :: EmacsModeCommand -- | Print the installation location of agda2.el. EmacsModeLocate :: EmacsModeCommand -- | Infective or coinfective? data InfectiveCoinfective Infective :: InfectiveCoinfective Coinfective :: InfectiveCoinfective -- | Options which can be set in a pragma. data PragmaOptions PragmaOptions :: WithDefault 'False -> WithDefault 'True -> WithDefault 'False -> WithDefault' UnicodeOrAscii 'True -> !Verbosity -> ProfileOptions -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'True -> CutOff -> WithDefault 'True -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'True -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'True -> WithDefault 'True -> WithDefault 'False -> WithDefault 'True -> WithDefault 'False -> WithDefault 'False -> Maybe Cubical -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'True -> WithDefault 'True -> WithDefault 'True -> Int -> WithDefault 'False -> WithDefault 'True -> Int -> WithDefault 'False -> WithDefault 'False -> !Maybe Int -> WarningMode -> WithDefault 'True -> WithDefault 'True -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'True -> WithDefault 'False -> Maybe ConfluenceCheck -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> WithDefault 'True -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'False -> WithDefault 'True -> PragmaOptions [_optShowImplicit] :: PragmaOptions -> WithDefault 'False -- | Show generalized parameters in Pi types [_optShowGeneralized] :: PragmaOptions -> WithDefault 'True [_optShowIrrelevant] :: PragmaOptions -> WithDefault 'False [_optUseUnicode] :: PragmaOptions -> WithDefault' UnicodeOrAscii 'True [_optVerbose] :: PragmaOptions -> !Verbosity [_optProfiling] :: PragmaOptions -> ProfileOptions [_optProp] :: PragmaOptions -> WithDefault 'False [_optLevelUniverse] :: PragmaOptions -> WithDefault 'False [_optTwoLevel] :: PragmaOptions -> WithDefault 'False [_optAllowUnsolved] :: PragmaOptions -> WithDefault 'False [_optAllowIncompleteMatch] :: PragmaOptions -> WithDefault 'False [_optPositivityCheck] :: PragmaOptions -> WithDefault 'True [_optTerminationCheck] :: PragmaOptions -> WithDefault 'True -- | Cut off structural order comparison at some depth in termination -- checker? [_optTerminationDepth] :: PragmaOptions -> CutOff [_optUniverseCheck] :: PragmaOptions -> WithDefault 'True [_optOmegaInOmega] :: PragmaOptions -> WithDefault 'False [_optCumulativity] :: PragmaOptions -> WithDefault 'False [_optSizedTypes] :: PragmaOptions -> WithDefault 'False [_optGuardedness] :: PragmaOptions -> WithDefault 'False [_optInjectiveTypeConstructors] :: PragmaOptions -> WithDefault 'False [_optUniversePolymorphism] :: PragmaOptions -> WithDefault 'True [_optIrrelevantProjections] :: PragmaOptions -> WithDefault 'False -- | irrelevant levels, irrelevant data matching [_optExperimentalIrrelevance] :: PragmaOptions -> WithDefault 'False [_optWithoutK] :: PragmaOptions -> WithDefault 'False [_optCubicalCompatible] :: PragmaOptions -> WithDefault 'False -- | Allow definitions by copattern matching? [_optCopatterns] :: PragmaOptions -> WithDefault 'True -- | Is pattern matching allowed in the current file? [_optPatternMatching] :: PragmaOptions -> WithDefault 'True [_optExactSplit] :: PragmaOptions -> WithDefault 'False -- | Should patterns of the form {x} or ⦃ x ⦄ be -- interpreted as puns? [_optHiddenArgumentPuns] :: PragmaOptions -> WithDefault 'False [_optEta] :: PragmaOptions -> WithDefault 'True -- | Perform the forcing analysis on data constructors? [_optForcing] :: PragmaOptions -> WithDefault 'True -- | Perform the projection-likeness analysis on functions? [_optProjectionLike] :: PragmaOptions -> WithDefault 'True [_optErasure] :: PragmaOptions -> WithDefault 'False -- | Allow matching in erased positions for single-constructor, non-indexed -- data/record types. (This kind of matching is always allowed for record -- types with η-equality.) [_optErasedMatches] :: PragmaOptions -> WithDefault 'True -- | Mark parameters of record modules as erased? [_optEraseRecordParameters] :: PragmaOptions -> WithDefault 'False -- | Can rewrite rules be added and used? [_optRewriting] :: PragmaOptions -> WithDefault 'False [_optCubical] :: PragmaOptions -> Maybe Cubical [_optGuarded] :: PragmaOptions -> WithDefault 'False -- | Should we speculatively unify function applications as if they were -- injective? Implies optRequireUniqueMetaSolutions. [_optFirstOrder] :: PragmaOptions -> WithDefault 'False -- | Forbid non-unique meta solutions allowed. For instance from -- INJECTIVE_FOR_INFERENCE pragmas. [_optRequireUniqueMetaSolutions] :: PragmaOptions -> WithDefault 'True -- | Should system generated projections ProjSystem be printed -- postfix (True) or prefix (False). [_optPostfixProjections] :: PragmaOptions -> WithDefault 'True -- | Should case splitting replace variables with dot patterns (False) or -- keep them as variables (True). [_optKeepPatternVariables] :: PragmaOptions -> WithDefault 'True -- | Should case splitting and coverage checking try to discharge absurd -- clauses? Default: True, but False might make coverage -- checking considerably faster in some cases. [_optInferAbsurdClauses] :: PragmaOptions -> WithDefault 'True [_optInstanceSearchDepth] :: PragmaOptions -> Int [_optBacktrackingInstances] :: PragmaOptions -> WithDefault 'False -- | Should instance search consider instances with qualified names? [_optQualifiedInstances] :: PragmaOptions -> WithDefault 'True [_optInversionMaxDepth] :: PragmaOptions -> Int [_optSafe] :: PragmaOptions -> WithDefault 'False [_optDoubleCheck] :: PragmaOptions -> WithDefault 'False -- | Should the conversion checker use the syntactic equality shortcut? -- Nothing means that it should. Just n, for a -- non-negative number n, means that syntactic equality checking -- gets n units of fuel. If the fuel becomes zero, then -- syntactic equality checking is turned off. The fuel counter is -- decreased in the failure continuation of -- checkSyntacticEquality. [_optSyntacticEquality] :: PragmaOptions -> !Maybe Int [_optWarningMode] :: PragmaOptions -> WarningMode -- | Treat the module given at the command line or via interaction as main -- module in compilation? [_optCompileMain] :: PragmaOptions -> WithDefault 'True [_optCaching] :: PragmaOptions -> WithDefault 'True -- | Count extended grapheme clusters rather than code points when -- generating LaTeX. [_optCountClusters] :: PragmaOptions -> WithDefault 'False -- | Automatic compile-time inlining for simple definitions (unless marked -- NOINLINE). [_optAutoInline] :: PragmaOptions -> WithDefault 'False [_optPrintPatternSynonyms] :: PragmaOptions -> WithDefault 'True -- | Use the Agda abstract machine (fastReduce)? [_optFastReduce] :: PragmaOptions -> WithDefault 'True -- | Use call-by-name instead of call-by-need. [_optCallByName] :: PragmaOptions -> WithDefault 'False -- | Check confluence of rewrite rules? [_optConfluenceCheck] :: PragmaOptions -> Maybe ConfluenceCheck -- | Are the cohesion modalities available? [_optCohesion] :: PragmaOptions -> WithDefault 'False -- | Can we split on a (@flat x : A) argument? [_optFlatSplit] :: PragmaOptions -> WithDefault 'False -- | Can we use modal polarities (++, +, etc.)? [_optPolarity] :: PragmaOptions -> WithDefault 'False -- | Should every top-level module start with an implicit statement -- open import Agda.Primitive using (Set; Prop)? [_optImportSorts] :: PragmaOptions -> WithDefault 'True -- | Should we load the primitive modules at all? This is a stronger form -- of optImportSorts. [_optLoadPrimitives] :: PragmaOptions -> WithDefault 'True -- | Allow running external executables from meta programs. [_optAllowExec] :: PragmaOptions -> WithDefault 'False -- | Save meta-variables to interface files. [_optSaveMetas] :: PragmaOptions -> WithDefault 'False -- | Show identity substitutions when pretty-printing terms (i.e. always -- show all arguments of a metavariable). [_optShowIdentitySubstitutions] :: PragmaOptions -> WithDefault 'False -- | Do not discard clauses constructed by the coverage checker (needed for -- some external backends). [_optKeepCoveringClauses] :: PragmaOptions -> WithDefault 'False -- | Allow large indices, and large forced arguments in constructors. [_optLargeIndices] :: PragmaOptions -> WithDefault 'False -- | Allow recursion on forced constructor arguments. [_optForcedArgumentRecursion] :: PragmaOptions -> WithDefault 'True -- | Options --version and --numeric-version (last wins). data PrintAgdaVersion -- | Print Agda version information. PrintAgdaVersion :: PrintAgdaVersion -- | Print Agda version number. PrintAgdaNumericVersion :: PrintAgdaVersion type VerboseKey = String type VerboseLevel = Int -- | Nothing is used if no verbosity options have been given, thus -- making it possible to handle the default case relatively quickly. Note -- that Nothing corresponds to a trie with verbosity level 1 for -- the empty path. type Verbosity = Maybe Trie VerboseKeyItem VerboseLevel -- | A WarningMode has two components: a set of warnings to be -- displayed and a flag stating whether warnings should be turned into -- fatal errors. data WarningMode WarningMode :: Set WarningName -> Bool -> WarningMode [_warningSet] :: WarningMode -> Set WarningName [_warn2Error] :: WarningMode -> Bool -- | We want to know whether we are allowed to insert unicode characters or -- not. data UnicodeOrAscii -- | true: Unicode characters are allowed. UnicodeOk :: UnicodeOrAscii -- | 'false: Stick to ASCII. AsciiOnly :: UnicodeOrAscii -- | Describes whether an option takes an argument or not, and if so how -- the argument is injected into a value of type a. data ArgDescr a -- | no argument expected NoArg :: a -> ArgDescr a -- | option requires argument ReqArg :: (String -> a) -> String -> ArgDescr a -- | optional argument OptArg :: (Maybe String -> a) -> String -> ArgDescr a -- | Each OptDescr describes a single option. -- -- The arguments to Option are: -- --
-- postulate --PostulateBlock :: KindOfBlock -- | primitive. Ensured by parser. PrimitiveBlock :: KindOfBlock -- | instance. Actually, here all kinds of sub-declarations are -- allowed a priori. InstanceBlock :: KindOfBlock -- | field. Ensured by parser. FieldBlock :: KindOfBlock -- | data ... where. Here we got a bad error message for Agda-2.5 -- (Issue 1698). DataBlock :: KindOfBlock -- | constructor, in interleaved mutual. ConstructorBlock :: KindOfBlock declName :: NiceDeclaration -> String data InMutual -- | we are nicifying a mutual block InMutual :: InMutual -- | we are nicifying decls not in a mutual block NotInMutual :: InMutual -- | The kind of the forward declaration. data DataRecOrFun -- | Name of a data type DataName :: PositivityCheck -> UniverseCheck -> DataRecOrFun [_kindPosCheck] :: DataRecOrFun -> PositivityCheck [_kindUniCheck] :: DataRecOrFun -> UniverseCheck -- | Name of a record type RecName :: PositivityCheck -> UniverseCheck -> DataRecOrFun [_kindPosCheck] :: DataRecOrFun -> PositivityCheck [_kindUniCheck] :: DataRecOrFun -> UniverseCheck -- | Name of a function. FunName :: TerminationCheck -> CoverageCheck -> DataRecOrFun isFunName :: DataRecOrFun -> Bool sameKind :: DataRecOrFun -> DataRecOrFun -> Bool terminationCheck :: DataRecOrFun -> TerminationCheck coverageCheck :: DataRecOrFun -> CoverageCheck positivityCheck :: DataRecOrFun -> PositivityCheck mutualChecks :: DataRecOrFun -> MutualChecks universeCheck :: DataRecOrFun -> UniverseCheck instance GHC.Classes.Eq Agda.Syntax.Concrete.Definitions.Types.DataRecOrFun instance GHC.Classes.Eq Agda.Syntax.Concrete.Definitions.Types.InMutual instance GHC.Classes.Eq Agda.Syntax.Concrete.Definitions.Types.KindOfBlock instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Types.Clause instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Types.DataRecOrFun instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Types.KindOfBlock instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Types.NiceDeclaration instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Definitions.Types.NiceDeclaration instance GHC.Internal.Base.Monoid Agda.Syntax.Concrete.Definitions.Types.MutualChecks instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Types.Clause instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Types.DataRecOrFun instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Types.KindOfBlock instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Types.NiceDeclaration instance GHC.Classes.Ord Agda.Syntax.Concrete.Definitions.Types.KindOfBlock instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Definitions.Types.DataRecOrFun instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Definitions.Types.NiceDeclaration instance GHC.Internal.Base.Semigroup Agda.Syntax.Concrete.Definitions.Types.MutualChecks instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Types.Clause instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Types.DataRecOrFun instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Types.InMutual instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Types.KindOfBlock instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Types.NiceDeclaration module Agda.Syntax.Concrete.Definitions.Errors -- | Exception with internal source code callstack data DeclarationException DeclarationException :: CallStack -> DeclarationException' -> DeclarationException [deLocation] :: DeclarationException -> CallStack [deException] :: DeclarationException -> DeclarationException' -- | The exception type. data DeclarationException' MultipleEllipses :: Pattern -> DeclarationException' DuplicateDefinition :: Name -> DeclarationException' DuplicateAnonDeclaration :: Range -> DeclarationException' MissingWithClauses :: Name -> LHS -> DeclarationException' WrongDefinition :: Name -> DataRecOrFun -> DataRecOrFun -> DeclarationException' WrongContentBlock :: KindOfBlock -> Range -> DeclarationException' -- | In a mutual block, a clause could belong to any of the ≥2 type -- signatures (Name). AmbiguousFunClauses :: LHS -> List1 Name -> DeclarationException' -- | In an interleaved mutual block, a constructor could belong to any of -- the data signatures (Name) AmbiguousConstructor :: Range -> Name -> [Name] -> DeclarationException' -- | In a mutual block, all or none need a MEASURE pragma. Range is -- the one of the offending pragma or the mutual block. InvalidMeasureMutual :: Range -> DeclarationException' UnquoteDefRequiresSignature :: List1 Name -> DeclarationException' BadMacroDef :: NiceDeclaration -> DeclarationException' -- | An unfolding declaration was not the first declaration contained in an -- opaque block. UnfoldingOutsideOpaque :: KwRange -> DeclarationException' -- | opaque block nested in a mutual block. This can -- never happen, even with reordering. The KwRange is the one of -- the opaque keyword. OpaqueInMutual :: KwRange -> DeclarationException' -- | A declaration that breaks an implicit mutual block (named by the -- String argument) was present while the given lone type signatures were -- still without their definitions. DisallowedInterleavedMutual :: KwRange -> String -> List1 Name -> DeclarationException' -- | The name of the error. declarationExceptionString :: DeclarationException' -> String data DeclarationWarning DeclarationWarning :: CallStack -> DeclarationWarning' -> DeclarationWarning [dwLocation] :: DeclarationWarning -> CallStack [dwWarning] :: DeclarationWarning -> DeclarationWarning' -- | Non-fatal errors encountered in the Nicifier. data DeclarationWarning' -- | Empty abstract block. EmptyAbstract :: KwRange -> DeclarationWarning' -- | Empty data _ where block. EmptyConstructor :: KwRange -> DeclarationWarning' -- | Empty field block. EmptyField :: KwRange -> DeclarationWarning' -- | Empty variable block. EmptyGeneralize :: KwRange -> DeclarationWarning' -- | Empty instance block EmptyInstance :: KwRange -> DeclarationWarning' -- | Empty macro block. EmptyMacro :: KwRange -> DeclarationWarning' -- | Empty mutual block. EmptyMutual :: KwRange -> DeclarationWarning' -- | Empty postulate block. EmptyPostulate :: KwRange -> DeclarationWarning' -- | Empty private block. EmptyPrivate :: KwRange -> DeclarationWarning' -- | Empty primitive block. EmptyPrimitive :: KwRange -> DeclarationWarning' -- | POLARITY pragma without any polarities. EmptyPolarityPragma :: Range -> DeclarationWarning' -- | A Hidden identifier in a variable declaration. Hiding -- has no effect there as generalized variables are always hidden (or -- instance variables). HiddenGeneralize :: Range -> DeclarationWarning' -- | A {-# CATCHALL #-} pragma that does not precede a function clause. InvalidCatchallPragma :: Range -> DeclarationWarning' -- | Invalid constructor block (not inside an interleaved mutual block) InvalidConstructorBlock :: Range -> DeclarationWarning' -- | A {-# NON_COVERING #-} pragma that does not apply to any function. InvalidCoverageCheckPragma :: Range -> DeclarationWarning' -- | A {-# NO_POSITIVITY_CHECK #-} pragma that does not apply to any data -- or record type. InvalidNoPositivityCheckPragma :: Range -> DeclarationWarning' -- | A {-# NO_UNIVERSE_CHECK #-} pragma that does not apply to a data or -- record type. InvalidNoUniverseCheckPragma :: Range -> DeclarationWarning' -- | A {-# TERMINATING #-} and {-# NON_TERMINATING #-} pragma that does not -- apply to any function. InvalidTerminationCheckPragma :: Range -> DeclarationWarning' -- | A data definition without a data signature. MissingDataDeclaration :: Name -> DeclarationWarning' -- | Declarations (e.g. type signatures) without a definition. MissingDefinitions :: List1 (Name, Range) -> DeclarationWarning' NotAllowedInMutual :: Range -> String -> DeclarationWarning' -- | private has no effect on open (import) public. (But -- the user might think so.) Range is the range of the open -- public or open import public declaration. The first -- KwRange is the range of the public keyword. The second -- KwRange is the range of the private keyword. OpenImportPrivate :: Range -> KwRange -> KwRange -> OpenOrImport -> DeclarationWarning' -- | abstract has no effect on open or import. -- (But the user might think so.) Range is the range of the -- open or import declaration. KwRange is the -- range of the abstract keyword. OpenImportAbstract :: Range -> KwRange -> OpenOrImport -> DeclarationWarning' PolarityPragmasButNotPostulates :: Set1 Name -> DeclarationWarning' -- | Pragma {-# NO_TERMINATION_CHECK #-} has been replaced by -- {-# TERMINATING #-} and {-# NON_TERMINATING #-}. PragmaNoTerminationCheck :: Range -> DeclarationWarning' -- | COMPILE pragmas are not allowed in safe mode. PragmaCompiled :: Range -> DeclarationWarning' -- | ETA pragma is unsafe. SafeFlagEta :: Range -> DeclarationWarning' -- | INJECTIVE pragma is unsafe. SafeFlagInjective :: Range -> DeclarationWarning' -- | NON_COVERING pragma is unsafe. SafeFlagNoCoverageCheck :: Range -> DeclarationWarning' -- | NO_POSITIVITY_CHECK pragma is unsafe. SafeFlagNoPositivityCheck :: Range -> DeclarationWarning' -- | NO_UNIVERSE_CHECK pragma is unsafe. SafeFlagNoUniverseCheck :: Range -> DeclarationWarning' -- | NON_TERMINATING pragma is unsafe. SafeFlagNonTerminating :: Range -> DeclarationWarning' -- | POLARITY pragma is unsafe. SafeFlagPolarity :: Range -> DeclarationWarning' -- | TERMINATING pragma is unsafe. SafeFlagTerminating :: Range -> DeclarationWarning' ShadowingInTelescope :: List1 (Name, List2 Range) -> DeclarationWarning' -- | Public mixfix identifiers without a fixity declaration. UnknownFixityInMixfixDecl :: Set1 Name -> DeclarationWarning' UnknownNamesInFixityDecl :: Set1 Name -> DeclarationWarning' UnknownNamesInPolarityPragmas :: Set1 Name -> DeclarationWarning' -- | abstract block with nothing that can (newly) be made -- abstract. UselessAbstract :: KwRange -> DeclarationWarning' -- | instance block with nothing that can (newly) become an -- instance. UselessInstance :: KwRange -> DeclarationWarning' -- | macro block with nothing that can (newly) be made macro. UselessMacro :: KwRange -> DeclarationWarning' -- | private block with nothing that can (newly) be made private. UselessPrivate :: KwRange -> DeclarationWarning' -- | open or import data OpenOrImport -- | open. OpenNotImport :: OpenOrImport -- | import or open import. ImportMayOpen :: OpenOrImport declarationWarningName :: DeclarationWarning -> WarningName declarationWarningName' :: DeclarationWarning' -> WarningName -- | Nicifier warnings turned into errors in --safe mode. unsafeDeclarationWarning :: DeclarationWarning -> Bool unsafeDeclarationWarning' :: DeclarationWarning' -> Bool -- | Pragmas not allowed in --safe mode produce an -- unsafeDeclarationWarning. unsafePragma :: CMaybe DeclarationWarning' m => Pragma -> m instance GHC.Internal.Enum.Bounded Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport instance GHC.Internal.Enum.Enum Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Errors.DeclarationException' instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning' instance GHC.Internal.Generics.Generic Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Definitions.Errors.DeclarationException instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Definitions.Errors.DeclarationException' instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning instance Agda.Syntax.Position.HasRange Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning' instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Errors.DeclarationException' instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning' instance Control.DeepSeq.NFData Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Definitions.Errors.DeclarationException' instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning' instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Errors.DeclarationException' instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning' instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport module Agda.Syntax.Concrete.Definitions.Monad -- | Nicifier monad. Preserve the state when throwing an exception. newtype Nice a Nice :: ReaderT NiceEnv (ExceptT DeclarationException (State NiceState)) a -> Nice a [unNice] :: Nice a -> ReaderT NiceEnv (ExceptT DeclarationException (State NiceState)) a -- | Run a Nicifier computation, return result and warnings (in -- chronological order). runNice :: NiceEnv -> Nice a -> (Either DeclarationException a, NiceWarnings) -- | Nicifier parameters. data NiceEnv NiceEnv :: Bool -> WhereClause_ -> NiceEnv -- | We are in a module declared --safe which is not a builtin -- module. [safeButNotBuiltin] :: NiceEnv -> Bool -- | Are we checking a where module? [checkingWhere] :: NiceEnv -> WhereClause_ -- | Nicifier state. data NiceState NiceState :: LoneSigs -> TerminationCheck -> PositivityCheck -> UniverseCheck -> Catchall -> CoverageCheck -> NiceWarnings -> NameId -> NiceState -- | Lone type signatures that wait for their definition. [_loneSigs] :: NiceState -> LoneSigs -- | Termination checking pragma waiting for a definition. [_termChk] :: NiceState -> TerminationCheck -- | Positivity checking pragma waiting for a definition. [_posChk] :: NiceState -> PositivityCheck -- | Universe checking pragma waiting for a data/rec signature or -- definition. [_uniChk] :: NiceState -> UniverseCheck -- | Catchall pragma waiting for a function clause. [_catchall] :: NiceState -> Catchall -- | Coverage pragma waiting for a definition. [_covChk] :: NiceState -> CoverageCheck -- | Stack of warnings. Head is last warning. [niceWarn] :: NiceState -> NiceWarnings -- | We distinguish different NoNames (anonymous definitions) by a -- unique NameId. [_nameId] :: NiceState -> NameId data LoneSig LoneSig :: Range -> Name -> DataRecOrFun -> LoneSig [loneSigRange] :: LoneSig -> Range -- | If isNoName, this name can have a different NameId than -- the key of LoneSigs pointing to it. [loneSigName] :: LoneSig -> Name [loneSigKind] :: LoneSig -> DataRecOrFun type LoneSigs = Map Name LoneSig type NiceWarnings = [DeclarationWarning] -- | Initial nicifier state. initNiceState :: NiceState lensNameId :: Lens' NiceState NameId nextNameId :: Nice NameId -- | Lens for field _loneSigs. loneSigs :: Lens' NiceState LoneSigs -- | Adding a lone signature to the state. Return the name (which is made -- unique if isNoName). addLoneSig :: Range -> Name -> DataRecOrFun -> Nice Name -- | Remove a lone signature from the state. removeLoneSig :: Name -> Nice () -- | Search for forward type signature. getSig :: Name -> Nice (Maybe DataRecOrFun) -- | Check that no lone signatures are left in the state. noLoneSigs :: Nice Bool forgetLoneSigs :: Nice () -- | Ensure that all forward declarations have been given a definition. checkLoneSigs :: LoneSigs -> Nice () -- | Ensure that all forward declarations have been given a definition, -- raising an error indicating *why* they would have had to have been -- defined. breakImplicitMutualBlock :: KwRange -> String -> Nice () -- | Get names of lone function signatures, plus their unique names. loneFuns :: LoneSigs -> [(Name, Name)] -- | Create a LoneSigs map from an association list. loneSigsFromLoneNames :: [(Range, Name, DataRecOrFun)] -> LoneSigs -- | Lens for field _termChk. terminationCheckPragma :: Lens' NiceState TerminationCheck withTerminationCheckPragma :: TerminationCheck -> Nice a -> Nice a coverageCheckPragma :: Lens' NiceState CoverageCheck withCoverageCheckPragma :: CoverageCheck -> Nice a -> Nice a -- | Lens for field _posChk. positivityCheckPragma :: Lens' NiceState PositivityCheck withPositivityCheckPragma :: PositivityCheck -> Nice a -> Nice a -- | Lens for field _uniChk. universeCheckPragma :: Lens' NiceState UniverseCheck withUniverseCheckPragma :: UniverseCheck -> Nice a -> Nice a -- | Get universe check pragma from a data/rec signature. Defaults to -- YesUniverseCheck. getUniverseCheckFromSig :: Name -> Nice UniverseCheck -- | Lens for field _catchall. catchallPragma :: Lens' NiceState Catchall -- | Get current catchall pragma, and reset it for the next clause. popCatchallPragma :: Nice Catchall withCatchallPragma :: Catchall -> Nice a -> Nice a -- | Add a new warning. niceWarning :: DeclarationWarning -> Nice () declarationException :: HasCallStack => DeclarationException' -> Nice a declarationWarning' :: DeclarationWarning' -> CallStack -> Nice () declarationWarning :: HasCallStack => DeclarationWarning' -> Nice () instance GHC.Internal.Base.Applicative Agda.Syntax.Concrete.Definitions.Monad.Nice instance GHC.Internal.Base.Functor Agda.Syntax.Concrete.Definitions.Monad.Nice instance Control.Monad.Error.Class.MonadError Agda.Syntax.Concrete.Definitions.Errors.DeclarationException Agda.Syntax.Concrete.Definitions.Monad.Nice instance GHC.Internal.Base.Monad Agda.Syntax.Concrete.Definitions.Monad.Nice instance Control.Monad.Reader.Class.MonadReader Agda.Syntax.Concrete.Definitions.Monad.NiceEnv Agda.Syntax.Concrete.Definitions.Monad.Nice instance Control.Monad.State.Class.MonadState Agda.Syntax.Concrete.Definitions.Monad.NiceState Agda.Syntax.Concrete.Definitions.Monad.Nice instance Agda.Utils.Null.Null a => Agda.Utils.Null.Null (Agda.Syntax.Concrete.Definitions.Monad.Nice a) instance GHC.Internal.Show.Show Agda.Syntax.Concrete.Definitions.Monad.LoneSig -- | Preprocess Declarations, producing NiceDeclarations. -- --
-- lexer k = lexToken >>= k --lexer :: (Token -> Parser a) -> Parser a -- | This is the initial state for parsing a regular, non-literate file. normal :: LexState code :: Int -- | The layout state. Entered when we see a layout keyword -- (withLayout) and exited at the next token -- (newLayoutBlock). layout :: LexState -- | We enter this state from newLayoutBlock when the token -- following a layout keyword is to the left of (or at the same column -- as) the current layout context. Example: -- --
-- data Empty : Set where -- foo : Empty -> Nat ---- -- Here the second line is not part of the where clause since it -- is has the same indentation as the data definition. What we -- have to do is insert an empty layout block {} after the -- where. The only thing that can happen in this state is that -- emptyLayout is executed, generating the closing brace. The open -- brace is generated when entering by newLayoutBlock. empty_layout :: LexState -- | This state is entered at the beginning of each line. You can't lex -- anything in this state, and to exit you have to check the layout rule. -- Done with offsideRule. bol :: LexState -- | This state can only be entered by the parser. In this state you can -- only lex the keywords using, hiding, -- renaming and to. Moreover they are only keywords in -- this particular state. The lexer will never enter this state by -- itself, that has to be done in the parser. imp_dir :: LexState data AlexReturn a AlexEOF :: AlexReturn a AlexError :: !AlexInput -> AlexReturn a AlexSkip :: !AlexInput -> !Int -> AlexReturn a AlexToken :: !AlexInput -> !Int -> a -> AlexReturn a -- | This is the main lexing function generated by Alex. alexScanUser :: ([LexState], ParseFlags) -> AlexInput -> Int -> AlexReturn (LexAction Token) -- | This module contains the building blocks used to construct the lexer. module Agda.Syntax.Parser.LexActions -- | Scan the input to find the next token. Calls alexScanUser. This -- is the main lexing function where all the work happens. The function -- lexer, used by the parser is the continuation version of this -- function. lexToken :: Parser Token -- | The most general way of parsing a token. token :: (String -> Parser tok) -> LexAction tok -- | Parse a token from an Interval and the lexed string. withInterval :: ((Interval, String) -> tok) -> LexAction tok -- | Like withInterval, but applies a function to the string. withInterval' :: (String -> a) -> ((Interval, a) -> tok) -> LexAction tok -- | Return a token without looking at the lexed string. withInterval_ :: (Interval -> r) -> LexAction r -- | Executed for layout keywords. Enters the layout state and -- performs the given action. withLayout :: Keyword -> LexAction r -> LexAction r -- | Prepend some parser manipulation to an action. andThen :: Parser () -> LexAction r -> LexAction r infixr 1 `andThen` -- | Throw away the current lexeme. skip :: LexAction Token -- | Enter a new state without consuming any input. begin :: LexState -> LexAction Token -- | Exit the current state without consuming any input. end :: LexAction Token -- | Enter a new state and perform the given action. beginWith :: LexState -> LexAction a -> LexAction a -- | Exit the current state and perform the given action. endWith :: LexAction a -> LexAction a -- | Enter a new state throwing away the current lexeme. begin_ :: LexState -> LexAction Token -- | Exit the current state throwing away the current lexeme. end_ :: LexAction Token -- | For lexical errors we want to report the current position as the site -- of the error, whereas for parse errors the previous position is the -- one we're interested in (since this will be the position of the token -- we just lexed). This function does parseErrorAt the current -- position. lexError :: String -> Parser a -- | Parse a Keyword token, triggers layout for -- layoutKeywords. keyword :: Keyword -> LexAction Token -- | Parse a Symbol token. symbol :: Symbol -> LexAction Token -- | Parse an identifier. Identifiers can be qualified (see Name). -- Example: Foo.Bar.f identifier :: LexAction Token literal :: Read a => (a -> Literal) -> LexAction Token -- | Parse a literal. literal' :: (String -> a) -> (a -> Literal) -> LexAction Token integer :: String -> Integer -- | True when the given character is the next character of the input -- string. followedBy :: Char -> LexPredicate -- | True if we are at the end of the file. eof :: LexPredicate -- | True if the given state appears somewhere on the state stack inState :: LexState -> LexPredicate -- | This module contains the lex actions that handle the layout rules. The -- way it works is that the Parser monad keeps track of a stack of -- LayoutContexts specifying the indentation of the layout blocks -- in scope. For instance, consider the following incomplete (Haskell) -- program: -- --
-- f x = x' -- where -- x' = do y <- foo x; bar ... ---- -- At the ... the layout context would be -- --
-- [Layout 12, Layout 4, Layout 0] ---- -- The closest layout block is the one following do which is -- started by token y at column 12. The second closest block is -- the where clause started by the x' token which has -- indentation 4. Finally, there is a top-level layout block with -- indentation 0. -- -- In April 2021 we changed layout handling in the lexer to allow -- stacking of layout keywords on the same line, e.g.: -- --
-- private module M where -- postulate A : Set -- private -- B : Set ---- -- The layout columns in the layout context (stack of layout blocks) can -- have LayoutStatus either Tentative or Confirmed. -- New layout columns following a layout keyword are tentative until we -- see a new line. E.g. -- --
-- LetBind info rel name type defn --LetBind :: LetInfo -> ArgInfo -> BindName -> Type -> Expr -> LetBinding -- | Function declarations in a let with no matching body. LetAxiom :: LetInfo -> ArgInfo -> BindName -> Type -> LetBinding -- | Irrefutable pattern binding. LetPatBind :: LetInfo -> Pattern -> Expr -> LetBinding -- | LetApply mi newM (oldM args) renamings dir. The -- ImportDirective is for highlighting purposes. LetApply :: ModuleInfo -> Erased -> ModuleName -> ModuleApplication -> ScopeCopyInfo -> ImportDirective -> LetBinding -- | only for highlighting and abstractToConcrete LetOpen :: ModuleInfo -> ModuleName -> ImportDirective -> LetBinding data ModuleApplication -- | tel. M args: applies M to args and -- abstracts tel. SectionApp :: Telescope -> ModuleName -> [NamedArg Expr] -> ModuleApplication -- |
-- M {{...}} --RecordModuleInstance :: ModuleName -> ModuleApplication type NAPs e = [NamedArg Pattern' e] type NAPs1 e = List1 NamedArg Pattern' e -- | Turn a name into an expression. class NameToExpr a nameToExpr :: NameToExpr a => a -> Expr type Pattern = Pattern' Expr -- | Parameterised over the type of dot patterns. data Pattern' e VarP :: BindName -> Pattern' e ConP :: ConPatInfo -> AmbiguousQName -> NAPs e -> Pattern' e -- | Destructor pattern d. ProjP :: PatInfo -> ProjOrigin -> AmbiguousQName -> Pattern' e -- | Defined pattern: function definition f ps. It is also abused -- to convert destructor patterns into concrete syntax thus, we put -- AmbiguousQName here as well. DefP :: PatInfo -> AmbiguousQName -> NAPs e -> Pattern' e -- | Underscore pattern entered by user. Or generated at type checking for -- implicit arguments. WildP :: PatInfo -> Pattern' e AsP :: PatInfo -> BindName -> Pattern' e -> Pattern' e -- | Dot pattern .e DotP :: PatInfo -> e -> Pattern' e AbsurdP :: PatInfo -> Pattern' e LitP :: PatInfo -> Literal -> Pattern' e PatternSynP :: PatInfo -> AmbiguousQName -> NAPs e -> Pattern' e RecP :: ConPatInfo -> [FieldAssignment' (Pattern' e)] -> Pattern' e EqualP :: PatInfo -> List1 (e, e) -> Pattern' e -- | | p, for with-patterns. WithP :: PatInfo -> Pattern' e -> Pattern' e type PatternSynDefn = ([WithHiding Name], Pattern' Void) type PatternSynDefns = Map QName PatternSynDefn type Patterns = [NamedArg Pattern] data Pragma OptionsPragma :: [String] -> Pragma -- | ResolvedName is not UnknownName. Name can be ambiguous -- e.g. for built-in constructors. BuiltinPragma :: RString -> ResolvedName -> Pragma -- | Builtins that do not come with a definition, but declare a name for an -- Agda concept. BuiltinNoDefPragma :: RString -> KindOfName -> QName -> Pragma -- | Range is range of REWRITE keyword. RewritePragma :: Range -> [QName] -> Pragma CompilePragma :: Ranged BackendName -> QName -> String -> Pragma StaticPragma :: QName -> Pragma -- | For coinductive records, use pragma instead of regular -- eta-equality definition (as it is might make Agda loop). EtaPragma :: QName -> Pragma InjectivePragma :: QName -> Pragma InjectiveForInferencePragma :: QName -> Pragma InlinePragma :: Bool -> QName -> Pragma -- | Mark the definition as not being projection-like NotProjectionLikePragma :: QName -> Pragma -- | If the definition is an instance, set its overlap mode. OverlapPragma :: QName -> OverlapMode -> Pragma DisplayPragma :: QName -> [NamedArg Pattern] -> Expr -> Pragma -- | A user pattern together with an internal term that it should be equal -- to after splitting is complete. Special cases: * User pattern is a -- variable but internal term isn't: this will be turned into an as -- pattern. * User pattern is a dot pattern: this pattern won't trigger -- any splitting but will be checked for equality after all splitting is -- complete and as patterns have been bound. * User pattern is an absurd -- pattern: emptiness of the type will be checked after splitting is -- complete. * User pattern is an annotated wildcard: type annotation -- will be checked after splitting is complete. data ProblemEq ProblemEq :: Pattern -> Term -> Dom Type -> ProblemEq [problemInPat] :: ProblemEq -> Pattern [problemInst] :: ProblemEq -> Term [problemType] :: ProblemEq -> Dom Type data RHS RHS :: Expr -> Maybe Expr -> RHS [rhsExpr] :: RHS -> Expr -- | We store the original concrete expression in case we have to reproduce -- it during interactive case splitting. Nothing for internally -- generated rhss. [rhsConcrete] :: RHS -> Maybe Expr AbsurdRHS :: RHS -- | The QName is the name of the with function. WithRHS :: QName -> List1 WithExpr -> List1 Clause -> RHS RewriteRHS :: [RewriteEqn] -> [ProblemEq] -> RHS -> WhereDeclarations -> RHS -- | The QNames are the names of the generated with functions, one -- for each Expr. [rewriteExprs] :: RHS -> [RewriteEqn] -- | The patterns stripped by with-desugaring. These are only present if -- this rewrite follows a with. [rewriteStrippedPats] :: RHS -> [ProblemEq] -- | The RHS should not be another RewriteRHS. [rewriteRHS] :: RHS -> RHS -- | The where clauses are attached to the RewriteRHS by [rewriteWhereDecls] :: RHS -> WhereDeclarations -- | Right-hand side spines. data RHSSpine RHSS :: RHSSpine AbsurdRHSS :: RHSSpine WithRHSS :: List1 ClauseSpine -> RHSSpine RewriteRHSS :: RHSSpine -> WhereDeclarationsSpine -> RHSSpine type RecordAssign = Either Assign ModuleName type RecordAssigns = [RecordAssign] -- | How did we get our hands on the QName for the constructor of -- this record? data RecordConName -- | The user wrote it. NamedRecCon :: !QName -> RecordConName [recordConName] :: RecordConName -> !QName -- | We made it up. FreshRecCon :: !QName -> RecordConName [recordConName] :: RecordConName -> !QName type RecordDirectives = RecordDirectives' RecordConName -- | Renaming (generic). type Ren a = Map a List1 a type Renaming = Renaming' QName ModuleName type RewriteEqn = RewriteEqn' QName BindName Pattern Expr data ScopeCopyInfo ScopeCopyInfo :: Ren ModuleName -> Ren QName -> ScopeCopyInfo [renModules] :: ScopeCopyInfo -> Ren ModuleName [renNames] :: ScopeCopyInfo -> Ren QName type SpineClause = Clause' SpineLHS -- | The lhs of a clause in spine view (inside-out). Projection patterns -- are contained in spLhsPats, represented as ProjP d. data SpineLHS SpineLHS :: LHSInfo -> QName -> [NamedArg Pattern] -> SpineLHS -- | Range. [spLhsInfo] :: SpineLHS -> LHSInfo -- | Name of function we are defining. [spLhsDefName] :: SpineLHS -> QName -- | Elimination by pattern, projections, with-patterns. [spLhsPats] :: SpineLHS -> [NamedArg Pattern] class SubstExpr a substExpr :: SubstExpr a => [(Name, Expr)] -> a -> a ($dmsubstExpr) :: forall (t :: Type -> Type) b. (SubstExpr a, Functor t, SubstExpr b, t b ~ a) => [(Name, Expr)] -> a -> a type TacticAttribute = TacticAttribute' Expr type Telescope = [TypedBinding] type Telescope1 = List1 TypedBinding -- | Types are just expressions. Use this type synonym for hinting that an -- expression should be a type. type Type = Expr -- | Only Axioms. type TypeSignature = Declaration -- | A typed binding. Appears in dependent function spaces, typed lambdas, -- and telescopes. It might be tempting to simplify this to only bind a -- single name at a time, and translate, say, (x y : A) to -- (x : A)(y : A) before type-checking. However, this would be -- slightly problematic: -- --
-- mkPi dom t = telePi (telFromList [dom]) t --mkPi :: Dom (ArgName, Type) -> Type -> Type mkPiSort :: Dom Type -> Abs Type -> Sort -- | Turn a typed binding (x1 .. xn : A) into a telescope. namedBindsToTel :: [NamedArg Name] -> Type -> Telescope namedBindsToTel1 :: List1 (NamedArg Name) -> Type -> Telescope namedTelVars :: Int -> Telescope -> [NamedArg DeBruijnPattern] -- |
-- (x:A)->B(x) piApply [u] = B(u) ---- -- Precondition: The type must contain the right number of pis without -- having to perform any reduction. -- -- piApply is potentially unsafe, the monadic piApplyM -- is preferable. piApply :: Type -> Args -> Type piSort :: Dom Term -> Sort -> Abs Sort -> Sort -- | Compute the sort of a pi type from the sorts of its domain and -- codomain. This function should only be called on reduced sorts, since -- the LevelUniv rules should only apply when the sort doesn't -- reduce to Set piSort' :: Dom Term -> Sort -> Abs Sort -> Either Blocker Sort -- |
-- projDropParsApply proj o args = projDropPars proj o `apply' args ---- -- This function is an optimization, saving us from construction lambdas -- we immediately remove through application. projDropParsApply :: Projection -> ProjOrigin -> Relevance -> Args -> Term relToDontCare :: LensRelevance a => a -> Term -> Term -- | The permutation should permute the corresponding context. -- (right-to-left list) renameP :: Subst a => Impossible -> Permutation -> a -> a -- | If permute π : [a]Γ -> [a]Δ, then applySubst (renaming -- _ π) : Term Γ -> Term Δ renaming :: DeBruijn a => Impossible -> Permutation -> Substitution' a -- | If permute π : [a]Γ -> [a]Δ, then applySubst -- (renamingR π) : Term Δ -> Term Γ renamingR :: DeBruijn a => Permutation -> Substitution' a -- | Returns Left blocker for unknown (blocked) sorts, and -- otherwise returns Right s where s indicates the size -- and fibrancy. sizeOfSort :: Sort -> Either Blocker SizeOfSort sort :: Sort -> Type ssort :: Level -> Type telVars :: Int -> Telescope -> [Arg DeBruijnPattern] -- | Takes off all exposed function domains from the given type. This means -- that it does not reduce to expose Pi-types. telView' :: Type -> TelView -- | telView'UpTo n t takes off the first n exposed -- function types of t. Takes off all (exposed ones) if n -- < 0. telView'UpTo :: Int -> Type -> TelView -- | Abstract over a telescope in a term, producing lambdas. Dumb -- abstraction: Always produces Abs, never NoAbs. -- -- The implementation is sound because Telescope does not use -- NoAbs. teleLam :: Telescope -> Term -> Term -- | Uses free variable analysis to introduce NoAbs bindings. telePi :: Telescope -> Type -> Type telePi' :: (Abs Type -> Abs Type) -> Telescope -> Type -> Type -- | Only abstract the visible components of the telescope, and all that -- bind variables. Everything will be an Abs! Caution: quadratic -- time! telePiVisible :: Telescope -> Type -> Type -- | Everything will be an Abs. telePi_ :: Telescope -> Type -> Type -- | Given arguments vs : tel (vector typing), extract their -- individual types. Returns Nothing is tel is not long -- enough. typeArgsWithTel :: Telescope -> [Term] -> Maybe [Dom Type] univSort :: Sort -> Sort -- | univSort' univInf s gets the next higher sort of s, -- if it is known (i.e. it is not just UnivSort s). -- -- Precondition: s is reduced univSort' :: Sort -> Either Blocker Sort unlamView :: [Arg ArgName] -> Term -> Term usePatOrigin :: PatOrigin -> Pattern' a -> Pattern' a usePatternInfo :: PatternInfo -> Pattern' a -> Pattern' a -- | A sort can either be small (Set l, Prop l, Size, ...) or large (Setω -- n). data SizeOfSort SizeOfSort :: Univ -> Integer -> SizeOfSort [szSortUniv] :: SizeOfSort -> Univ [szSortSize] :: SizeOfSort -> Integer data TelV a TelV :: Tele (Dom a) -> a -> TelV a [theTel] :: TelV a -> Tele (Dom a) [theCore] :: TelV a -> a type TelView = TelV Type -- | Performs void (noAbs) abstraction over telescope. class TeleNoAbs a teleNoAbs :: TeleNoAbs a => a -> Term -> Term -- | Substitutions. data Substitution' a -- | Identity substitution. Γ ⊢ IdS : Γ IdS :: Substitution' a -- | Empty substitution, lifts from the empty context. First argument is -- IMPOSSIBLE. Apply this to closed terms you want to use -- in a non-empty context. Γ ⊢ EmptyS : () EmptyS :: Impossible -> Substitution' a -- | Substitution extension, `cons'. Γ ⊢ u : Aρ Γ ⊢ ρ : Δ -- ---------------------- Γ ⊢ u :# ρ : Δ, A (:#) :: a -> Substitution' a -> Substitution' a -- | Strengthening substitution. First argument is -- IMPOSSIBLE. In 'Strengthen err n ρ the number -- n must be non-negative. This substitution should only be -- applied to values t for which none of the variables -- 0 up to n - 1 are free in t[ρ], and in that -- case n is subtracted from all free de Bruijn indices in -- t[ρ]. Γ ⊢ ρ : Δ |Θ| = n --------------------------- Γ ⊢ -- Strengthen n ρ : Δ, Θ @ Strengthen :: Impossible -> !Int -> Substitution' a -> Substitution' a -- | Weakening substitution, lifts to an extended context. Γ ⊢ ρ : Δ -- ------------------- Γ, Ψ ⊢ Wk |Ψ| ρ : Δ Wk :: !Int -> Substitution' a -> Substitution' a -- | Lifting substitution. Use this to go under a binder. Lift 1 ρ == -- var 0 :# Wk 1 ρ. Γ ⊢ ρ : Δ ------------------------- Γ, Ψρ ⊢ -- Lift |Ψ| ρ : Δ, Ψ Lift :: !Int -> Substitution' a -> Substitution' a infixr 4 :# type Substitution = Substitution' Term instance Agda.TypeChecking.Substitute.Class.Abstract a => Agda.TypeChecking.Substitute.Class.Abstract (Agda.TypeChecking.CompiledClause.Case a) instance Agda.TypeChecking.Substitute.Class.Abstract Agda.Syntax.Internal.Clause instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.CompiledClause.CompiledClauses instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.Definition instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.Defn instance Agda.Utils.Permutation.DoDrop a => Agda.TypeChecking.Substitute.Class.Abstract (Agda.Utils.Permutation.Drop a) instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.FunctionInverse instance Agda.TypeChecking.Substitute.Class.Abstract v => Agda.TypeChecking.Substitute.Class.Abstract (Data.HashMap.Internal.HashMap k v) instance Agda.TypeChecking.Substitute.Class.Abstract [Agda.TypeChecking.Positivity.Occurrence.Occurrence] instance Agda.TypeChecking.Substitute.Class.Abstract [Agda.TypeChecking.Monad.Base.Types.Polarity] instance Agda.TypeChecking.Substitute.Class.Abstract t => Agda.TypeChecking.Substitute.Class.Abstract [t] instance Agda.TypeChecking.Substitute.Class.Abstract v => Agda.TypeChecking.Substitute.Class.Abstract (Data.Map.Internal.Map k v) instance Agda.TypeChecking.Substitute.Class.Abstract t => Agda.TypeChecking.Substitute.Class.Abstract (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.NumGeneralizableArgs instance Agda.TypeChecking.Substitute.Class.Abstract Agda.Utils.Permutation.Permutation instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.PrimFun instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.ProjLams instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.Projection instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.TypeChecking.Substitute.Class.Abstract Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Substitute.Class.Abstract Agda.TypeChecking.Monad.Base.System instance Agda.TypeChecking.Substitute.Class.Abstract Agda.Syntax.Internal.Telescope instance Agda.TypeChecking.Substitute.Class.Abstract Agda.Syntax.Internal.Term instance Agda.TypeChecking.Substitute.Class.Abstract Agda.Syntax.Internal.Type instance Agda.TypeChecking.Substitute.Class.Abstract a => Agda.TypeChecking.Substitute.Class.Abstract (Agda.TypeChecking.CompiledClause.WithArity a) instance Agda.TypeChecking.Substitute.Class.Apply t => Agda.TypeChecking.Substitute.Class.Apply (Agda.Syntax.Internal.Blocked t) instance Agda.TypeChecking.Substitute.Class.Apply Agda.Syntax.Internal.BraveTerm instance Agda.TypeChecking.Substitute.Class.Apply a => Agda.TypeChecking.Substitute.Class.Apply (Agda.TypeChecking.CompiledClause.Case a) instance Agda.TypeChecking.Substitute.Class.Apply Agda.Syntax.Internal.Clause instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.CompiledClause.CompiledClauses instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.Definition instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.Defn instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.DisplayTerm instance Agda.Utils.Permutation.DoDrop a => Agda.TypeChecking.Substitute.Class.Apply (Agda.Utils.Permutation.Drop a) instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.ExtLamInfo instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.FunctionInverse instance Agda.TypeChecking.Substitute.Class.Apply v => Agda.TypeChecking.Substitute.Class.Apply (Data.HashMap.Internal.HashMap k v) instance Agda.TypeChecking.Substitute.Class.Apply [Agda.TypeChecking.Positivity.Occurrence.Occurrence] instance Agda.TypeChecking.Substitute.Class.Apply [Agda.TypeChecking.Monad.Base.Types.Polarity] instance Agda.TypeChecking.Substitute.Class.Apply [Agda.Syntax.Common.NamedArg (Agda.Syntax.Internal.Pattern' a)] instance Agda.TypeChecking.Substitute.Class.Apply t => Agda.TypeChecking.Substitute.Class.Apply [t] instance Agda.TypeChecking.Substitute.Class.Apply v => Agda.TypeChecking.Substitute.Class.Apply (Data.Map.Internal.Map k v) instance Agda.TypeChecking.Substitute.Class.Apply t => Agda.TypeChecking.Substitute.Class.Apply (Data.Strict.Maybe.Maybe t) instance Agda.TypeChecking.Substitute.Class.Apply t => Agda.TypeChecking.Substitute.Class.Apply (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.NumGeneralizableArgs instance Agda.TypeChecking.Substitute.Class.Apply Agda.Utils.Permutation.Permutation instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.PrimFun instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.ProjLams instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.Projection instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.TypeChecking.Substitute.Class.Apply Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Substitute.Class.Apply Agda.TypeChecking.Monad.Base.System instance Agda.TypeChecking.Substitute.Class.TermSubst a => Agda.TypeChecking.Substitute.Class.Apply (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.Substitute.Class.Apply Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Substitute.Class.Apply a, Agda.TypeChecking.Substitute.Class.Apply b) => Agda.TypeChecking.Substitute.Class.Apply (a, b) instance (Agda.TypeChecking.Substitute.Class.Apply a, Agda.TypeChecking.Substitute.Class.Apply b, Agda.TypeChecking.Substitute.Class.Apply c) => Agda.TypeChecking.Substitute.Class.Apply (a, b, c) instance Agda.TypeChecking.Substitute.Class.Apply a => Agda.TypeChecking.Substitute.Class.Apply (Agda.TypeChecking.CompiledClause.WithArity a) instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn Agda.Syntax.Internal.BraveTerm instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn a => Agda.TypeChecking.Substitute.DeBruijn.DeBruijn (Agda.Syntax.Internal.Pattern' a) instance (Agda.TypeChecking.Substitute.Class.Subst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Abs a) instance GHC.Classes.Eq t => GHC.Classes.Eq (Agda.Syntax.Internal.Blocked t) instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.Candidate instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.CandidateKind instance (Agda.TypeChecking.Substitute.Class.Subst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Elim.Elim' a) instance GHC.Classes.Eq Agda.Syntax.Internal.Level instance GHC.Classes.Eq Agda.Syntax.Internal.NotBlocked instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Internal.Pattern' a) instance GHC.Classes.Eq Agda.Syntax.Internal.PlusLevel instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.Section instance GHC.Classes.Eq Agda.Syntax.Internal.Sort instance GHC.Classes.Eq Agda.Syntax.Internal.Substitution instance (Agda.TypeChecking.Substitute.Class.TermSubst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.TypeChecking.Substitute.TelV a) instance (Agda.TypeChecking.Substitute.Class.Subst a, GHC.Classes.Eq a) => GHC.Classes.Eq (Agda.Syntax.Internal.Tele a) instance GHC.Classes.Eq Agda.Syntax.Internal.Term instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Internal.Type' a) instance GHC.Internal.Base.Functor Agda.TypeChecking.Substitute.TelV instance (Agda.TypeChecking.Substitute.Class.Subst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Abs a) instance GHC.Classes.Ord Agda.TypeChecking.Monad.Base.Candidate instance GHC.Classes.Ord Agda.TypeChecking.Monad.Base.CandidateKind instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Internal.Dom a) instance (Agda.TypeChecking.Substitute.Class.Subst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Elim.Elim' a) instance GHC.Classes.Ord Agda.Syntax.Internal.Level instance GHC.Classes.Ord Agda.Syntax.Internal.PlusLevel instance GHC.Classes.Ord Agda.Syntax.Internal.Sort instance GHC.Classes.Ord Agda.Syntax.Internal.Substitution instance (Agda.TypeChecking.Substitute.Class.TermSubst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.TypeChecking.Substitute.TelV a) instance (Agda.TypeChecking.Substitute.Class.Subst a, GHC.Classes.Ord a) => GHC.Classes.Ord (Agda.Syntax.Internal.Tele a) instance GHC.Classes.Ord Agda.Syntax.Internal.Term instance GHC.Classes.Ord a => GHC.Classes.Ord (Agda.Syntax.Internal.Type' a) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.TypeChecking.Substitute.TelV a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Blocked a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.BraveTerm instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.ConPatternInfo instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.Constraint instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.Types.ContextEntry instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.DisplayTerm instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Substitute.Class.Subst b, Agda.TypeChecking.Substitute.Class.SubstArg a GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg b) => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Dom' a b) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.EqualityTypeData instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.LetBinding instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Level' a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst [a] instance (GHC.Classes.Ord k, Agda.TypeChecking.Substitute.Class.Subst a) => Agda.TypeChecking.Substitute.Class.Subst (Data.Map.Internal.Map k a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Abstract.Name.Name instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Common.Named name a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Utils.List1.List1 a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Pattern instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.DeBruijnPattern instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.PlusLevel' a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Abstract.ProblemEq instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Position.Range instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Monad.Base.RewriteRule instance (GHC.Types.Coercible a Agda.Syntax.Internal.Term, Agda.TypeChecking.Substitute.Class.Subst a) => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Sort' a) instance Agda.TypeChecking.Substitute.Class.EndoSubst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Substitution' a) instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Substitute.Class.Subst b, Agda.TypeChecking.Substitute.Class.SubstArg a GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg b) => Agda.TypeChecking.Substitute.Class.Subst (a, b) instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Substitute.Class.Subst b, Agda.TypeChecking.Substitute.Class.Subst c, Agda.TypeChecking.Substitute.Class.SubstArg a GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg b, Agda.TypeChecking.Substitute.Class.SubstArg b GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg c) => Agda.TypeChecking.Substitute.Class.Subst (a, b, c) instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Substitute.Class.Subst b, Agda.TypeChecking.Substitute.Class.Subst c, Agda.TypeChecking.Substitute.Class.Subst d, Agda.TypeChecking.Substitute.Class.SubstArg a GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg b, Agda.TypeChecking.Substitute.Class.SubstArg b GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg c, Agda.TypeChecking.Substitute.Class.SubstArg c GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg d) => Agda.TypeChecking.Substitute.Class.Subst (a, b, c, d) instance (GHC.Types.Coercible a Agda.Syntax.Internal.Term, Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Substitute.Class.Subst b, Agda.TypeChecking.Substitute.Class.SubstArg a GHC.Types.~ Agda.TypeChecking.Substitute.Class.SubstArg b) => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Internal.Type'' a b) instance Agda.TypeChecking.Substitute.Class.Subst () instance Agda.TypeChecking.Substitute.Class.Subst a => Agda.TypeChecking.Substitute.Class.Subst (Agda.Syntax.Common.WithHiding a) instance Agda.TypeChecking.Substitute.TeleNoAbs Agda.Syntax.Internal.ListTel instance Agda.TypeChecking.Substitute.TeleNoAbs Agda.Syntax.Internal.Telescope module Agda.Compiler.Treeless.Subst newtype UnderLambda UnderLambda :: Any -> UnderLambda newtype SeqArg SeqArg :: All -> SeqArg data Occurs Occurs :: Int -> UnderLambda -> SeqArg -> Occurs once :: Occurs inSeq :: Occurs -> Occurs underLambda :: Occurs -> Occurs class HasFree a freeVars :: HasFree a => a -> IntMap Occurs freeIn :: HasFree a => Int -> a -> Bool occursIn :: HasFree a => Int -> a -> Occurs data Binder a Binder :: Int -> a -> Binder a newtype InSeq a InSeq :: a -> InSeq a -- | Strenghtening. tryStrengthen :: (HasFree a, Subst a) => Int -> a -> Maybe a instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn Agda.Syntax.Treeless.TTerm instance GHC.Classes.Eq Agda.Compiler.Treeless.Subst.Occurs instance GHC.Classes.Eq Agda.Compiler.Treeless.Subst.SeqArg instance GHC.Classes.Eq Agda.Compiler.Treeless.Subst.UnderLambda instance Agda.Compiler.Treeless.Subst.HasFree a => Agda.Compiler.Treeless.Subst.HasFree (Agda.Compiler.Treeless.Subst.Binder a) instance Agda.Compiler.Treeless.Subst.HasFree a => Agda.Compiler.Treeless.Subst.HasFree (Agda.Compiler.Treeless.Subst.InSeq a) instance Agda.Compiler.Treeless.Subst.HasFree GHC.Types.Int instance Agda.Compiler.Treeless.Subst.HasFree a => Agda.Compiler.Treeless.Subst.HasFree [a] instance Agda.Compiler.Treeless.Subst.HasFree Agda.Syntax.Treeless.TAlt instance Agda.Compiler.Treeless.Subst.HasFree Agda.Syntax.Treeless.TTerm instance (Agda.Compiler.Treeless.Subst.HasFree a, Agda.Compiler.Treeless.Subst.HasFree b) => Agda.Compiler.Treeless.Subst.HasFree (a, b) instance GHC.Internal.Base.Monoid Agda.Compiler.Treeless.Subst.Occurs instance GHC.Internal.Base.Monoid Agda.Compiler.Treeless.Subst.SeqArg instance GHC.Internal.Base.Monoid Agda.Compiler.Treeless.Subst.UnderLambda instance GHC.Classes.Ord Agda.Compiler.Treeless.Subst.Occurs instance GHC.Classes.Ord Agda.Compiler.Treeless.Subst.SeqArg instance GHC.Classes.Ord Agda.Compiler.Treeless.Subst.UnderLambda instance GHC.Internal.Base.Semigroup Agda.Compiler.Treeless.Subst.Occurs instance GHC.Internal.Base.Semigroup Agda.Compiler.Treeless.Subst.SeqArg instance GHC.Internal.Base.Semigroup Agda.Compiler.Treeless.Subst.UnderLambda instance GHC.Internal.Show.Show Agda.Compiler.Treeless.Subst.Occurs instance GHC.Internal.Show.Show Agda.Compiler.Treeless.Subst.SeqArg instance GHC.Internal.Show.Show Agda.Compiler.Treeless.Subst.UnderLambda instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Treeless.TAlt instance Agda.TypeChecking.Substitute.Class.Subst Agda.Syntax.Treeless.TTerm module Agda.Compiler.Treeless.Pretty instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Treeless.Compiled instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Treeless.TTerm module Agda.Compiler.Treeless.Compare equalTerms :: TTerm -> TTerm -> Bool module Agda.Compiler.Treeless.Uncase caseToSeq :: Monad m => TTerm -> m TTerm module Agda.TypeChecking.Monad.Imports addImport :: TopLevelModuleName -> TCM () addImportCycleCheck :: TopLevelModuleName -> TCM a -> TCM a -- | Assumes that the first module in the import path is the module we are -- worried about. checkForImportCycle :: TCM () dropDecodedModule :: TopLevelModuleName -> TCM () getDecodedModule :: TopLevelModuleName -> TCM (Maybe ModuleInfo) getDecodedModules :: TCM DecodedModules getImportPath :: TCM [TopLevelModuleName] getPrettyVisitedModules :: ReadTCState m => m Doc getVisitedModule :: ReadTCState m => TopLevelModuleName -> m (Maybe ModuleInfo) getVisitedModules :: ReadTCState m => m VisitedModules setDecodedModules :: DecodedModules -> TCM () setVisitedModules :: VisitedModules -> TCM () storeDecodedModule :: ModuleInfo -> TCM () visitModule :: ModuleInfo -> TCM () withImportPath :: [TopLevelModuleName] -> TCM a -> TCM a module Agda.TypeChecking.Monad.Env -- | Get the name of the current module, if any. currentModule :: MonadTCEnv m => m ModuleName -- | Set the name of the current module. withCurrentModule :: MonadTCEnv m => ModuleName -> m a -> m a -- | Get the path of the currently checked file getCurrentPath :: (MonadTCEnv m, MonadFileId m) => m AbsolutePath -- | Get the number of variables bound by anonymous modules. getAnonymousVariables :: MonadTCEnv m => ModuleName -> m Nat -- | Add variables bound by an anonymous module. withAnonymousModule :: ModuleName -> Nat -> TCM a -> TCM a -- | Set the current environment to the given withEnv :: MonadTCEnv m => TCEnv -> m a -> m a -- | Get the current environment getEnv :: TCM TCEnv -- | Set highlighting level withHighlightingLevel :: HighlightingLevel -> TCM a -> TCM a -- | Restore setting for ExpandLast to default. doExpandLast :: TCM a -> TCM a dontExpandLast :: TCM a -> TCM a reallyDontExpandLast :: TCM a -> TCM a -- | If the reduced did a proper match (constructor or literal pattern), -- then record this as simplification step. performedSimplification :: MonadTCEnv m => m a -> m a performedSimplification' :: MonadTCEnv m => Simplification -> m a -> m a getSimplification :: MonadTCEnv m => m Simplification -- | Lens for AllowedReductions. updateAllowedReductions :: (AllowedReductions -> AllowedReductions) -> TCEnv -> TCEnv modifyAllowedReductions :: MonadTCEnv m => (AllowedReductions -> AllowedReductions) -> m a -> m a putAllowedReductions :: MonadTCEnv m => AllowedReductions -> m a -> m a -- | Reduce Def f vs only if f is a projection. onlyReduceProjections :: MonadTCEnv m => m a -> m a -- | Allow all reductions except for non-terminating functions (default). allowAllReductions :: MonadTCEnv m => m a -> m a -- | Allow all reductions including non-terminating functions. allowNonTerminatingReductions :: MonadTCEnv m => m a -> m a -- | Allow all reductions when reducing types. Otherwise only allow inlined -- functions to be unfolded. onlyReduceTypes :: MonadTCEnv m => m a -> m a -- | Update allowed reductions when working on types typeLevelReductions :: MonadTCEnv m => m a -> m a insideDotPattern :: TCM a -> TCM a isInsideDotPattern :: TCM Bool -- | Don't use call-by-need evaluation for the given computation. callByName :: TCM a -> TCM a -- | Don't fold let bindings when printing. This is a bit crude since it -- disables any folding of let bindings at all. In many cases it's better -- to use removeLetBinding before printing to drop the let -- bindings that should not be folded. dontFoldLetBindings :: MonadTCEnv m => m a -> m a module Agda.TypeChecking.Monad.Builtin bindBuiltinName :: BuiltinId -> Term -> TCM () -- | Add one (more) relation symbol to the rewrite relations. bindBuiltinRewriteRelation :: QName -> TCM () bindPrimitive :: PrimitiveId -> PrimFun -> TCM () boldPathView :: Type -> PathView coinductionKit :: TCM (Maybe CoinductionKit) -- | Tries to build a CoinductionKit. coinductionKit' :: TCM CoinductionKit -- | Primitives with typechecking constrants. constrainedPrims :: [PrimitiveId] -- | Rewrite a literal to constructor form if possible. constructorForm :: HasBuiltins m => Term -> m Term constructorForm' :: Applicative m => m Term -> m Term -> Term -> m Term -- | Check whether the type is actually an equality (lhs ≡ rhs) and extract -- lhs, rhs, and their type. -- -- Precondition: type is reduced. equalityView :: Type -> TCM EqualityView getBuiltin :: (HasBuiltins m, MonadTCError m) => BuiltinId -> m Term -- | Returns Nothing if built-in is not bound or bound to a -- Prim. getBuiltin' :: HasBuiltins m => BuiltinId -> m (Maybe Term) getBuiltinName' :: HasBuiltins m => BuiltinId -> m (Maybe QName) getBuiltinName_ :: (HasBuiltins m, MonadTCError m) => BuiltinId -> m QName -- | Get the currently registered rewrite relation symbols. getBuiltinRewriteRelations :: (HasBuiltins m, MonadTCError m) => m (Set QName) -- | Get the currently registered rewrite relation symbols, if any. getBuiltinRewriteRelations' :: HasBuiltins m => m (Maybe (Set QName)) getName' :: (HasBuiltins m, IsBuiltin a) => a -> m (Maybe QName) getNameOfConstrained :: HasBuiltins m => PrimitiveId -> m (Maybe QName) getPrimName :: Term -> QName getPrimitive :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => PrimitiveId -> m PrimFun -- | Returns Nothing if primitive is not bound or bound to a -- Builtin. getPrimitive' :: HasBuiltins m => PrimitiveId -> m (Maybe PrimFun) getPrimitiveName' :: HasBuiltins m => PrimitiveId -> m (Maybe QName) getPrimitiveTerm :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => PrimitiveId -> m Term getPrimitiveTerm' :: HasBuiltins m => PrimitiveId -> m (Maybe Term) -- | getTerm use name looks up name as a primitive or -- builtin, and throws an error otherwise. The use argument -- describes how the name is used for the sake of the error message. getTerm :: (HasBuiltins m, IsBuiltin a) => String -> a -> m Term getTerm' :: (HasBuiltins m, IsBuiltin a) => a -> m (Maybe Term) -- | Compute a SortKit in contexts that do not support failure (e.g. -- Reify). This should only be used when we are sure that the -- primitive sorts have been bound, i.e. because it is "after" type -- checking. infallibleSortKit :: HasBuiltins m => m SortKit intervalSort :: Sort intervalUnview :: HasBuiltins m => IntervalView -> m Term intervalUnview' :: HasBuiltins m => m (IntervalView -> Term) intervalView :: HasBuiltins m => Term -> m IntervalView intervalView' :: HasBuiltins m => m (Term -> IntervalView) isPrimitive :: HasBuiltins m => PrimitiveId -> QName -> m Bool litType :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => Literal -> m Type mkSortKit :: QName -> QName -> QName -> QName -> QName -> QName -> SortKit -- | Revert the PathView. -- -- Postcondition: type is reduced. pathUnview :: PathView -> Type -- | Check whether the type is actually an path (lhs ≡ rhs) and extract -- lhs, rhs, and their type. -- -- Precondition: type is reduced. pathView :: HasBuiltins m => Type -> m PathView pathView' :: HasBuiltins m => m (Type -> PathView) primAbs :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAbsAbs :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaBlocker :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaBlockerAll :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaBlockerAny :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaBlockerMeta :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaClause :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaClauseAbsurd :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaClauseClause :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinition :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinitionDataConstructor :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinitionDataDef :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinitionFunDef :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinitionPostulate :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinitionPrimitive :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaDefinitionRecordDef :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaErrorPart :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaErrorPartName :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaErrorPartPatt :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaErrorPartString :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaErrorPartTerm :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitChar :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitFloat :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitMeta :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitNat :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitQName :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitString :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLitWord64 :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaLiteral :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaMeta :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPatAbsurd :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPatCon :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPatDot :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPatLit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPatProj :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPatVar :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaPattern :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSort :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSortInf :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSortLit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSortProp :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSortPropLit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSortSet :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaSortUnsupported :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCM :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMAskExpandLast :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMAskNormalisation :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMAskReconstructed :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMAskReduceDefs :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMBind :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMBlock :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMCatchError :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMCheckFromString :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMCheckType :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMCommit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMDebugPrint :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMDeclareData :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMDeclareDef :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMDeclarePostulate :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMDefineData :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMDefineFun :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMExec :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMExtendContext :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMFormatErrorParts :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMFreshName :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMGetContext :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMGetDefinition :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMGetInstances :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMGetType :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMInContext :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMInferType :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMIsMacro :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMNoConstraints :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMNormalise :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMPragmaCompile :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMPragmaForeign :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMQuoteOmegaTerm :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMQuoteTerm :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMReduce :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMReturn :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMRunSpeculative :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMSolveInstances :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMTypeError :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMUnify :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMUnquoteTerm :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMWithExpandLast :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMWithNormalisation :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMWithReconstructed :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMWithReduceDefs :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTCMWorkOnTypes :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTerm :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermCon :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermDef :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermExtLam :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermLam :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermLit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermMeta :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermPi :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermSort :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermUnsupported :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAgdaTermVar :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primArg :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primArgArg :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primArgArgInfo :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primArgInfo :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAssoc :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAssocLeft :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAssocNon :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primAssocRight :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primBool :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primChar :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primCons :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primEquality :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term -- | Get the name of the equality type. primEqualityName :: TCM QName primEquiv :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primEquivFun :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primEquivProof :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFaceForall :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFalse :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFixity :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFixityFixity :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFlat :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFloat :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFromNat :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFromNeg :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primFromString :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primGlue :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primHComp :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primHidden :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primHiding :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIMax :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIMin :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primINeg :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIO :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIOne :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIZero :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primInf :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primInstance :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primInteger :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIntegerNegSuc :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIntegerPos :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primInterval :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIntervalUniv :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIrrelevant :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIsOne :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIsOne1 :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIsOne2 :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primIsOneEmpty :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primItIsOne :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primJust :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primLevel :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primLevelMax :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primLevelSuc :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primLevelUniv :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primLevelZero :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primList :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primLockUniv :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primMaybe :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primModality :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primModalityConstructor :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNat :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatDivSucAux :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatEquality :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatLess :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatMinus :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatModSucAux :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatPlus :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNatTimes :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNil :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primNothing :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPartial :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPartialP :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPath :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPathP :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPrecRelated :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPrecUnrelated :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPrecedence :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primProp :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primPropOmega :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primQName :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primQuantity :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primQuantity0 :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primQuantityω :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primRefl :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primRelevance :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primRelevant :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSSetOmega :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSet :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSetOmega :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSharp :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSigma :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSize :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSizeInf :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSizeLt :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSizeMax :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSizeSuc :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSizeUniv :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primStrictSet :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primString :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSub :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSubIn :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSubOut :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primSuc :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primTrans :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primTranspProof :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primTrue :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primUnit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primUnitUnit :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primVisible :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primWord64 :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term primZero :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term prim_glue :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term prim_glueU :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term prim_unglue :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term prim_unglueU :: (HasBuiltins m, MonadError TCErr m, MonadTCEnv m, ReadTCState m) => m Term -- | Run a BuiltinAccess monad. runBuiltinAccess :: TCState -> BuiltinAccess a -> a setBuiltinThings :: BuiltinThings -> TCM () -- | Compute a SortKit in an environment that supports failures. -- -- When optLoadPrimitives is set to False, sortKit -- is a fallible operation, so for the uses of sortKit in fallible -- contexts (e.g. TCM), we report a type error rather than -- exploding. sortKit :: (HasBuiltins m, MonadTCError m, HasOptions m) => m SortKit -- | The trivial implementation of HasBuiltins, using a constant -- TCState. -- -- This may be used instead of TCMT/ReduceM where builtins -- must be accessed in a pure context. newtype BuiltinAccess a BuiltinAccess :: (TCState -> a) -> BuiltinAccess a [unBuiltinAccess] :: BuiltinAccess a -> TCState -> a -- | The coinductive primitives. data CoinductionKit CoinductionKit :: QName -> QName -> QName -> CoinductionKit [nameOfInf] :: CoinductionKit -> QName [nameOfSharp] :: CoinductionKit -> QName [nameOfFlat] :: CoinductionKit -> QName -- | Revert the EqualityView. -- -- Postcondition: type is reduced. class EqualityUnview a equalityUnview :: EqualityUnview a => a -> Type class (Functor m, Applicative m, Monad m) => HasBuiltins (m :: Type -> Type) getBuiltinThing :: HasBuiltins m => SomeBuiltin -> m (Maybe (Builtin PrimFun)) ($dmgetBuiltinThing) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (HasBuiltins m, MonadTrans t, HasBuiltins n, t n ~ m) => SomeBuiltin -> m (Maybe (Builtin PrimFun)) -- | Sort primitives. data SortKit SortKit :: (UnivSize -> Univ -> QName) -> (QName -> Maybe (UnivSize, Univ)) -> SortKit [nameOfUniv] :: SortKit -> UnivSize -> Univ -> QName [isNameOfUniv] :: SortKit -> QName -> Maybe (UnivSize, Univ) instance GHC.Internal.Base.Applicative Agda.TypeChecking.Monad.Builtin.BuiltinAccess instance Agda.TypeChecking.Monad.Builtin.EqualityUnview Agda.Syntax.Internal.EqualityTypeData instance Agda.TypeChecking.Monad.Builtin.EqualityUnview Agda.Syntax.Internal.EqualityView instance GHC.Internal.Base.Functor Agda.TypeChecking.Monad.Builtin.BuiltinAccess instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Agda.TypeChecking.Monad.Base.BlockT m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins Agda.TypeChecking.Monad.Builtin.BuiltinAccess instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Agda.Utils.Update.ChangeT m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Control.Monad.Trans.Except.ExceptT e m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Control.Monad.Trans.Identity.IdentityT m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Agda.Utils.ListT.ListT m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Control.Monad.Trans.Reader.ReaderT e m) instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Control.Monad.Trans.State.Lazy.StateT s m) instance GHC.Internal.Control.Monad.IO.Class.MonadIO m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Agda.TypeChecking.Monad.Base.TCMT m) instance (Agda.TypeChecking.Monad.Builtin.HasBuiltins m, GHC.Internal.Base.Monoid w) => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance GHC.Internal.Base.Monad Agda.TypeChecking.Monad.Builtin.BuiltinAccess instance GHC.Internal.Control.Monad.Fail.MonadFail Agda.TypeChecking.Monad.Builtin.BuiltinAccess -- | Logic for deciding which functions should be automatically inlined. module Agda.TypeChecking.Inlining -- | Mark a definition to be inlined if it satisfies the inlining -- criterion. autoInline :: Defn -> TCM Defn -- | Convert errors to their names. module Agda.TypeChecking.Errors.Names -- | Print the name of a TypeError. typeErrorString :: TypeError -> String -- | Compute the name of a TypeError. typeErrorName :: TypeError -> ErrorName declarationExceptionName :: DeclarationException' -> DeclarationException_ execErrorName :: ExecError -> ExecError_ ghcBackendErrorName :: GHCBackendError -> GHCBackendError_ jsBackendErrorName :: JSBackendError -> JSBackendError_ impossibleConstructorErrorName :: NegativeUnification -> NegativeUnification_ interactionErrorName :: InteractionError -> InteractionError_ missingTypeSignatureInfoName :: MissingTypeSignatureInfo -> DataRecOrFun_ notAHaskellTypeErrorName :: WhyNotAHaskellType -> NotAHaskellType_ splitErrorName :: SplitError -> SplitError_ unquotableName :: CannotQuote -> CannotQuote_ unquoteErrorName :: UnquoteError -> UnquoteError_ module Agda.TypeChecking.Monad.Debug __CRASH_WHEN__ :: (HasCallStack, MonadTCM m, MonadDebug m) => VerboseKey -> VerboseLevel -> m () __IMPOSSIBLE_VERBOSE__ :: (HasCallStack, MonadDebug m) => String -> m a -- | Conditionally render debug Doc and print it. Works regardless -- of the debug flag. alwaysReportSDoc :: MonadDebug m => VerboseKey -> VerboseLevel -> TCM Doc -> m () -- | Conditionally println debug string. Works regardless of the debug -- flag. alwaysReportSLn :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m () -- | Apply a function if a certain verbosity level is activated. -- -- Precondition: The level must be non-negative. applyWhenVerboseS :: MonadDebug m => VerboseKey -> VerboseLevel -> (m a -> m a) -> m a -> m a -- | During printing, catch internal errors of kind Impossible and -- print them. catchAndPrintImpossible :: (CatchImpossible m, Monad m) => VerboseKey -> VerboseLevel -> m String -> m String closeVerboseBracket :: MonadDebug m => VerboseKey -> VerboseLevel -> m () closeVerboseBracketException :: MonadDebug m => VerboseKey -> VerboseLevel -> m () defaultGetProfileOptions :: HasOptions m => m ProfileOptions defaultGetVerbosity :: HasOptions m => m Verbosity defaultIsDebugPrinting :: MonadTCEnv m => m Bool defaultNowDebugPrinting :: MonadTCEnv m => m a -> m a -- | Print a debug message if switched on. displayDebugMessage :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m () -- | Check whether a certain verbosity level is activated (exact match). hasExactVerbosity :: MonadDebug m => VerboseKey -> VerboseLevel -> m Bool -- | Check whether a certain profile option is activated. hasProfileOption :: MonadDebug m => ProfileOption -> m Bool -- | Check whether a certain verbosity level is activated. -- -- Precondition: The level must be non-negative. hasVerbosity :: MonadDebug m => VerboseKey -> VerboseLevel -> m Bool openVerboseBracket :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m () -- | Debug print the result of a computation. reportResult :: MonadDebug m => VerboseKey -> VerboseLevel -> (a -> TCM Doc) -> m a -> m a -- | Conditionally render debug Doc and print it. reportSDoc :: MonadDebug m => VerboseKey -> VerboseLevel -> TCM Doc -> m () -- | Conditionally println debug string. reportSLn :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m () -- | Conditionally render debug Doc, print it, and then continue. traceSDoc :: MonadDebug m => VerboseKey -> VerboseLevel -> TCM Doc -> m a -> m a traceSLn :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m a -> m a unlessDebugPrinting :: MonadDebug m => m () -> m () -- | Run a computation if a certain verbosity level is activated. -- -- Precondition: The level must be non-negative. verboseS :: MonadDebug m => VerboseKey -> VerboseLevel -> m () -> m () -- | Run a computation if a certain verbosity level is activated (exact -- match). whenExactVerbosity :: MonadDebug m => VerboseKey -> VerboseLevel -> m () -> m () -- | Run some code when the given profiling option is active. whenProfile :: MonadDebug m => ProfileOption -> m () -> m () class (Functor m, Applicative m, Monad m) => MonadDebug (m :: Type -> Type) formatDebugMessage :: MonadDebug m => VerboseKey -> VerboseLevel -> TCM Doc -> m String ($dmformatDebugMessage) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (MonadDebug m, MonadTrans t, MonadDebug n, m ~ t n) => VerboseKey -> VerboseLevel -> TCM Doc -> m String traceDebugMessage :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m a -> m a ($dmtraceDebugMessage) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) a. (MonadDebug m, MonadTransControl t, MonadDebug n, m ~ t n) => VerboseKey -> VerboseLevel -> String -> m a -> m a -- | Print brackets around debug messages issued by a computation. verboseBracket :: MonadDebug m => VerboseKey -> VerboseLevel -> String -> m a -> m a ($dmverboseBracket) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) a. (MonadDebug m, MonadTransControl t, MonadDebug n, m ~ t n) => VerboseKey -> VerboseLevel -> String -> m a -> m a getVerbosity :: MonadDebug m => m Verbosity ($dmgetVerbosity) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (MonadDebug m, MonadTrans t, MonadDebug n, m ~ t n) => m Verbosity getProfileOptions :: MonadDebug m => m ProfileOptions ($dmgetProfileOptions) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (MonadDebug m, MonadTrans t, MonadDebug n, m ~ t n) => m ProfileOptions -- | Check whether we are currently debug printing. isDebugPrinting :: MonadDebug m => m Bool ($dmisDebugPrinting) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (MonadDebug m, MonadTrans t, MonadDebug n, m ~ t n) => m Bool -- | Flag in a computation that we are currently debug printing. nowDebugPrinting :: MonadDebug m => m a -> m a ($dmnowDebugPrinting) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) a. (MonadDebug m, MonadTransControl t, MonadDebug n, m ~ t n) => m a -> m a -- | Debug print some lines if the verbosity level for the given -- VerboseKey is at least VerboseLevel. -- -- Note: In the presence of OverloadedStrings, just @ -- reportS key level "Literate string" gives an Ambiguous -- type variable error in GHC@. Use the legacy functions -- reportSLn and reportSDoc instead then. class ReportS a reportS :: (ReportS a, MonadDebug m) => VerboseKey -> VerboseLevel -> a -> m () -- | Debug print some lines if the verbosity level for the given -- VerboseKey is at least VerboseLevel. -- -- Note: In the presence of OverloadedStrings, just @ traceS -- key level "Literate string" gives an Ambiguous type -- variable error in GHC@. Use the legacy functions -- traceSLn and traceSDoc instead then. class TraceS a traceS :: (TraceS a, MonadDebug m) => VerboseKey -> VerboseLevel -> a -> m c -> m c -- | Nothing is used if no verbosity options have been given, thus -- making it possible to handle the default case relatively quickly. Note -- that Nothing corresponds to a trie with verbosity level 1 for -- the empty path. type Verbosity = Maybe Trie VerboseKeyItem VerboseLevel type VerboseKey = String type VerboseLevel = Int instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Agda.TypeChecking.Monad.Base.BlockT m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Agda.Utils.Update.ChangeT m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Except.ExceptT e m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Identity.IdentityT m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Agda.Utils.ListT.ListT m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Reader.ReaderT r m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.TypeChecking.Monad.Debug.MonadDebug Agda.TypeChecking.Monad.Base.TCM instance (Agda.TypeChecking.Monad.Debug.MonadDebug m, GHC.Internal.Base.Monoid w) => Agda.TypeChecking.Monad.Debug.MonadDebug (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance Agda.TypeChecking.Monad.Debug.ReportS Agda.Syntax.Common.Pretty.Doc instance Agda.TypeChecking.Monad.Debug.ReportS GHC.Internal.Base.String instance Agda.TypeChecking.Monad.Debug.ReportS [Agda.TypeChecking.Monad.Base.TCM Agda.Syntax.Common.Pretty.Doc] instance Agda.TypeChecking.Monad.Debug.ReportS [GHC.Internal.Base.String] instance Agda.TypeChecking.Monad.Debug.ReportS [Agda.Syntax.Common.Pretty.Doc] instance Agda.TypeChecking.Monad.Debug.ReportS (Agda.TypeChecking.Monad.Base.TCM Agda.Syntax.Common.Pretty.Doc) instance Agda.TypeChecking.Monad.Debug.TraceS Agda.Syntax.Common.Pretty.Doc instance Agda.TypeChecking.Monad.Debug.TraceS GHC.Internal.Base.String instance Agda.TypeChecking.Monad.Debug.TraceS [Agda.TypeChecking.Monad.Base.TCM Agda.Syntax.Common.Pretty.Doc] instance Agda.TypeChecking.Monad.Debug.TraceS [GHC.Internal.Base.String] instance Agda.TypeChecking.Monad.Debug.TraceS [Agda.Syntax.Common.Pretty.Doc] instance Agda.TypeChecking.Monad.Debug.TraceS (Agda.TypeChecking.Monad.Base.TCM Agda.Syntax.Common.Pretty.Doc) -- | Collect statistics. module Agda.TypeChecking.Monad.Statistics class ReadTCState m => MonadStatistics (m :: Type -> Type) modifyCounter :: MonadStatistics m => String -> (Integer -> Integer) -> m () ($dmmodifyCounter) :: forall (n :: Type -> Type) (t :: (Type -> Type) -> Type -> Type). (MonadStatistics m, MonadStatistics n, MonadTrans t, t n ~ m) => String -> (Integer -> Integer) -> m () -- | Increase specified counter by 1. tick :: MonadStatistics m => String -> m () -- | Increase specified counter by n. tickN :: MonadStatistics m => String -> Integer -> m () -- | Set the specified counter to the maximum of its current value and -- n. tickMax :: MonadStatistics m => String -> Integer -> m () -- | Get the statistics. getStatistics :: ReadTCState m => m Statistics -- | Modify the statistics via given function. modifyStatistics :: (Statistics -> Statistics) -> TCM () -- | Print the given statistics. printStatistics :: (MonadDebug m, MonadTCEnv m, HasOptions m) => Maybe TopLevelModuleName -> Statistics -> m () instance Agda.TypeChecking.Monad.Statistics.MonadStatistics m => Agda.TypeChecking.Monad.Statistics.MonadStatistics (Control.Monad.Trans.Except.ExceptT e m) instance Agda.TypeChecking.Monad.Statistics.MonadStatistics m => Agda.TypeChecking.Monad.Statistics.MonadStatistics (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Monad.Statistics.MonadStatistics m => Agda.TypeChecking.Monad.Statistics.MonadStatistics (Control.Monad.Trans.Reader.ReaderT r m) instance Agda.TypeChecking.Monad.Statistics.MonadStatistics m => Agda.TypeChecking.Monad.Statistics.MonadStatistics (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.TypeChecking.Monad.Statistics.MonadStatistics Agda.TypeChecking.Monad.Base.TCM instance (Agda.TypeChecking.Monad.Statistics.MonadStatistics m, GHC.Internal.Base.Monoid w) => Agda.TypeChecking.Monad.Statistics.MonadStatistics (Control.Monad.Trans.Writer.Lazy.WriterT w m) module Agda.TypeChecking.Monad.Caching -- | Writes a TypeCheckAction to the current log, using the current -- PostScopeState writeToCurrentLog :: (MonadDebug m, MonadTCState m, ReadTCState m) => TypeCheckAction -> m () -- | Reads the next entry in the cached type check log, if present. readFromCachedLog :: (MonadDebug m, MonadTCState m, ReadTCState m) => m (Maybe (TypeCheckAction, PostScopeState)) -- | Empties the "to read" CachedState. To be used when it gets invalid. cleanCachedLog :: (MonadDebug m, MonadTCState m) => m () -- | Caches the current type check log. Discardes the old cache. Does -- nothing if caching is inactive. cacheCurrentLog :: (MonadDebug m, MonadTCState m) => m () -- | Makes sure that the stLoadedFileCache is Just, with a -- clean current log. Crashes is stLoadedFileCache is already -- active with a dirty log. Should be called when we start typechecking -- the current file. activateLoadedFileCache :: (HasOptions m, MonadDebug m, MonadTCState m) => m () -- | To be called before any write or restore calls. cachingStarts :: (MonadDebug m, MonadTCState m, ReadTCState m) => m () areWeCaching :: ReadTCState m => m Bool -- | Runs the action and restores the current cache at the end of it. localCache :: (MonadTCState m, ReadTCState m) => m a -> m a -- | Runs the action without cache and restores the current cache at the -- end of it. withoutCache :: (MonadTCState m, ReadTCState m) => m a -> m a restorePostScopeState :: (MonadDebug m, MonadTCState m) => PostScopeState -> m () -- | Measure CPU time for individual phases of the Agda pipeline. module Agda.TypeChecking.Monad.Benchmark -- | Monad with access to benchmarking data. class (Ord BenchPhase m, Functor m, MonadIO m) => MonadBench (m :: Type -> Type) type family BenchPhase (m :: Type -> Type) getBenchmark :: MonadBench m => m (Benchmark (BenchPhase m)) -- | When profile options are set or changed, we need to turn benchmarking -- on or off. updateBenchmarkingStatus :: TCM () -- | Bill a computation to a specific account. Works even if the -- computation is aborted by an exception. billTo :: MonadBench m => Account (BenchPhase m) -> m c -> m c -- | Bill a pure computation to a specific account. billPureTo :: MonadBench m => Account (BenchPhase m) -> c -> m c -- | Bill a CPS function to an account. Can't handle exceptions. billToCPS :: MonadBench m => Account (BenchPhase m) -> ((b -> m c) -> m c) -> (b -> m c) -> m c -- | Resets the account and the timing information. reset :: MonadBench m => m () -- | Prints the accumulated benchmark results. Does nothing if no benchmark -- profiling is enabled. print :: MonadTCM tcm => tcm () module Agda.TypeChecking.DropArgs -- | When making a function projection-like, we drop the first n -- arguments. class DropArgs a dropArgs :: DropArgs a => Int -> a -> a instance Agda.TypeChecking.DropArgs.DropArgs Agda.Syntax.Internal.Clause instance Agda.TypeChecking.DropArgs.DropArgs Agda.TypeChecking.CompiledClause.CompiledClauses instance Agda.TypeChecking.DropArgs.DropArgs Agda.TypeChecking.Monad.Base.FunctionInverse instance Agda.TypeChecking.DropArgs.DropArgs a => Agda.TypeChecking.DropArgs.DropArgs (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.DropArgs.DropArgs Agda.Utils.Permutation.Permutation instance Agda.TypeChecking.DropArgs.DropArgs Agda.TypeChecking.Coverage.SplitTree.SplitTree instance Agda.TypeChecking.DropArgs.DropArgs Agda.Syntax.Internal.Telescope instance Agda.TypeChecking.DropArgs.DropArgs Agda.Syntax.Internal.Term -- | Extract all names and meta-variables from things. module Agda.Syntax.Internal.Names -- | Some or all of the QNames that can be found in the given thing. namesIn :: (NamesIn a, Collection QName m) => a -> m -- | Some or all of the QNames that can be found in the given thing. namesIn' :: (NamesIn a, Monoid m) => (QName -> m) -> a -> m -- | Some or all of the meta-variables that can be found in the given -- thing. metasIn :: (NamesIn a, Collection MetaId m) => a -> m -- | Some or all of the meta-variables that can be found in the given -- thing. metasIn' :: (NamesIn a, Monoid m) => (MetaId -> m) -> a -> m -- | Some or all of the names and meta-variables that can be found in the -- given thing. namesAndMetasIn :: (NamesIn a, Collection QName m1, Collection MetaId m2) => a -> (m1, m2) class NamesIn a -- | Some or all of the names and meta-variables that can be found in the -- given thing. namesAndMetasIn' :: (NamesIn a, Monoid m) => (Either QName MetaId -> m) -> a -> m ($dmnamesAndMetasIn') :: forall m (f :: Type -> Type) b. (NamesIn a, Monoid m, Foldable f, NamesIn b, f b ~ a) => (Either QName MetaId -> m) -> a -> m newtype PSyn PSyn :: PatternSynDefn -> PSyn instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Abs a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Abstract.Name.AmbiguousQName instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Internal.Names.NamesIn GHC.Types.Bool instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.Monad.Base.Builtin a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.CompiledClause.Case a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Treeless.CaseInfo instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Treeless.CaseType instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Clause instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.CompKit instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Treeless.Compiled instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.CompiledClause.CompiledClauses instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.ConHead instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.ConPatternInfo instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.Definition instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.Defn instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.DisplayTerm instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b) => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Dom' a b) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.ExtLamInfo instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.Monad.Base.FunctionInverse' a) instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b) => Agda.Syntax.Internal.Names.NamesIn (Data.HashMap.Internal.HashMap a b) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Level instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn [a] instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Literal.Literal instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Data.Map.Internal.Map k a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Data.Strict.Maybe.Maybe a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Common.MetaId instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.NLPSort instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.NLPType instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.NLPat instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Common.Named n a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Utils.List1.List1 a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.Monad.Base.Open a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Names.PSyn instance Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Abstract.Pattern' a) instance Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Pattern' a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.PlusLevel instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.PrimFun instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Abstract.Name.QName instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.Section instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Data.Set.Internal.Set a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Sort instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Substitution' a) instance Agda.Syntax.Internal.Names.NamesIn Agda.TypeChecking.Monad.Base.System instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Treeless.TAlt instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Treeless.TTerm instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Tele a) instance Agda.Syntax.Internal.Names.NamesIn Agda.Syntax.Internal.Term instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b) => Agda.Syntax.Internal.Names.NamesIn (a, b) instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b, Agda.Syntax.Internal.Names.NamesIn c) => Agda.Syntax.Internal.Names.NamesIn (a, b, c) instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b, Agda.Syntax.Internal.Names.NamesIn c, Agda.Syntax.Internal.Names.NamesIn d) => Agda.Syntax.Internal.Names.NamesIn (a, b, c, d) instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b, Agda.Syntax.Internal.Names.NamesIn c, Agda.Syntax.Internal.Names.NamesIn d, Agda.Syntax.Internal.Names.NamesIn e) => Agda.Syntax.Internal.Names.NamesIn (a, b, c, d, e) instance (Agda.Syntax.Internal.Names.NamesIn a, Agda.Syntax.Internal.Names.NamesIn b, Agda.Syntax.Internal.Names.NamesIn c, Agda.Syntax.Internal.Names.NamesIn d, Agda.Syntax.Internal.Names.NamesIn e, Agda.Syntax.Internal.Names.NamesIn f) => Agda.Syntax.Internal.Names.NamesIn (a, b, c, d, e, f) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.Syntax.Internal.Type' a) instance Agda.Syntax.Internal.Names.NamesIn a => Agda.Syntax.Internal.Names.NamesIn (Agda.TypeChecking.CompiledClause.WithArity a) module Agda.Interaction.Output type OutputForm a b = OutputForm_boot TCErr a b type OutputConstraint a b = OutputConstraint_boot TCErr a b module Agda.TypeChecking.Warnings class (MonadPretty m, MonadError TCErr m) => MonadWarning (m :: Type -> Type) -- | Store a warning and generate highlighting from it. addWarning :: MonadWarning m => Bool -> TCWarning -> m () ($dmaddWarning) :: forall (n :: Type -> Type) (t :: (Type -> Type) -> Type -> Type). (MonadWarning m, MonadWarning n, MonadTrans t, t n ~ m) => Bool -> TCWarning -> m () warning'_ :: MonadWarning m => CallStack -> Warning -> m TCWarning warning_ :: (HasCallStack, MonadWarning m) => Warning -> m TCWarning warning' :: MonadWarning m => CallStack -> Warning -> m () warning :: (HasCallStack, MonadWarning m) => Warning -> m () warnings :: (HasCallStack, MonadWarning m) => List1 Warning -> m () -- | Raise every WARNING_ON_USAGE connected to a name. raiseWarningsOnUsage :: (MonadWarning m, ReadTCState m) => QName -> m () isUnsolvedWarning :: Warning -> Bool isMetaWarning :: Warning -> Bool isMetaTCWarning :: TCWarning -> Bool onlyShowIfUnsolved :: Warning -> Bool -- | Classifying warnings: some are benign, others are (non-fatal) errors data WhichWarnings -- | warnings that will be turned into errors ErrorWarnings :: WhichWarnings -- | all warnings, including errors and benign ones Note: order of -- constructors is important for the derived Ord instance AllWarnings :: WhichWarnings classifyWarning :: Warning -> WhichWarnings -- | Assorted warnings and errors to be displayed to the user data WarningsAndNonFatalErrors tcWarnings :: WarningsAndNonFatalErrors -> Set TCWarning nonFatalErrors :: WarningsAndNonFatalErrors -> Set TCWarning classifyWarnings :: [TCWarning] -> WarningsAndNonFatalErrors instance GHC.Classes.Eq Agda.TypeChecking.Warnings.WhichWarnings instance Agda.TypeChecking.Warnings.MonadWarning m => Agda.TypeChecking.Warnings.MonadWarning (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Warnings.MonadWarning m => Agda.TypeChecking.Warnings.MonadWarning (Control.Monad.Trans.Reader.ReaderT r m) instance Agda.TypeChecking.Warnings.MonadWarning m => Agda.TypeChecking.Warnings.MonadWarning (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.TypeChecking.Warnings.MonadWarning Agda.TypeChecking.Monad.Base.TCM instance (Agda.TypeChecking.Warnings.MonadWarning m, GHC.Internal.Base.Monoid w) => Agda.TypeChecking.Warnings.MonadWarning (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance GHC.Classes.Ord Agda.TypeChecking.Warnings.WhichWarnings module Agda.Interaction.Response type DisplayInfo = DisplayInfo_boot TCErr TCWarning WarningsAndNonFatalErrors type GoalDisplayInfo = GoalDisplayInfo_boot TCErr type Goals = Goals_boot TCErr type Info_Error = Info_Error_boot TCErr TCWarning type Response = Response_boot TCErr TCWarning WarningsAndNonFatalErrors -- | Assorted warnings and errors to be displayed to the user data WarningsAndNonFatalErrors -- | Callback fuction to call when there is a response to give to the -- interactive frontend. -- -- Note that the response is given in pieces and incrementally, so the -- user can have timely response even during long computations. -- -- Typical InteractionOutputCallback functions: -- --
-- freshAbstractName_ = freshAbstractName noFixity' --freshAbstractName_ :: Name -> ScopeM Name -- | Create a fresh abstract qualified name. freshAbstractQName :: Fixity' -> Name -> ScopeM QName freshAbstractQName' :: Name -> ScopeM QName -- | Create a concrete name that is not yet in scope. | NOTE: See -- chooseName in -- Agda.Syntax.Translation.AbstractToConcrete for similar logic. -- | NOTE: See withName in -- Agda.Syntax.Translation.ReflectedToAbstract for similar -- logic. freshConcreteName :: Range -> Int -> String -> ScopeM Name -- | Look up the abstract name referred to by a given concrete name. resolveName :: QName -> ScopeM ResolvedName -- | Look up the abstract name corresponding to a concrete name of a -- certain kind and/or from a given set of names. Sometimes we know -- already that we are dealing with a constructor or pattern synonym -- (e.g. when we have parsed a pattern). Then, we can ignore conflicting -- definitions of that name of a different kind. (See issue 822.) resolveName' :: KindsOfNames -> Maybe (Set1 Name) -> QName -> ScopeM ResolvedName tryResolveName :: (ReadTCState m, HasBuiltins m, MonadError NameResolutionError m) => KindsOfNames -> Maybe (Set1 Name) -> QName -> m ResolvedName -- | Test if a given abstract name can appear with a suffix. Currently only -- true for the names of builtin sorts. canHaveSuffixTest :: HasBuiltins m => m (QName -> Bool) -- | Look up a module in the scope. resolveModule :: QName -> ScopeM AbstractModule -- | Get the fixity of a not yet bound name. getConcreteFixity :: Name -> ScopeM Fixity' -- | Get the polarities of a not yet bound name. getConcretePolarity :: Name -> ScopeM (Maybe PragmaPolarities) -- | Collect the fixity/syntax declarations and polarity pragmas from the -- list of declarations and store them in the scope. computeFixitiesAndPolarities :: DoWarn -> [Declaration] -> ScopeM a -> ScopeM a -- | Get the notation of a name. The name is assumed to be in scope. getNotation :: QName -> Set1 Name -> ScopeM NewNotation -- | Bind a variable. bindVariable :: BindingSource -> Name -> Name -> ScopeM () -- | Temporarily unbind a variable. Used for non-recursive lets. unbindVariable :: Name -> ScopeM a -> ScopeM a -- | Bind a defined name. Must not shadow anything. bindName :: Access -> KindOfName -> Name -> QName -> ScopeM () bindName' :: Access -> KindOfName -> NameMetadata -> Name -> QName -> ScopeM () -- | Bind a name. Returns the TypeError if exists, but does not -- throw it. bindName'' :: Access -> KindOfName -> NameMetadata -> Name -> QName -> ScopeM (Maybe TypeError) -- | Rebind a name. Use with care! Ulf, 2014-06-29: Currently used to -- rebind the name defined by an unquoteDecl, which is a -- QuotableName in the body, but a DefinedName later on. rebindName :: Access -> KindOfName -> Name -> QName -> ScopeM () -- | Bind a module name. bindModule :: Access -> Name -> ModuleName -> ScopeM () -- | Bind a qualified module name. Adds it to the imports field of the -- scope. bindQModule :: Access -> QName -> ModuleName -> ScopeM () -- | Record (ha) that a given record has the specified constructor name. setRecordConstructor :: QName -> (QName, Maybe Induction) -> ScopeM () -- | Get the internal QName for the name of a record constructor. If -- the name does not refer to a record type, Nothing is returned. getRecordConstructor :: ReadTCState m => QName -> m (Maybe (QName, Maybe Induction)) -- | Is this the qualified name which refers to the constructor of an -- anonymous record (like Foo.constructor)? -- -- If so, return the part of the name referring to the record -- (Foo). isRecordConstructor :: QName -> Maybe QName -- | Clear the scope of any no names. stripNoNames :: ScopeM () type WSM = StateT ScopeMemo ScopeM data ScopeMemo ScopeMemo :: Ren QName -> Map ModuleName (ModuleName, Bool) -> ScopeMemo [memoNames] :: ScopeMemo -> Ren QName -- | Bool: did we copy recursively? We need to track this because we don't -- copy recursively when creating new modules for reexported functions -- (issue1985), but we might need to copy recursively later. [memoModules] :: ScopeMemo -> Map ModuleName (ModuleName, Bool) memoToScopeInfo :: ScopeMemo -> ScopeCopyInfo -- | Mark a name as being a copy in the TC state. copyName :: QName -> QName -> ScopeM () -- | Create a new scope with the given name from an old scope. Renames -- public names in the old scope to match the new name and returns the -- renamings. copyScope :: QName -> ModuleName -> Scope -> ScopeM (Scope, ScopeCopyInfo) -- | Warn about useless fixity declarations in renaming -- directives. Monadic for the sake of error reporting. checkNoFixityInRenamingModule :: [Renaming] -> ScopeM () -- | Check that an import directive doesn't contain repeated names. verifyImportDirective :: [ImportedName] -> HidingDirective -> RenamingDirective -> ScopeM () -- | Apply an import directive and check that all the names mentioned -- actually exist. -- -- Monadic for the sake of error reporting. applyImportDirectiveM :: QName -> ImportDirective -> Scope -> ScopeM (ImportDirective, Scope) -- | Translation of ImportDirective. mapImportDir :: (Ord n1, Ord m1) => [ImportedName' (n1, n2) (m1, m2)] -> [ImportedName' (n1, n2) (m1, m2)] -> ImportDirective' n1 m1 -> ImportDirective' n2 m2 -- | A finite map for ImportedNames. data ImportedNameMap n1 n2 m1 m2 ImportedNameMap :: Map n1 n2 -> Map m1 m2 -> ImportedNameMap n1 n2 m1 m2 [inameMap] :: ImportedNameMap n1 n2 m1 m2 -> Map n1 n2 [imoduleMap] :: ImportedNameMap n1 n2 m1 m2 -> Map m1 m2 -- | Create a ImportedNameMap. importedNameMapFromList :: (Ord n1, Ord m1) => [ImportedName' (n1, n2) (m1, m2)] -> ImportedNameMap n1 n2 m1 m2 -- | Apply a ImportedNameMap. lookupImportedName :: (Ord n1, Ord m1) => ImportedNameMap n1 n2 m1 m2 -> ImportedName' n1 m1 -> ImportedName' n2 m2 -- | Translation of Renaming. mapRenaming :: (Ord n1, Ord m1) => ImportedNameMap n1 n2 m1 m2 -> ImportedNameMap n1 n2 m1 m2 -> Renaming' n1 m1 -> Renaming' n2 m2 data OpenKind LetOpenModule :: OpenKind TopOpenModule :: OpenKind noGeneralizedVarsIfLetOpen :: OpenKind -> Scope -> Scope -- | Open a module. openModule_ :: OpenKind -> QName -> ImportDirective -> ScopeM ImportDirective -- | Open a module, possibly given an already resolved module name. openModule :: OpenKind -> Maybe ModuleName -> QName -> ImportDirective -> ScopeM ImportDirective instance Agda.Syntax.Concrete.Fixity.MonadFixityError Agda.Syntax.Scope.Monad.ScopeM -- | Flattened scopes. module Agda.Syntax.Scope.Flat -- | Flattened scopes. data FlatScope -- | Compute a flattened scope. Only include unqualified names or names -- qualified by modules in the first argument. flattenScope :: [[Name]] -> ScopeInfo -> FlatScope getDefinedNames :: KindsOfNames -> FlatScope -> [List1 NewNotation] -- | Compute all names (first component) and operators/notations (second -- component) in scope. -- -- For IsPattern, only constructor-like names are returned. localNames :: ExprKind -> Maybe QName -> FlatScope -> ScopeM ([QName], [NewNotation]) instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Scope.Flat.FlatScope -- | The parser doesn't know about operators and parses everything as -- normal function application. This module contains the functions that -- parses the operators properly. For a stand-alone implementation of -- this see src/prototyping/mixfix/old. -- -- It also contains the function that puts parenthesis back given the -- precedence of the context. module Agda.Syntax.Concrete.Operators -- | Parse a list of expressions (typically from a RawApp) into an -- application. parseApplication :: List2 Expr -> ScopeM Expr -- | Parse the arguments of a raw application with known head. parseArguments :: Expr -> [Expr] -> ScopeM [NamedArg Expr] -- | Parses a left-hand side, and makes sure that it defined the expected -- name. parseLHS :: DisplayLHS -> QName -> Pattern -> ScopeM LHSCore -- | Parses a pattern. parsePattern :: Pattern -> ScopeM Pattern parsePatternSyn :: Pattern -> ScopeM Pattern instance Agda.Syntax.Common.Pretty.Pretty Agda.Syntax.Concrete.Operators.ParseLHS -- | Lenses for CommandLineOptions and PragmaOptions. -- -- Add as needed. -- -- Nothing smart happening here. module Agda.Interaction.Options.Lenses modifyPragmaOptions :: MonadTCState m => (PragmaOptions -> PragmaOptions) -> m () class LensVerbosity a getVerbosity :: LensVerbosity a => a -> Verbosity setVerbosity :: LensVerbosity a => Verbosity -> a -> a mapVerbosity :: LensVerbosity a => (Verbosity -> Verbosity) -> a -> a modifyVerbosity :: MonadTCState m => (Verbosity -> Verbosity) -> m () putVerbosity :: MonadTCState m => Verbosity -> m () class LensCommandLineOptions a getCommandLineOptions :: LensCommandLineOptions a => a -> CommandLineOptions setCommandLineOptions :: LensCommandLineOptions a => CommandLineOptions -> a -> a mapCommandLineOptions :: LensCommandLineOptions a => (CommandLineOptions -> CommandLineOptions) -> a -> a modifyCommandLineOptions :: MonadTCState m => (CommandLineOptions -> CommandLineOptions) -> m () type SafeMode = Bool class LensSafeMode a getSafeMode :: LensSafeMode a => a -> SafeMode setSafeMode :: LensSafeMode a => SafeMode -> a -> a mapSafeMode :: LensSafeMode a => (SafeMode -> SafeMode) -> a -> a modifySafeMode :: MonadTCState m => (SafeMode -> SafeMode) -> m () putSafeMode :: MonadTCState m => SafeMode -> m () class LensIncludePaths a getIncludePaths :: LensIncludePaths a => a -> [FilePath] setIncludePaths :: LensIncludePaths a => [FilePath] -> a -> a mapIncludePaths :: LensIncludePaths a => ([FilePath] -> [FilePath]) -> a -> a getAbsoluteIncludePaths :: LensIncludePaths a => a -> [AbsolutePath] setAbsoluteIncludePaths :: LensIncludePaths a => [AbsolutePath] -> a -> a mapAbsoluteIncludePaths :: LensIncludePaths a => ([AbsolutePath] -> [AbsolutePath]) -> a -> a modifyIncludePaths :: MonadTCState m => ([FilePath] -> [FilePath]) -> m () putIncludePaths :: MonadTCState m => [FilePath] -> m () modifyAbsoluteIncludePaths :: MonadTCState m => ([AbsolutePath] -> [AbsolutePath]) -> m () putAbsoluteIncludePaths :: MonadTCState m => [AbsolutePath] -> m () type PersistentVerbosity = Verbosity class LensPersistentVerbosity a getPersistentVerbosity :: LensPersistentVerbosity a => a -> PersistentVerbosity setPersistentVerbosity :: LensPersistentVerbosity a => PersistentVerbosity -> a -> a mapPersistentVerbosity :: LensPersistentVerbosity a => (PersistentVerbosity -> PersistentVerbosity) -> a -> a modifyPersistentVerbosity :: MonadTCState m => (PersistentVerbosity -> PersistentVerbosity) -> m () putPersistentVerbosity :: MonadTCState m => PersistentVerbosity -> m () instance Agda.Interaction.Options.Lenses.LensCommandLineOptions Agda.TypeChecking.Monad.Base.PersistentTCState instance Agda.Interaction.Options.Lenses.LensCommandLineOptions Agda.TypeChecking.Monad.Base.TCState instance Agda.Interaction.Options.Lenses.LensIncludePaths Agda.Interaction.Options.Types.CommandLineOptions instance Agda.Interaction.Options.Lenses.LensIncludePaths Agda.TypeChecking.Monad.Base.PersistentTCState instance Agda.Interaction.Options.Lenses.LensIncludePaths Agda.TypeChecking.Monad.Base.TCState instance Agda.Interaction.Options.Lenses.LensPersistentVerbosity Agda.Interaction.Options.Types.CommandLineOptions instance Agda.Interaction.Options.Lenses.LensPersistentVerbosity Agda.TypeChecking.Monad.Base.PersistentTCState instance Agda.Interaction.Options.Lenses.LensPersistentVerbosity Agda.Interaction.Options.Types.PragmaOptions instance Agda.Interaction.Options.Lenses.LensPersistentVerbosity Agda.TypeChecking.Monad.Base.TCState instance Agda.Interaction.Options.Lenses.LensSafeMode Agda.Interaction.Options.Types.CommandLineOptions instance Agda.Interaction.Options.Lenses.LensSafeMode Agda.TypeChecking.Monad.Base.PersistentTCState instance Agda.Interaction.Options.Lenses.LensSafeMode Agda.Interaction.Options.Types.PragmaOptions instance Agda.Interaction.Options.Lenses.LensSafeMode Agda.TypeChecking.Monad.Base.TCState instance Agda.Interaction.Options.Lenses.LensVerbosity Agda.Interaction.Options.Types.PragmaOptions instance Agda.Interaction.Options.Lenses.LensVerbosity Agda.TypeChecking.Monad.Base.TCState module Agda.Interaction.Command type CommandM = CommandM' TCM -- | Restore both TCState and CommandState. localStateCommandM :: CommandM a -> CommandM a -- | Restore TCState, do not touch CommandState. liftLocalState :: TCM a -> CommandM a -- | Build an opposite action to lift for state monads. revLift :: MonadState st m => (forall c. () => m c -> st -> k (c, st)) -> (forall b. () => k b -> m b) -> (forall x. () => (m a -> k x) -> k x) -> m a revLiftTC :: MonadTCState m => (forall c. () => m c -> TCState -> k (c, TCState)) -> (forall b. () => k b -> m b) -> (forall x. () => (m a -> k x) -> k x) -> m a -- | Functions which map between module names and file names. -- -- Note that file name lookups are cached in the TCState. The code -- assumes that no Agda source files are added or removed from the -- include directories while the code is being type checked. module Agda.Interaction.FindFile -- | SourceFiles must exist and be registered in our file -- dictionary. newtype SourceFile SourceFile :: FileId -> SourceFile [srcFileId] :: SourceFile -> FileId -- | File must exist. data InterfaceFile -- | Converts an Agda file name to the corresponding interface file name. -- Note that we do not guarantee that the file exists. toIFile :: HasCallStack => SourceFile -> TCM AbsolutePath -- | Makes an interface file from an AbsolutePath candidate. If the file -- does not exist, then fail by returning Nothing. mkInterfaceFile :: AbsolutePath -> IO (Maybe InterfaceFile) -- | Errors which can arise when trying to find a source file. -- -- Invariant: All paths are absolute. data FindError -- | The file was not found. It should have had one of the given file -- names. NotFound :: [AbsolutePath] -> FindError -- | Several matching files were found. Ambiguous :: List2 AbsolutePath -> FindError -- | Given the module name which the error applies to this function -- converts a FindError to a TypeError. findErrorToTypeError :: TopLevelModuleName -> FindError -> TypeError -- | Finds the source file corresponding to a given top-level module name. -- The returned paths are absolute. -- -- Raises an error if the file cannot be found. findFile :: TopLevelModuleName -> TCM SourceFile -- | Tries to find the source file corresponding to a given top-level -- module name. The returned paths are absolute. -- -- SIDE EFFECT: Updates stModuleToSource. findFile' :: TopLevelModuleName -> TCM (Either FindError SourceFile) -- | A variant of findFile' which manipulates an extra -- ModuleToSourceId findFile'_ :: List1 AbsolutePath -> TopLevelModuleName -> StateT ModuleToSourceId TCM (Either FindError SourceFile) -- | A variant of findFile' which does not require TCM. findFile'' :: List1 AbsolutePath -> TopLevelModuleName -> StateT ModuleToSource IO (Either FindError SourceFile) -- | Finds the interface file corresponding to a given top-level module -- file. The returned paths are absolute. -- -- Raises Nothing if the interface file cannot be found. findInterfaceFile' :: HasCallStack => SourceFile -> TCM (Maybe InterfaceFile) -- | Finds the interface file corresponding to a given top-level module -- file. The returned paths are absolute. -- -- Raises an error if the source file cannot be found, and returns -- Nothing if the source file can be found but not the interface -- file. findInterfaceFile :: HasCallStack => TopLevelModuleName -> TCM (Maybe InterfaceFile) -- | Ensures that the module name matches the file name. The file -- corresponding to the module name (according to the include path) has -- to be the same as the given file name. checkModuleName :: TopLevelModuleName -> SourceFile -> Maybe TopLevelModuleName -> TCM () rootNameModule :: AbsolutePath -> String replaceModuleExtension :: String -> AbsolutePath -> AbsolutePath -- | Remove an existing Agda file extension from a file path. dropAgdaExtension :: FilePath -> FilePath -- | Check if a file path has an Agda extension. hasAgdaExtension :: FilePath -> Bool -- | Remove an Agda file extension from a filepath, if possible. stripAgdaExtension :: FilePath -> Maybe FilePath instance Agda.Syntax.Common.Pretty.Pretty Agda.Interaction.FindFile.InterfaceFile instance GHC.Internal.Show.Show Agda.Interaction.FindFile.FindError module Agda.TypeChecking.Serialise.Instances.Common -- | Ranges that should be serialised properly. newtype SerialisedRange SerialisedRange :: Range -> SerialisedRange [underlyingRange] :: SerialisedRange -> Range instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.AmbiguousQName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Annotation instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ArgInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Associativity instance (Agda.TypeChecking.Serialise.Base.EmbPrj k, Agda.TypeChecking.Serialise.Base.EmbPrj v, Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.BiMap.Tag v)) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.BiMap.BiMap k v) instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Bool instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.BoundVariablePosition instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Builtin.BuiltinId instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Stack.Types.CallStack instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Catchall instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Char instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Cohesion instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ConOrigin instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ConstructorOrPatternSynonym instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Cubical instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Double instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (GHC.Internal.Data.Either.Either a b) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ExpandedEllipsis instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.FileType instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Fixity instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Fixity' instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.FixityLevel instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.FreeVariables instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.HasEta' a) instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Agda.TypeChecking.Serialise.Base.EmbPrj k, Agda.TypeChecking.Serialise.Base.EmbPrj v) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.HashMap.Internal.HashMap k v) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Hiding instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.ImportedName' a b) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.Impossible.Impossible instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.Induction instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Int instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Int.Int32 instance Agda.TypeChecking.Serialise.Base.EmbPrj Data.IntSet.Internal.IntSet instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Num.Integer.Integer instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Position.Interval' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.IsAbstract instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.IsInstance instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.IsOpaque instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.KeywordRange.KwRange instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Language instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Base.String instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj [a] instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.List2.List2 a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Literal.Literal instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Lock instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Map.Internal.Map a b) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Strict.Maybe.Maybe a) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ModalPolarity instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Modality instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.ModuleName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.Set1.Set1 a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.Name instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.Name instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.NameId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.NameInScope instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.NamePart instance (Agda.TypeChecking.Serialise.Base.EmbPrj s, Agda.TypeChecking.Serialise.Base.EmbPrj t) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Named s t) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.List1.List1 a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.NotationPart instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.OpaqueId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Library.Base.OptionsPragma instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Origin instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.OriginIrrelevant instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.OriginRelevant instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.OriginShapeIrrelevant instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.OverlapMode instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Strict.Tuple.Pair a b) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.PatternOrCopattern instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.PolarityModality instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Position.Position' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Builtin.PrimitiveId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ProblemId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ProjOrigin instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Q0Origin instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Q1Origin instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.QName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Quantity instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.QωOrigin instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.Range instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.RangeFile instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Ranged a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.RecordDirective instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.RecordDirectives' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Relevance instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Sequence.Internal.Seq a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Serialise.Instances.Common.SerialisedRange instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Set.Internal.Set a) instance GHC.Internal.Data.Typeable.Internal.Typeable a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.SmallSet.SmallSet a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Builtin.SomeBuiltin instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Stack.Types.SrcLoc instance Agda.TypeChecking.Serialise.Base.EmbPrj Data.Text.Internal.Text instance Agda.TypeChecking.Serialise.Base.EmbPrj Data.Text.Internal.Lazy.Text instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.TopLevelModuleName.TopLevelModuleName instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.Trie.Trie a b) instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (a, b) instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b, Agda.TypeChecking.Serialise.Base.EmbPrj c) => Agda.TypeChecking.Serialise.Base.EmbPrj (a, b, c) instance Agda.TypeChecking.Serialise.Base.EmbPrj () instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Base.Void instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, GHC.Internal.Data.Typeable.Internal.Typeable b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.WithDefault.WithDefault' a b) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.WithHiding a) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.WithOrigin a) instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Word.Word32 instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Internal.Word.Word64 module Agda.TypeChecking.Serialise.Instances.Highlighting instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.Aspect instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.Aspects instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.DefinitionSite instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.NameKind instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.OtherAspect instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Range.Range instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.RangeMap.RangeMap a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Aspect.TokenBased module Agda.TypeChecking.Serialise.Instances.Abstract data AbsNameWithFixity AbsNameWithFixity :: Fixity -> QName -> KindOfName -> WhyInScope -> NameMetadata -> AbsNameWithFixity toAbsName :: AbsNameWithFixity -> AbstractName fromAbsName :: AbstractName -> AbsNameWithFixity instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Serialise.Instances.Abstract.AbsNameWithFixity instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.AbstractModule instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.AbstractName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Access instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.BindName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.BindingSource instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Info.ConPatInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Info.ConPatLazy instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.DataOrRecordModule instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.KindOfName instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.LocalVar instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.NameMetadata instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.NameOrModule instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.NameSpace instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.NameSpaceId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.ParenPreference instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Abstract.Pattern' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Pattern instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.Precedence instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.Scope instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.ScopeInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.Suffix instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.WhyInScope module Agda.TypeChecking.Monad.Options -- | Sets the pragma options. Checks for unsafe combinations. setPragmaOptions :: PragmaOptions -> TCM () -- | Check that that you don't turn on inconsistent options. For instance, -- if --a implies --b and you have both --a and --no-b. Only warn for -- things that have changed compared to the old options. checkPragmaOptionConsistency :: PragmaOptions -> PragmaOptions -> TCM () -- | Sets the command line options (both persistent and pragma options are -- updated). -- -- Relative include directories are made absolute with respect to the -- current working directory. If the include directories have changed -- then the state is reset (partly, see setIncludeDirs). -- -- An empty list of relative include directories (Left -- []) is interpreted as ["."]. setCommandLineOptions :: CommandLineOptions -> TCM () setCommandLineOptions' :: AbsolutePath -> CommandLineOptions -> TCM () libToTCM :: LibM a -> TCM a -- | Returns the library files for a given file. -- -- Nothing is returned if optUseLibs is False. -- -- An error is raised if optUseLibs is True and a library -- file is located too far down the directory hierarchy (see -- checkLibraryFileNotTooFarDown). getAgdaLibFiles :: AbsolutePath -> TopLevelModuleName -> TCM [AgdaLibFile] -- | Returns potential library files for a file without a known top-level -- module name. -- -- Once the top-level module name is known one can use -- checkLibraryFileNotTooFarDown to check that the potential -- library files were not located too far down the directory hierarchy. -- -- Nothing is returned if optUseLibs is False. getAgdaLibFilesWithoutTopLevelModuleName :: AbsolutePath -> TCM [AgdaLibFile] -- | Checks that a library file for the module A.B.C (say) in the -- directory dirAB is located at least two directories -- above the file (not in dir/A or dirAB). checkLibraryFileNotTooFarDown :: TopLevelModuleName -> AgdaLibFile -> TCM () -- | Returns the library options for a given file. getLibraryOptions :: AbsolutePath -> TopLevelModuleName -> TCM [OptionsPragma] setLibraryPaths :: AbsolutePath -> CommandLineOptions -> TCM CommandLineOptions setLibraryIncludes :: CommandLineOptions -> TCM CommandLineOptions addDefaultLibraries :: AbsolutePath -> CommandLineOptions -> TCM CommandLineOptions addTrustedExecutables :: CommandLineOptions -> TCM CommandLineOptions -- | Set pragma options without checking for consistency. setOptionsFromPragma :: OptionsPragma -> TCM () -- | Set pragma options and check them for consistency. checkAndSetOptionsFromPragma :: OptionsPragma -> TCM () setOptionsFromPragma' :: Bool -> OptionsPragma -> TCM () -- | Disable display forms. enableDisplayForms :: MonadTCEnv m => m a -> m a -- | Disable display forms. disableDisplayForms :: MonadTCEnv m => m a -> m a -- | Check if display forms are enabled. displayFormsEnabled :: MonadTCEnv m => m Bool -- | Gets the include directories. -- -- Precondition: optAbsoluteIncludePaths must be nonempty (i.e. -- setCommandLineOptions must have run). getIncludeDirs :: HasOptions m => m (List1 AbsolutePath) -- | Makes the given directories absolute and stores them as include -- directories. -- -- If the include directories change, then the state is reset -- (completely, except for the include directories and some other -- things). -- -- An empty list is interpreted as ["."]. setIncludeDirs :: [FilePath] -> AbsolutePath -> TCM () isPropEnabled :: HasOptions m => m Bool isLevelUniverseEnabled :: HasOptions m => m Bool isTwoLevelEnabled :: HasOptions m => m Bool hasUniversePolymorphism :: HasOptions m => m Bool showImplicitArguments :: HasOptions m => m Bool showGeneralizedArguments :: HasOptions m => m Bool showIrrelevantArguments :: HasOptions m => m Bool showIdentitySubstitutions :: HasOptions m => m Bool -- | Switch on printing of implicit and irrelevant arguments. E.g. for -- reification in with-function generation. -- -- Restores all PragmaOptions after completion. Thus, do not -- attempt to make persistent PragmaOptions changes in a -- withShowAllArguments bracket. withShowAllArguments :: ReadTCState m => m a -> m a withShowAllArguments' :: ReadTCState m => Bool -> m a -> m a withoutPrintingGeneralization :: ReadTCState m => m a -> m a -- | Change PragmaOptions for a computation and restore afterwards. withPragmaOptions :: ReadTCState m => (PragmaOptions -> PragmaOptions) -> m a -> m a positivityCheckEnabled :: HasOptions m => m Bool typeInType :: HasOptions m => m Bool etaEnabled :: HasOptions m => m Bool maxInstanceSearchDepth :: HasOptions m => m Int maxInversionDepth :: HasOptions m => m Int -- | Returns the Language currently in effect. getLanguage :: HasOptions m => m Language module Agda.TypeChecking.Monad.Signature -- | If the first argument is Erased something, then hard -- compile-time mode is enabled when the continuation is run. setHardCompileTimeModeIfErased :: Erased -> TCM a -> TCM a -- | If the quantity is "erased", then hard compile-time mode is enabled -- when the continuation is run. -- -- Precondition: The quantity must not be Quantity1 -- something. setHardCompileTimeModeIfErased' :: LensQuantity q => q -> TCM a -> TCM a -- | Use run-time mode in the continuation unless the current mode is the -- hard compile-time mode. setRunTimeModeUnlessInHardCompileTimeMode :: TCM a -> TCM a -- | Use hard compile-time mode in the continuation if the first argument -- is Erased something. Use run-time mode if the first -- argument is NotErased something and the current mode -- is not hard compile-time mode. setModeUnlessInHardCompileTimeMode :: Erased -> TCM a -> TCM a -- | Warn if the user explicitly wrote @ω or @plenty but -- the current mode is the hard compile-time mode. warnForPlentyInHardCompileTimeMode :: Erased -> TCM () -- | Add a constant to the signature. Lifts the definition to top level. addConstant :: QName -> Definition -> TCM () -- | A combination of addConstant and defaultDefn. The -- Language does not need to be supplied. addConstant' :: QName -> ArgInfo -> Type -> Defn -> TCM () -- | Set termination info of a defined function symbol. setTerminates :: MonadTCState m => QName -> Bool -> m () -- | Set CompiledClauses of a defined function symbol. setCompiledClauses :: QName -> CompiledClauses -> TCM () -- | Set SplitTree of a defined function symbol. setSplitTree :: QName -> SplitTree -> TCM () -- | Modify the clauses of a function. modifyFunClauses :: QName -> ([Clause] -> [Clause]) -> TCM () -- | Lifts clauses to the top-level and adds them to definition. Also -- adjusts the funCopatternLHS field if necessary. addClauses :: (MonadConstraint m, MonadTCState m) => QName -> [Clause] -> m () mkPragma :: String -> TCM CompilerPragma -- | Add a compiler pragma `{-# COMPILE backend name -- text #-}` addPragma :: BackendName -> QName -> String -> TCM () getUniqueCompilerPragma :: BackendName -> QName -> TCM (Maybe CompilerPragma) setFunctionFlag :: FunctionFlag -> Bool -> QName -> TCM () markStatic :: QName -> TCM () markInline :: Bool -> QName -> TCM () markInjective :: QName -> TCM () markFirstOrder :: QName -> TCM () unionSignatures :: [Signature] -> Signature -- | Add a section to the signature. -- -- The current context will be stored as the cumulative module parameters -- for this section. addSection :: ModuleName -> TCM () -- | Sets the checkpoint for the given module to the current checkpoint. setModuleCheckpoint :: ModuleName -> TCM () -- | Get a section. -- -- Why Maybe? The reason is that we look up all prefixes of a module to -- compute number of parameters, and for hierarchical top-level modules, -- A.B.C say, A and A.B do not exist. getSection :: (Functor m, ReadTCState m) => ModuleName -> m (Maybe Section) -- | Lookup a section telescope. -- -- If it doesn't exist, like in hierarchical top-level modules, the -- section telescope is empty. lookupSection :: (Functor m, ReadTCState m) => ModuleName -> m Telescope -- | Add display forms for a name f copied by a module -- application. Essentially if f can reduce to -- --
-- λ xs → A.B.C.f vs ---- -- by unfolding module application copies (defCopy), then we add a -- display form -- --
-- A.B.C.f vs ==> f xs --addDisplayForms :: QName -> TCM () -- | Module application (followed by module parameter abstraction). applySection :: ModuleName -> Telescope -> ModuleName -> Args -> ScopeCopyInfo -> TCM () applySection' :: ModuleName -> Telescope -> ModuleName -> Args -> ScopeCopyInfo -> TCM () -- | Add a display form to a definition (could be in this or imported -- signature). addDisplayForm :: QName -> DisplayForm -> TCM () isLocal :: ReadTCState m => QName -> m Bool getDisplayForms :: (HasConstInfo m, ReadTCState m) => QName -> m [LocalDisplayForm] hasDisplayForms :: (HasConstInfo m, ReadTCState m) => QName -> m Bool -- | Find all names used (recursively) by display forms of a given name. class ChaseDisplayForms a chaseDisplayForms :: ChaseDisplayForms a => a -> Set QName -> TCM (Set QName) canonicalName :: HasConstInfo m => QName -> m QName sameDef :: HasConstInfo m => QName -> QName -> m (Maybe QName) -- | Does the given constructor come from a single-constructor type? -- -- Precondition: The name has to refer to a constructor. singleConstructorType :: QName -> TCM Bool -- | Signature lookup errors. data SigError -- | The name is not in the signature; default error message. SigUnknown :: String -> SigError -- | The name is not available, since it is abstract. SigAbstract :: SigError -- | The name is not available because it was defined in Cubical Agda, but -- the current language is Erased Cubical Agda, and --erasure is -- not active. SigCubicalNotErasure :: SigError -- | Generates a string error message corresponding to -- SigCubicalNotErasure for a given QName. notSoPrettySigCubicalNotErasure :: QName -> String -- | Generates an error message corresponding to -- SigCubicalNotErasure for a given QName. prettySigCubicalNotErasure :: MonadPretty m => QName -> m Doc -- | An eliminator for SigError. All constructors except for -- SigAbstract are assumed to be impossible. sigError :: (HasCallStack, MonadDebug m) => QName -> m a -> SigError -> m a class (Functor m, Applicative m, HasOptions m, MonadDebug m, MonadTCEnv m) => HasConstInfo (m :: Type -> Type) -- | Lookup the definition of a name. The result is a closed thing, all -- free variables have been abstracted over. getConstInfo :: HasConstInfo m => QName -> m Definition -- | Version that reports exceptions: getConstInfo' :: HasConstInfo m => QName -> m (Either SigError Definition) ($dmgetConstInfo') :: forall (n :: Type -> Type) (t :: (Type -> Type) -> Type -> Type). (HasConstInfo m, HasConstInfo n, MonadTrans t, m ~ t n) => QName -> m (Either SigError Definition) -- | Lookup the rewrite rules with the given head symbol. getRewriteRulesFor :: HasConstInfo m => QName -> m RewriteRules ($dmgetRewriteRulesFor) :: forall (n :: Type -> Type) (t :: (Type -> Type) -> Type -> Type). (HasConstInfo m, HasConstInfo n, MonadTrans t, m ~ t n) => QName -> m RewriteRules -- | The computation getConstInfo sometimes tweaks the returned -- Definition, depending on the current Language and the -- Language of the Definition. This variant of -- getConstInfo does not perform any tweaks. getOriginalConstInfo :: (ReadTCState m, HasConstInfo m) => QName -> m Definition defaultGetRewriteRulesFor :: (ReadTCState m, MonadTCEnv m) => QName -> m RewriteRules -- | Get the original name of the projection (the current one could be from -- a module application). getOriginalProjection :: HasConstInfo m => QName -> m QName defaultGetConstInfo :: (HasOptions m, MonadDebug m, MonadTCEnv m) => TCState -> TCEnv -> QName -> m (Either SigError Definition) getConInfo :: HasConstInfo m => ConHead -> m Definition -- | Look up the polarity of a definition. getPolarity :: HasConstInfo m => QName -> m [Polarity] -- | Look up polarity of a definition and compose with polarity represented -- by Comparison. getPolarity' :: HasConstInfo m => Comparison -> QName -> m [Polarity] -- | Set the polarity of a definition. setPolarity :: (MonadTCState m, MonadDebug m) => QName -> [Polarity] -> m () -- | Look up the forced arguments of a definition. getForcedArgs :: HasConstInfo m => QName -> m [IsForced] -- | Returns the occurences given explicitely as polarity annotations in -- the function type getOccurrencesFromType :: Type -> TCM [Occurrence] -- | Get argument occurrence info for argument i of definition -- d (never fails). getArgOccurrence :: QName -> Nat -> TCM Occurrence -- | Sets the defArgOccurrences for the given identifier (which -- should already exist in the signature). setArgOccurrences :: MonadTCState m => QName -> [Occurrence] -> m () modifyArgOccurrences :: MonadTCState m => QName -> ([Occurrence] -> [Occurrence]) -> m () setTreeless :: QName -> TTerm -> TCM () setCompiledArgUse :: QName -> [ArgUsage] -> TCM () getCompiled :: HasConstInfo m => QName -> m (Maybe Compiled) -- | Returns a list of length conArity. If no erasure analysis has -- been performed yet, this will be a list of Falses. getErasedConArgs :: HasConstInfo m => QName -> m [Bool] setErasedConArgs :: QName -> [Bool] -> TCM () getTreeless :: HasConstInfo m => QName -> m (Maybe TTerm) getCompiledArgUse :: HasConstInfo m => QName -> m (Maybe [ArgUsage]) -- | add data constructors to a datatype addDataCons :: QName -> [QName] -> TCM () -- | Get the mutually recursive identifiers of a symbol from the signature. getMutual :: QName -> TCM (Maybe [QName]) -- | Get the mutually recursive identifiers from a Definition. getMutual_ :: Defn -> Maybe [QName] -- | Set the mutually recursive identifiers. -- -- TODO: This produces data of quadratic size (which has to be processed -- upon serialization). Presumably qs is usually short, but in some cases -- (for instance for generated code) it may be long. It would be better -- to assign a unique identifier to each SCC, and store the names -- separately. setMutual :: QName -> [QName] -> TCM () -- | Check whether two definitions are mutually recursive. mutuallyRecursive :: QName -> QName -> TCM Bool -- | A functiondatarecord definition is nonRecursive if it is not -- even mutually recursive with itself. definitelyNonRecursive_ :: Defn -> Bool -- | Get the number of parameters to the current module. getCurrentModuleFreeVars :: TCM Nat getDefModule :: HasConstInfo m => QName -> m (Either SigError ModuleName) -- | Compute the number of free variables of a defined name. This is the -- sum of number of parameters shared with the current module and the -- number of anonymous variables (if the name comes from a let-bound -- module). getDefFreeVars :: (Functor m, Applicative m, ReadTCState m, MonadTCEnv m) => QName -> m Nat freeVarsToApply :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadTCEnv m, MonadDebug m) => QName -> m Args getModuleFreeVars :: (Functor m, Applicative m, MonadTCEnv m, ReadTCState m) => ModuleName -> m Nat -- | Compute the context variables to apply a definition to. -- -- We have to insert the module telescope of the common prefix of the -- current module and the module where the definition comes from. -- (Properly raised to the current context.) -- -- Example: module M₁ Γ where module M₁ Δ where f = ... module M₃ Θ -- where ... M₁.M₂.f [insert Γ raised by Θ] moduleParamsToApply :: (Functor m, Applicative m, HasOptions m, MonadTCEnv m, ReadTCState m, MonadDebug m) => ModuleName -> m Args -- | Unless all variables in the context are module parameters, create a -- fresh module to capture the non-module parameters. Used when unquoting -- to make sure generated definitions work properly. inFreshModuleIfFreeParams :: TCM a -> TCM a -- | Instantiate a closed definition with the correct part of the current -- context. instantiateDef :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadTCEnv m, MonadDebug m) => Definition -> m Definition instantiateRewriteRule :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadTCEnv m, MonadDebug m) => RewriteRule -> m RewriteRule instantiateRewriteRules :: (Functor m, HasConstInfo m, HasOptions m, ReadTCState m, MonadTCEnv m, MonadDebug m) => RewriteRules -> m RewriteRules -- | Return the abstract view of a definition, regardless of whether -- the definition would be treated abstractly. alwaysMakeAbstract :: Definition -> Maybe Definition -- | Enter abstract mode. Abstract definition in the current module are -- transparent. inAbstractMode :: MonadTCEnv m => m a -> m a -- | Not in abstract mode. All abstract definitions are opaque. inConcreteMode :: MonadTCEnv m => m a -> m a -- | Ignore abstract mode. All abstract definitions are transparent. ignoreAbstractMode :: MonadTCEnv m => m a -> m a -- | Go under the given opaque block. The unfolding set will turn opaque -- definitions transparent. underOpaqueId :: MonadTCEnv m => OpaqueId -> m a -> m a -- | Outside of any opaque blocks. notUnderOpaque :: MonadTCEnv m => m a -> m a -- | Enter the reducibility environment associated with a definition: The -- environment will have the same concreteness as the name, and we will -- be in the opaque block enclosing the name, if any. inConcreteOrAbstractMode :: (MonadTCEnv m, HasConstInfo m) => QName -> (Definition -> m a) -> m a -- | Get type of a constant, instantiated to the current context. typeOfConst :: (HasConstInfo m, ReadTCState m) => QName -> m Type -- | Get relevance of a constant. relOfConst :: HasConstInfo m => QName -> m Relevance -- | Get modality of a constant. modalityOfConst :: HasConstInfo m => QName -> m Modality -- | The number of dropped parameters for a definition. 0 except for -- projection(-like) functions and constructors. droppedPars :: Definition -> Int -- | Is it the name of a record projection? isProjection :: HasConstInfo m => QName -> m (Maybe Projection) isProjection_ :: Defn -> Maybe Projection -- | Is it the name of a non-irrelevant record projection? isRelevantProjection :: HasConstInfo m => QName -> m (Maybe Projection) isRelevantProjection_ :: Definition -> Maybe Projection -- | Is it a function marked STATIC? isStaticFun :: Defn -> Bool -- | Is it a function marked INLINE? isInlineFun :: Defn -> Bool -- | Returns True if we are dealing with a proper projection, -- i.e., not a projection-like function nor a record field value -- (projection applied to argument). isProperProjection :: Defn -> Bool -- | Number of dropped initial arguments of a projection(-like) function. projectionArgs :: Definition -> Int -- | Check whether a definition uses copatterns. usesCopatterns :: (HasConstInfo m, HasBuiltins m) => QName -> m Bool -- | Apply a function f to its first argument, producing the -- proper postfix projection if f is a projection which is not -- irrelevant. applyDef :: HasConstInfo m => ProjOrigin -> QName -> Arg Term -> m Term instance Agda.TypeChecking.Monad.Signature.ChaseDisplayForms Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.TypeChecking.Monad.Signature.ChaseDisplayForms Agda.TypeChecking.Monad.Base.DisplayTerm instance Agda.TypeChecking.Monad.Signature.ChaseDisplayForms a => Agda.TypeChecking.Monad.Signature.ChaseDisplayForms [a] instance Agda.TypeChecking.Monad.Signature.ChaseDisplayForms a => Agda.TypeChecking.Monad.Signature.ChaseDisplayForms (Agda.TypeChecking.Monad.Base.Open a) instance Agda.TypeChecking.Monad.Signature.ChaseDisplayForms Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Monad.Signature.ChaseDisplayForms a => Agda.TypeChecking.Monad.Signature.ChaseDisplayForms (Data.Set.Internal.Set a) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Agda.TypeChecking.Monad.Base.BlockT m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Agda.Utils.Update.ChangeT m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.Except.ExceptT err m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.Identity.IdentityT m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Agda.Utils.ListT.ListT m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.Reader.ReaderT r m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo (Agda.TypeChecking.Monad.Base.TCMT GHC.Types.IO) instance (GHC.Internal.Base.Monoid w, Agda.TypeChecking.Monad.Signature.HasConstInfo m) => Agda.TypeChecking.Monad.Signature.HasConstInfo (Control.Monad.Trans.Writer.Lazy.WriterT w m) -- | A typeclass collecting all pure typechecking operations | (i.e. -- ones that do not modify the typechecking state, throw or | catch -- errors, or do IO other than debug printing). module Agda.TypeChecking.Monad.Pure class (HasBuiltins m, HasConstInfo m, MonadAddContext m, MonadDebug m, MonadReduce m, MonadTCEnv m, ReadTCState m) => PureTCM (m :: Type -> Type) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Agda.TypeChecking.Monad.Base.BlockT m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Agda.Utils.Update.ChangeT m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Control.Monad.Trans.Except.ExceptT e m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Control.Monad.Trans.Identity.IdentityT m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Agda.Utils.ListT.ListT m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Control.Monad.Trans.Reader.ReaderT r m) instance Agda.TypeChecking.Monad.Pure.PureTCM m => Agda.TypeChecking.Monad.Pure.PureTCM (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.TypeChecking.Monad.Pure.PureTCM Agda.TypeChecking.Monad.Base.TCM instance (Agda.TypeChecking.Monad.Pure.PureTCM m, GHC.Internal.Base.Monoid w) => Agda.TypeChecking.Monad.Pure.PureTCM (Control.Monad.Trans.Writer.Lazy.WriterT w m) module Agda.TypeChecking.Monad.MetaVars -- | Various classes of metavariables. data MetaClass -- | Meta variables of record type. Records :: MetaClass -- | Meta variables of "hereditarily singleton" record type. SingletonRecords :: MetaClass -- | Meta variables of level type, if type-in-type is activated. Levels :: MetaClass -- | All possible metavariable classes. allMetaClasses :: [MetaClass] data KeepMetas KeepMetas :: KeepMetas RollBackMetas :: KeepMetas -- | Monad service class for creating, solving and eta-expanding of -- metavariables. class (MonadConstraint m, MonadReduce m, MonadAddContext m, MonadTCEnv m, ReadTCState m, HasBuiltins m, HasConstInfo m, MonadDebug m) => MonadMetaSolver (m :: Type -> Type) -- | Generate a new meta variable with some instantiation given. For -- instance, the instantiation could be a -- PostponedTypeCheckingProblem. newMeta' :: MonadMetaSolver m => MetaInstantiation -> Frozen -> MetaInfo -> MetaPriority -> Permutation -> Judgement a -> m MetaId -- | Assign to an open metavar which may not be frozen. First check that -- metavar args are in pattern fragment. Then do extended occurs check on -- given thing. -- -- Assignment is aborted by throwing a PatternErr via a call to -- patternViolation. This error is caught by -- catchConstraint during equality checking -- (compareAtom) and leads to restoration of the original -- constraints. assignV :: MonadMetaSolver m => CompareDirection -> MetaId -> Args -> Term -> CompareAs -> m () -- | Directly instantiate the metavariable. Skip pattern check, occurs -- check and frozen check. Used for eta expanding frozen metas. assignTerm' :: MonadMetaSolver m => MetaId -> [Arg ArgName] -> Term -> m () -- | Eta-expand a local meta-variable, if it is of the specified class. -- Don't do anything if the meta-variable is a blocked term. etaExpandMeta :: MonadMetaSolver m => [MetaClass] -> MetaId -> m () -- | Update the status of the metavariable updateMetaVar :: MonadMetaSolver m => MetaId -> (MetaVariable -> MetaVariable) -> m () -- | 'speculateMetas fallback m' speculatively runs m, but if the -- result is RollBackMetas any changes to metavariables are rolled -- back and fallback is run instead. speculateMetas :: MonadMetaSolver m => m () -> m KeepMetas -> m () -- | Switch off assignment of metas. dontAssignMetas :: (MonadTCEnv m, HasOptions m, MonadDebug m) => m a -> m a -- | Is the meta-variable from another top-level module? isRemoteMeta :: ReadTCState m => m (MetaId -> Bool) -- | If another meta-variable is created, then it will get this -- MetaId (unless the state is changed too much, for instance by -- setTopLevelModule). nextLocalMeta :: ReadTCState m => m MetaId -- | Pairs of local meta-stores. data LocalMetaStores LocalMetaStores :: LocalMetaStore -> LocalMetaStore -> LocalMetaStores -- | A MetaStore containing open meta-variables. [openMetas] :: LocalMetaStores -> LocalMetaStore -- | A MetaStore containing instantiated meta-variables. [solvedMetas] :: LocalMetaStores -> LocalMetaStore -- | Run a computation and record which new metas it created. metasCreatedBy :: ReadTCState m => m a -> m (a, LocalMetaStores) -- | Find information about the given local meta-variable, if any. lookupLocalMeta' :: ReadTCState m => MetaId -> m (Maybe MetaVariable) -- | Find information about the given local meta-variable. lookupLocalMeta :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m MetaVariable -- | Find information about the (local or remote) meta-variable, if any. -- -- If no meta-variable is found, then the reason could be that the -- dead-code elimination (eliminateDeadCode) failed to find the -- meta-variable, perhaps because some NamesIn instance is -- incorrectly defined. lookupMeta :: ReadTCState m => MetaId -> m (Maybe (Either RemoteMetaVariable MetaVariable)) -- | Find the meta-variable's instantiation. lookupMetaInstantiation :: ReadTCState m => MetaId -> m MetaInstantiation -- | Find the meta-variable's judgement. lookupMetaJudgement :: ReadTCState m => MetaId -> m (Judgement MetaId) -- | Find the meta-variable's modality. lookupMetaModality :: ReadTCState m => MetaId -> m Modality -- | The type of a term or sort meta-variable. metaType :: ReadTCState m => MetaId -> m Type -- | Update the information associated with a local meta-variable. updateMetaVarTCM :: HasCallStack => MetaId -> (MetaVariable -> MetaVariable) -> TCM () -- | Insert a new meta-variable with associated information into the local -- meta store. insertMetaVar :: MetaId -> MetaVariable -> TCM () -- | Returns the MetaPriority of the given local meta-variable. getMetaPriority :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m MetaPriority isSortMeta :: ReadTCState m => MetaId -> m Bool isSortMeta_ :: MetaVariable -> Bool isSortJudgement :: Judgement a -> Bool -- | If a meta variable is still open, what is its kind? metaInstantiationToMetaKind :: MetaInstantiation -> MetaKind getMetaType :: ReadTCState m => MetaId -> m Type -- | Compute the context variables that a local meta-variable should be -- applied to, accounting for pruning. getMetaContextArgs :: MonadTCEnv m => MetaVariable -> m Args -- | Given a local meta-variable, return the type applied to the current -- context. getMetaTypeInContext :: (HasBuiltins m, HasCallStack, MonadDebug m, MonadReduce m, MonadTCEnv m, ReadTCState m) => MetaId -> m Type -- | Is it a local meta-variable that might be generalized? isGeneralizableMeta :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m DoGeneralize -- | Check whether all metas are instantiated. Precondition: argument is a -- meta (in some form) or a list of metas. class IsInstantiatedMeta a isInstantiatedMeta :: (IsInstantiatedMeta a, ReadTCState m) => a -> m Bool isInstantiatedMeta' :: ReadTCState m => MetaId -> m (Maybe Term) -- | Returns all metavariables in a constraint. Slightly complicated by the -- fact that blocked terms are represented by two meta variables. To find -- the second one we need to look up the meta listeners for the one in -- the UnBlock constraint. This is used for the purpose of deciding if a -- metavariable is constrained or if it can be generalized over (see -- Agda.TypeChecking.Generalize). constraintMetas :: Constraint -> TCM (Set MetaId) -- | Create MetaInfo in the current environment. createMetaInfo :: (MonadTCEnv m, ReadTCState m) => m MetaInfo createMetaInfo' :: (MonadTCEnv m, ReadTCState m) => RunMetaOccursCheck -> m MetaInfo setValueMetaName :: MonadMetaSolver m => Term -> MetaNameSuggestion -> m () getMetaNameSuggestion :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m MetaNameSuggestion setMetaNameSuggestion :: MonadMetaSolver m => MetaId -> MetaNameSuggestion -> m () -- | Change the ArgInfo that will be used when generalizing over this local -- meta-variable. setMetaGeneralizableArgInfo :: MonadMetaSolver m => MetaId -> ArgInfo -> m () updateMetaVarRange :: MonadMetaSolver m => MetaId -> Range -> m () setMetaOccursCheck :: MonadMetaSolver m => MetaId -> RunMetaOccursCheck -> m () class (MonadTCEnv m, ReadTCState m) => MonadInteractionPoints (m :: Type -> Type) freshInteractionId :: MonadInteractionPoints m => m InteractionId ($dmfreshInteractionId) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (MonadInteractionPoints m, MonadTrans t, MonadInteractionPoints n, t n ~ m) => m InteractionId modifyInteractionPoints :: MonadInteractionPoints m => (InteractionPoints -> InteractionPoints) -> m () ($dmmodifyInteractionPoints) :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (MonadInteractionPoints m, MonadTrans t, MonadInteractionPoints n, t n ~ m) => (InteractionPoints -> InteractionPoints) -> m () -- | Register an interaction point during scope checking. If there is no -- interaction id yet, create one. registerInteractionPoint :: MonadInteractionPoints m => Bool -> Range -> Maybe Nat -> m InteractionId -- | Find an interaction point by Range by searching the whole map. -- Issue 3000: Don't consider solved interaction points. -- -- O(n): linear in the number of registered interaction points. findInteractionPoint_ :: Range -> InteractionPoints -> Maybe InteractionId -- | Hook up a local meta-variable to an interaction point. connectInteractionPoint :: MonadInteractionPoints m => InteractionId -> MetaId -> m () -- | Mark an interaction point as solved. removeInteractionPoint :: MonadInteractionPoints m => InteractionId -> m () -- | Get a list of interaction ids. getInteractionPoints :: ReadTCState m => m [InteractionId] -- | Get all metas that correspond to unsolved interaction ids. getInteractionMetas :: ReadTCState m => m [MetaId] getUniqueMetasRanges :: (HasCallStack, MonadDebug m, ReadTCState m) => [MetaId] -> m [Range] getUnsolvedMetas :: (HasCallStack, MonadDebug m, ReadTCState m) => m [Range] getUnsolvedInteractionMetas :: (HasCallStack, MonadDebug m, ReadTCState m) => m [Range] -- | Get all metas that correspond to unsolved interaction ids. getInteractionIdsAndMetas :: ReadTCState m => m [(InteractionId, MetaId)] -- | Does the meta variable correspond to an interaction point? -- -- Time: O(log n) where n is the number of interaction -- metas. isInteractionMeta :: ReadTCState m => MetaId -> m (Maybe InteractionId) -- | Get the information associated to an interaction point. lookupInteractionPoint :: (ReadTCState m, MonadError TCErr m, MonadTCEnv m) => InteractionId -> m InteractionPoint -- | Get MetaId for an interaction point. Precondition: interaction -- point is connected. lookupInteractionId :: (ReadTCState m, MonadError TCErr m, MonadTCEnv m) => InteractionId -> m MetaId -- | Check whether an interaction id is already associated with a meta -- variable. lookupInteractionMeta :: ReadTCState m => InteractionId -> m (Maybe MetaId) lookupInteractionMeta_ :: InteractionId -> InteractionPoints -> Maybe MetaId -- | Generate new meta variable. newMeta :: MonadMetaSolver m => Frozen -> MetaInfo -> MetaPriority -> Permutation -> Judgement a -> m MetaId -- | Generate a new meta variable with some instantiation given. For -- instance, the instantiation could be a -- PostponedTypeCheckingProblem. newMetaTCM' :: MetaInstantiation -> Frozen -> MetaInfo -> MetaPriority -> Permutation -> Judgement a -> TCM MetaId -- | Get the Range for an interaction point. getInteractionRange :: (MonadInteractionPoints m, MonadDebug m, MonadError TCErr m) => InteractionId -> m Range -- | Get the Range for a local meta-variable. getMetaRange :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m Range getInteractionScope :: (MonadDebug m, ReadTCState m, MonadError TCErr m, MonadTCEnv m) => InteractionId -> m ScopeInfo withMetaInfo' :: (MonadTCEnv m, ReadTCState m, MonadTrace m) => MetaVariable -> m a -> m a withMetaInfo :: (MonadTCEnv m, ReadTCState m, MonadTrace m) => Closure Range -> m a -> m a withInteractionId :: (MonadDebug m, ReadTCState m, MonadError TCErr m, MonadTCEnv m, MonadTrace m) => InteractionId -> m a -> m a withMetaId :: (HasCallStack, MonadDebug m, MonadTCEnv m, MonadTrace m, ReadTCState m) => MetaId -> m a -> m a getOpenMetas :: ReadTCState m => m [MetaId] isOpenMeta :: MetaInstantiation -> Bool -- | listenToMeta l m: register l as a listener to -- m. This is done when the type of l is blocked by m. listenToMeta :: MonadMetaSolver m => Listener -> MetaId -> m () -- | Unregister a listener. unlistenToMeta :: MonadMetaSolver m => Listener -> MetaId -> m () -- | Get the listeners for a local meta-variable. getMetaListeners :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m [Listener] clearMetaListeners :: MonadMetaSolver m => MetaId -> m () -- | Do safe eta-expansions for meta (SingletonRecords,Levels). etaExpandMetaSafe :: MonadMetaSolver m => MetaId -> m () -- | Eta expand metavariables listening on the current meta. etaExpandListeners :: MonadMetaSolver m => MetaId -> m () -- | Wake up a meta listener and let it do its thing wakeupListener :: MonadMetaSolver m => Listener -> m () solveAwakeConstraints :: MonadConstraint m => m () solveAwakeConstraints' :: MonadConstraint m => Bool -> m () -- | Freeze the given meta-variables (but only if they are open) and return -- those that were not already frozen. freezeMetas :: (MonadTCState m, ReadTCState m) => LocalMetaStore -> m (Set MetaId) -- | Thaw all open meta variables. unfreezeMetas :: TCM () isFrozen :: (HasCallStack, MonadDebug m, ReadTCState m) => MetaId -> m Bool withFrozenMetas :: (MonadMetaSolver m, MonadTCState m) => m a -> m a -- | Unfreeze a meta and its type if this is a meta again. Does not -- unfreeze deep occurrences of meta-variables or remote meta-variables. class UnFreezeMeta a unfreezeMeta :: (UnFreezeMeta a, MonadMetaSolver m) => a -> m () instance GHC.Internal.Enum.Bounded Agda.TypeChecking.Monad.MetaVars.MetaClass instance GHC.Internal.Enum.Enum Agda.TypeChecking.Monad.MetaVars.MetaClass instance GHC.Classes.Eq Agda.TypeChecking.Monad.MetaVars.MetaClass instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta a => Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta a => Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta Agda.Syntax.Internal.Level instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta a => Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta [a] instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta a => Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta Agda.Syntax.Internal.Term instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Control.Monad.Trans.Except.ExceptT e m) instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Control.Monad.Trans.Identity.IdentityT m) instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Control.Monad.Trans.Maybe.MaybeT m) instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Control.Monad.Trans.Reader.ReaderT r m) instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Control.Monad.Trans.State.Lazy.StateT s m) instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints Agda.TypeChecking.Monad.Base.TCM instance (Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m, GHC.Internal.Base.Monoid w) => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance Agda.TypeChecking.Monad.MetaVars.MonadMetaSolver m => Agda.TypeChecking.Monad.MetaVars.MonadMetaSolver (Control.Monad.Trans.Reader.ReaderT r m) instance GHC.Internal.Show.Show Agda.TypeChecking.Monad.MetaVars.MetaClass instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta a => Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Internal.Level instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta a => Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta [a] instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Internal.Term instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Internal.Type module Agda.TypeChecking.Monad module Agda.TypeChecking.Serialise.Instances.Compilers instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CompilerPragma instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ForeignCode instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ForeignCodeStack module Agda.TypeChecking.Serialise.Instances.Internal blockedToMaybe :: Blocked_ -> Maybe NotBlocked blockedFromMaybe :: Maybe NotBlocked -> Blocked_ instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Blocked_ instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.Builtin a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.BuiltinSort instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.CompiledClause.Case a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CheckpointId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Clause instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CompKit instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Types.Comparison instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.CompiledClause.CompiledClauses instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.ConHead instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.ConPatternInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.DBPatVar instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.DataOrRecord instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Definition instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Defn instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, GHC.Classes.Ord a) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.DiscrimTree.Types.DiscrimTree a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.DisplayTerm instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.DoGeneralize instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.Permutation.Drop a) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.EtaEquality instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ExtLamInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.FunctionFlag instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.FunctionInverse' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.InstanceInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.InstanceTable instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Instantiation instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Univ.IsFibrant instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.IsForced instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.Judgement a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.DiscrimTree.Types.Key instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Coverage.SplitTree.LazySplit instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Level instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.MutualId instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.NotBlocked instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.NumGeneralizableArgs instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Positivity.Occurrence.Occurrence instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.OpaqueBlock instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.Open a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.PatOrigin instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Pattern' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.PatternInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.Permutation.Permutation instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Types.Polarity instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ProjLams instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Projection instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ProjectionLikenessMissing instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.RemoteMetaVariable instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Section instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Signature instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Coverage.SplitTree.SplitTag instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Coverage.SplitTree.SplitTree' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Substitution' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.System instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Term instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.TermHead instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Type' a) instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Univ.Univ instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.CompiledClause.WithArity a) module Agda.TypeChecking.Serialise.Instances.Errors instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Types.ConfluenceCheck instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Termination.CutOff.CutOff instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Definitions.Errors.DeclarationWarning' instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Pretty.Doc instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Library.Base.ExecutablesFile instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.IllegalRewriteRuleReason instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Types.InfectiveCoinfective instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.IsAmbiguous instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.LHSOrPatSyn instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Library.Base.LibPositionInfo instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Library.Base.LibWarning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Library.Base.LibWarning' instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Definitions.Errors.OpenOrImport instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Base.OptionWarning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Parser.Monad.ParseWarning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Types.PragmaOptions instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.ProfileOptions.ProfileOption instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.ProfileOptions.ProfileOptions instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Warning.RecordFieldWarning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.TCWarning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Glyph.UnicodeOrAscii instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Warning.UselessPublicReason instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Warning instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Warnings.WarningMode instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Warnings.WarningModeError instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Options.Warnings.WarningName module Agda.TypeChecking.Serialise.Instances instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Interface -- | Structure-sharing serialisation of Agda interface files. module Agda.TypeChecking.Serialise -- | Encodes something. To ensure relocatability file paths in positions -- are replaced with module names. encode :: EmbPrj a => a -> TCM Encoded -- | Encodes an interface. To ensure relocatability file paths in positions -- are replaced with module names. -- -- An uncompressed bytestring corresponding to the encoded interface is -- returned. encodeFile :: FilePath -> Interface -> TCM ByteString encodeInterface :: Interface -> TCM Encoded -- | Decodes an uncompressed bytestring (without extra hashes or magic -- numbers). The result depends on the include path. -- -- Returns Nothing if a decoding error is encountered. decode :: EmbPrj a => ByteString -> TCM (Maybe a) decodeFile :: FilePath -> TCM (Maybe Interface) -- | Decodes an interface. The result depends on the include path. -- -- Returns Nothing if the file does not start with the right magic -- number or some other decoding error is encountered. decodeInterface :: ByteString -> TCM (Maybe Interface) decodeHashes :: ByteString -> Maybe (Hash, Hash) class Typeable a => EmbPrj a instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Agda.TypeChecking.Serialise.ListLike a) module Agda.TypeChecking.Rewriting.Clause -- | Get all the clauses of a definition and convert them to rewrite rules. getClausesAsRewriteRules :: (HasConstInfo m, MonadFresh NameId m) => QName -> m [RewriteRule] -- | Generate a sensible name for the given clause clauseQName :: (HasConstInfo m, MonadFresh NameId m) => QName -> Int -> m QName -- | clauseToRewriteRule f q cl converts the clause cl of -- the function f to a rewrite rule with name q. -- Returns Nothing if clauseBody cl is -- Nothing. Precondition: clauseType cl is not -- Nothing. clauseToRewriteRule :: QName -> QName -> Clause -> Maybe RewriteRule class ToNLPat a b toNLPat :: ToNLPat a b => a -> b ($dmtoNLPat) :: forall a' b' (f :: Type -> Type). (ToNLPat a b, ToNLPat a' b', Functor f, a ~ f a', b ~ f b') => a -> b instance Agda.TypeChecking.Rewriting.Clause.ToNLPat a b => Agda.TypeChecking.Rewriting.Clause.ToNLPat (Agda.Syntax.Internal.Abs a) (Agda.Syntax.Internal.Abs b) instance Agda.TypeChecking.Rewriting.Clause.ToNLPat (Agda.Syntax.Common.Arg Agda.Syntax.Internal.DeBruijnPattern) (Agda.Syntax.Internal.Elim.Elim' Agda.TypeChecking.Monad.Base.NLPat) instance Agda.TypeChecking.Rewriting.Clause.ToNLPat (Agda.Syntax.Common.NamedArg Agda.Syntax.Internal.DeBruijnPattern) (Agda.Syntax.Internal.Elim.Elim' Agda.TypeChecking.Monad.Base.NLPat) instance Agda.TypeChecking.Rewriting.Clause.ToNLPat a b => Agda.TypeChecking.Rewriting.Clause.ToNLPat (Agda.Syntax.Internal.Dom a) (Agda.Syntax.Internal.Dom b) instance Agda.TypeChecking.Rewriting.Clause.ToNLPat a b => Agda.TypeChecking.Rewriting.Clause.ToNLPat (Agda.Syntax.Internal.Elim.Elim' a) (Agda.Syntax.Internal.Elim.Elim' b) instance Agda.TypeChecking.Rewriting.Clause.ToNLPat a b => Agda.TypeChecking.Rewriting.Clause.ToNLPat [a] [b] module Agda.TypeChecking.Reduce.Monad constructorForm :: HasBuiltins m => Term -> m Term enterClosure :: LensClosure c a => c -> (a -> ReduceM b) -> ReduceM b -- | Lookup the definition of a name. The result is a closed thing, all -- free variables have been abstracted over. getConstInfo :: HasConstInfo m => QName -> m Definition askR :: ReduceM ReduceEnv -- | Apply a function if a certain verbosity level is activated. -- -- Precondition: The level must be non-negative. applyWhenVerboseS :: MonadDebug m => VerboseKey -> VerboseLevel -> (m a -> m a) -> m a -> m a instance Agda.TypeChecking.Monad.Builtin.HasBuiltins Agda.TypeChecking.Monad.Base.ReduceM instance Agda.TypeChecking.Monad.Signature.HasConstInfo Agda.TypeChecking.Monad.Base.ReduceM instance Agda.TypeChecking.Monad.Context.MonadAddContext Agda.TypeChecking.Monad.Base.ReduceM instance Agda.TypeChecking.Monad.Debug.MonadDebug Agda.TypeChecking.Monad.Base.ReduceM instance Agda.TypeChecking.Monad.Pure.PureTCM Agda.TypeChecking.Monad.Base.ReduceM -- | Facility to test throwing internal errors. module Agda.ImpossibleTest -- | If the given list of words is non-empty, print them as debug message -- (using __IMPOSSIBLE_VERBOSE__) before raising the internal -- error. impossibleTest :: (MonadDebug m, HasCallStack) => [String] -> m a impossibleTestReduceM :: HasCallStack => [String] -> TCM a -- | The translation of abstract syntax to concrete syntax has two -- purposes. First it allows us to pretty print abstract syntax values -- without having to write a dedicated pretty printer, and second it -- serves as a sanity check for the concrete to abstract translation: -- translating from concrete to abstract and then back again should be -- (more or less) the identity. module Agda.Syntax.Translation.AbstractToConcrete class ToConcrete a where { type ConOfAbs a; } toConcrete :: (ToConcrete a, MonadToConcrete m) => a -> m (ConOfAbs a) bindToConcrete :: (ToConcrete a, MonadToConcrete m) => a -> (ConOfAbs a -> m b) -> m b -- | Translate something in a context of the given precedence. toConcreteCtx :: (MonadToConcrete m, ToConcrete a) => Precedence -> a -> m (ConOfAbs a) -- | Preconditions to run the AbstractToConcrete translation. type MonadAbsToCon (m :: Type -> Type) = (MonadFresh NameId m, MonadInteractionPoints m, MonadStConcreteNames m, HasOptions m, PureTCM m, IsString m Doc, Null m Doc, Semigroup m Doc) abstractToConcrete_ :: (ToConcrete a, MonadAbsToCon m) => a -> m (ConOfAbs a) abstractToConcreteCtx :: (ToConcrete a, MonadAbsToCon m) => Precedence -> a -> m (ConOfAbs a) abstractToConcreteHiding :: (LensHiding i, ToConcrete a, MonadAbsToCon m) => i -> a -> m (ConOfAbs a) abstractToConcreteQName :: MonadAbsToCon m => AllowAmbiguousNames -> QName -> m QName abstractToConcreteScope :: (ToConcrete a, MonadAbsToCon m) => ScopeInfo -> a -> m (ConOfAbs a) abstractToConcreteTelescope :: MonadAbsToCon m => Telescope -> m [Maybe TypedBinding] abstractToConcreteUnqualify :: (ToConcrete a, MonadAbsToCon m) => a -> m (ConOfAbs a) data RangeAndPragma RangeAndPragma :: Range -> Pragma -> RangeAndPragma noTakenNames :: MonadToConcrete m => m a -> m a instance GHC.Internal.Base.Applicative m => GHC.Internal.Base.Applicative (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.Syntax.Translation.AbstractToConcrete.MaybeSection a) instance GHC.Internal.Data.Foldable.Foldable Agda.Syntax.Translation.AbstractToConcrete.MaybeSection instance GHC.Internal.Base.Functor m => GHC.Internal.Base.Functor (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance GHC.Internal.Base.Functor Agda.Syntax.Translation.AbstractToConcrete.MaybeSection instance Agda.TypeChecking.Monad.Builtin.HasBuiltins m => Agda.TypeChecking.Monad.Builtin.HasBuiltins (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Signature.HasConstInfo m => Agda.TypeChecking.Monad.Signature.HasConstInfo (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.Interaction.Options.HasOptions.HasOptions m => Agda.Interaction.Options.HasOptions.HasOptions (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.Syntax.Position.HasRange a => Agda.Syntax.Position.HasRange (Agda.Syntax.Translation.AbstractToConcrete.MaybeSection a) instance (GHC.Internal.Base.Monad m, GHC.Internal.Data.String.IsString (m Agda.Syntax.Common.Pretty.Doc)) => GHC.Internal.Data.String.IsString (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m Agda.Syntax.Common.Pretty.Doc) instance GHC.Internal.Base.Monad m => GHC.Internal.Base.Monad (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Context.MonadAddContext m => Agda.TypeChecking.Monad.Context.MonadAddContext (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Debug.MonadDebug m => Agda.TypeChecking.Monad.Debug.MonadDebug (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Base.MonadFresh Agda.Syntax.Common.NameId m => Agda.TypeChecking.Monad.Base.MonadFresh Agda.Syntax.Common.NameId (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints m => Agda.TypeChecking.Monad.MetaVars.MonadInteractionPoints (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance GHC.Internal.Base.Monad m => Control.Monad.Reader.Class.MonadReader Agda.Syntax.Translation.AbstractToConcrete.Env (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Base.MonadReduce m => Agda.TypeChecking.Monad.Base.MonadReduce (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Base.MonadStConcreteNames m => Agda.TypeChecking.Monad.Base.MonadStConcreteNames (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Base.MonadTCEnv m => Agda.TypeChecking.Monad.Base.MonadTCEnv (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance (GHC.Internal.Base.Monad m, Agda.Utils.Null.Null (m Agda.Syntax.Common.Pretty.Doc)) => Agda.Utils.Null.Null (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m Agda.Syntax.Common.Pretty.Doc) instance (Agda.TypeChecking.Monad.Builtin.HasBuiltins m, Agda.TypeChecking.Monad.Signature.HasConstInfo m, Agda.TypeChecking.Monad.Context.MonadAddContext m, Agda.TypeChecking.Monad.Base.MonadReduce m) => Agda.TypeChecking.Monad.Pure.PureTCM (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance Agda.TypeChecking.Monad.Base.ReadTCState m => Agda.TypeChecking.Monad.Base.ReadTCState (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m) instance (GHC.Internal.Base.Monad m, GHC.Internal.Base.Semigroup (m Agda.Syntax.Common.Pretty.Doc)) => GHC.Internal.Base.Semigroup (Agda.Syntax.Translation.AbstractToConcrete.AbsToConT m Agda.Syntax.Common.Pretty.Doc) instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.Syntax.Translation.AbstractToConcrete.MaybeSection a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Scope.Base.AbstractName instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.Arg a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.BindName instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Abstract.Binder' a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Translation.AbstractToConcrete.BindingPattern instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete GHC.Types.Bool instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete GHC.Types.Char instance (Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a, Agda.Syntax.Translation.AbstractToConcrete.ConOfAbs a GHC.Types.~ Agda.Syntax.Concrete.LHS) => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Abstract.Clause' a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.Constr Agda.Syntax.Abstract.Constructor) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.Declaration instance (Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a1, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a2) => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (GHC.Internal.Data.Either.Either a1 a2) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.Expr instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Translation.AbstractToConcrete.FreshenName instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Common.InteractionId instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.LHS instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.LHSCore instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.LamBinding instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.LetBinding instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete [a] instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (GHC.Internal.Maybe.Maybe a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.ModuleApplication instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.Name.ModuleName instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.Name.Name instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.Named name a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.TypeChecking.Monad.Base.Types.NamedMeta instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Utils.List1.List1 a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.Pattern instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.Name.QName instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.RHS instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Translation.AbstractToConcrete.RangeAndPragma instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.Ranged a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.RecordDirectives instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Scope.Base.ResolvedName instance (Agda.Syntax.Translation.AbstractToConcrete.ToConcrete p, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a) => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.RewriteEqn' qn Agda.Syntax.Abstract.BindName p a) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.SpineLHS instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.SplitPattern Agda.Syntax.Abstract.Pattern) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.SplitPattern (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Pattern)) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Concrete.TacticAttribute' a) instance (Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a1, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a2) => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (a1, a2) instance (Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a1, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a2, Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a3) => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (a1, a2, a3) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.TypedBinding instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete () instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.UserPattern Agda.Syntax.Abstract.Pattern) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Translation.AbstractToConcrete.UserPattern (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Pattern)) instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete Agda.Syntax.Abstract.WhereDeclarations instance Agda.Syntax.Translation.AbstractToConcrete.ToConcrete a => Agda.Syntax.Translation.AbstractToConcrete.ToConcrete (Agda.Syntax.Common.WithHiding a) instance GHC.Internal.Data.Traversable.Traversable Agda.Syntax.Translation.AbstractToConcrete.MaybeSection module Agda.Syntax.Abstract.Pretty showA :: (ToConcrete a, Show (ConOfAbs a), MonadAbsToCon m) => a -> m String prettyA :: (ToConcrete a, Pretty (ConOfAbs a), MonadAbsToCon m) => a -> m Doc prettyAs :: (ToConcrete a, ConOfAbs a ~ [ce], Pretty ce, MonadAbsToCon m) => a -> m Doc -- | Variant of showA which does not insert outermost parentheses. showATop :: (ToConcrete a, Show (ConOfAbs a), MonadAbsToCon m) => a -> m String -- | Variant of prettyA which does not insert outermost parentheses. prettyATop :: (ToConcrete a, Pretty (ConOfAbs a), MonadAbsToCon m) => a -> m Doc -- | Variant of prettyA which unqualifies out-of-scope names. prettyAUnqualify :: (ToConcrete a, Pretty (ConOfAbs a), MonadAbsToCon m) => a -> m Doc module Agda.TypeChecking.MetaVars.Mention class MentionsMeta t mentionsMetas :: MentionsMeta t => HashSet MetaId -> t -> Bool mentionsMeta :: MentionsMeta t => MetaId -> t -> Bool instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Internal.Abs t) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Common.Arg t) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.Blockers.Blocker instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta a => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.TypeChecking.Monad.Base.Constraint instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Internal.Dom t) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.Elim instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.Level instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta [t] instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta t => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.TypeChecking.Monad.Base.ProblemConstraint instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.Sort instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta a => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.Term instance (Agda.TypeChecking.MetaVars.Mention.MentionsMeta a, Agda.TypeChecking.MetaVars.Mention.MentionsMeta b) => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (a, b) instance (Agda.TypeChecking.MetaVars.Mention.MentionsMeta a, Agda.TypeChecking.MetaVars.Mention.MentionsMeta b, Agda.TypeChecking.MetaVars.Mention.MentionsMeta c) => Agda.TypeChecking.MetaVars.Mention.MentionsMeta (a, b, c) instance Agda.TypeChecking.MetaVars.Mention.MentionsMeta Agda.Syntax.Internal.Type -- | Compute eta short normal forms. module Agda.TypeChecking.EtaContract data BinAppView App :: Term -> Arg Term -> BinAppView NoApp :: Term -> BinAppView binAppView :: Term -> BinAppView -- | Contracts all eta-redexes it sees without reducing. etaContract :: (MonadTCEnv m, HasConstInfo m, HasOptions m, TermLike a) => a -> m a etaOnce :: (MonadTCEnv m, HasConstInfo m, HasOptions m) => Term -> m Term -- | If record constructor, call eta-contraction function. etaCon :: (MonadTCEnv m, HasConstInfo m, HasOptions m) => ConHead -> ConInfo -> Elims -> (QName -> ConHead -> ConInfo -> Args -> m Term) -> m Term -- | Try to contract a lambda-abstraction Lam i (Abs x b). etaLam :: (MonadTCEnv m, HasConstInfo m, HasOptions m) => ArgInfo -> ArgName -> Term -> m Term module Agda.TypeChecking.Reduce -- | Instantiate something. Results in an open meta variable or a non meta. -- Doesn't do any reduction, and preserves blocking tags (when blocking -- meta is uninstantiated). class Instantiate t instantiate' :: Instantiate t => t -> ReduceM t instantiate :: (Instantiate a, MonadReduce m) => a -> m a -- | A variant of instantiateFull that only instantiates those -- meta-variables that satisfy the predicate. instantiateWhen :: (InstantiateFull a, MonadReduce m) => (MetaId -> ReduceM Bool) -> a -> m a -- | instantiateFull' instantiates metas everywhere (and -- recursively) but does not reduce. class InstantiateFull t instantiateFull' :: InstantiateFull t => t -> ReduceM t instantiateFull :: (InstantiateFull a, MonadReduce m) => a -> m a -- | Is something (an elimination of) a meta variable? Does not perform any -- reductions. class IsMeta a isMeta :: IsMeta a => a -> Maybe MetaId class Reduce t reduce' :: Reduce t => t -> ReduceM t reduceB' :: Reduce t => t -> ReduceM (Blocked t) reduce :: (Reduce a, MonadReduce m) => a -> m a reduceB :: (Reduce a, MonadReduce m) => a -> m (Blocked a) reduceWithBlocker :: (Reduce a, IsMeta a, MonadReduce m) => a -> m (Blocker, a) reduceIApply' :: (Term -> ReduceM (Blocked Term)) -> ReduceM (Blocked Term) -> [Elim] -> ReduceM (Blocked Term) -- | Reduce a non-primitive definition if it is a copy linking to another -- def. reduceDefCopy :: PureTCM m => QName -> Elims -> m (Reduced () Term) -- | Specialized version to put in boot file. reduceDefCopyTCM :: QName -> Elims -> TCM (Reduced () Term) -- | Reduce simple (single clause) definitions. reduceHead :: PureTCM m => Term -> m (Blocked Term) slowReduceTerm :: Term -> ReduceM (Blocked Term) unfoldCorecursion :: Term -> ReduceM (Blocked Term) unfoldCorecursionE :: Elim -> ReduceM (Blocked Elim) unfoldDefinitionE :: (Term -> ReduceM (Blocked Term)) -> Term -> QName -> Elims -> ReduceM (Blocked Term) unfoldDefinitionStep :: Term -> QName -> Elims -> ReduceM (Reduced (Blocked Term) Term) -- | Unfold as many copies as possible, and then potentially a single -- inline function. unfoldInlined :: PureTCM m => Term -> m Term -- | Apply a defined function to it's arguments, using the original -- clauses. appDef' :: QName -> Term -> [Clause] -> RewriteRules -> MaybeReducedArgs -> ReduceM (Reduced (Blocked Term) Term) appDefE' :: QName -> Term -> [Clause] -> RewriteRules -> MaybeReducedElims -> ReduceM (Reduced (Blocked Term) Term) -- | Throw pattern violation if blocked or a meta. abortIfBlocked :: (MonadReduce m, MonadBlock m, IsMeta t, Reduce t) => t -> m t -- | Case on whether a term is blocked on a meta (or is a meta). That means -- it can change its shape when the meta is instantiated. ifBlocked :: (Reduce t, IsMeta t, MonadReduce m) => t -> (Blocker -> t -> m a) -> (NotBlocked -> t -> m a) -> m a isBlocked :: (Reduce t, IsMeta t, MonadReduce m) => t -> m (Maybe Blocker) -- | Throw a pattern violation if the argument is Blocked, -- otherwise return the value embedded in the NotBlocked. fromBlocked :: MonadBlock m => Blocked a -> m a -- | Run the given computation but turn any errors into blocked -- computations with the given blocker blockOnError :: MonadError TCErr m => Blocker -> m a -> m a -- | Only unfold definitions if this leads to simplification which means -- that a constructor/literal pattern is matched. We include reduction of -- IApply patterns, as `p i0` is akin to matcing on the i0 -- constructor of interval. class Simplify t simplify :: (Simplify a, MonadReduce m) => a -> m a simplifyBlocked' :: Simplify t => Blocked t -> ReduceM t class Normalise t normalise' :: Normalise t => t -> ReduceM t normalise :: (Normalise a, MonadReduce m) => a -> m a slowNormaliseArgs :: Term -> ReduceM Term instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.InstantiateFull a) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Common.Arg t) instance Agda.TypeChecking.Reduce.InstantiateFull GHC.Types.Bool instance Agda.TypeChecking.Reduce.InstantiateFull a => Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.Monad.Base.Builtin a) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Reduce.InstantiateFull a => Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.CompiledClause.Case a) instance Agda.TypeChecking.Reduce.InstantiateFull GHC.Types.Char instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.Clause instance Agda.TypeChecking.Reduce.InstantiateFull a => Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.CompiledClause.CompiledClauses instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.ConHead instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.ConPatternInfo instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Constraint instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Types.ContextEntry instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.DBPatVar instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Definition instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Defn instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.DisplayTerm instance (Agda.TypeChecking.Reduce.InstantiateFull t, Agda.TypeChecking.Reduce.InstantiateFull e) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Dom' t e) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Elim.Elim' t) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.ExtLamInfo instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.FunctionInverse instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Data.HashMap.Internal.HashMap k t) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.Monad.Base.IPBoundary' t) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Instantiation instance Agda.TypeChecking.Reduce.InstantiateFull GHC.Types.Int instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Interface instance Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.Monad.Base.Judgement Agda.Syntax.Common.MetaId) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.LetBinding instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.Level instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull [t] instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Data.Map.Internal.Map k t) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Data.Strict.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Abstract.Name.ModuleName instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Abstract.Name.Name instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Common.Named name t) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Utils.List1.List1 t) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.Monad.Base.Open t) instance Agda.TypeChecking.Reduce.InstantiateFull a => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Pattern' a) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Builtin.PrimitiveId instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.ProblemConstraint instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.RemoteMetaVariable instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Scope.Base.Scope instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Section instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.Signature instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.Substitution instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Monad.Base.System instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.InstantiateFull a) => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.Reduce.InstantiateFull Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Reduce.InstantiateFull a, Agda.TypeChecking.Reduce.InstantiateFull b) => Agda.TypeChecking.Reduce.InstantiateFull (a, b) instance (Agda.TypeChecking.Reduce.InstantiateFull a, Agda.TypeChecking.Reduce.InstantiateFull b, Agda.TypeChecking.Reduce.InstantiateFull c) => Agda.TypeChecking.Reduce.InstantiateFull (a, b, c) instance (Agda.TypeChecking.Reduce.InstantiateFull a, Agda.TypeChecking.Reduce.InstantiateFull b, Agda.TypeChecking.Reduce.InstantiateFull c, Agda.TypeChecking.Reduce.InstantiateFull d) => Agda.TypeChecking.Reduce.InstantiateFull (a, b, c, d) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.Syntax.Internal.Type' t) instance Agda.TypeChecking.Reduce.InstantiateFull t => Agda.TypeChecking.Reduce.InstantiateFull (Agda.TypeChecking.CompiledClause.WithArity t) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Abs t) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Common.Arg t) instance Agda.TypeChecking.Reduce.Instantiate a => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Blocked a) instance Agda.TypeChecking.Reduce.Instantiate Agda.Syntax.Internal.Blockers.Blocker instance Agda.TypeChecking.Reduce.Instantiate Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Reduce.Instantiate a => Agda.TypeChecking.Reduce.Instantiate (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.Reduce.Instantiate Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Reduce.Instantiate Agda.TypeChecking.Monad.Base.Constraint instance (Agda.TypeChecking.Reduce.Instantiate t, Agda.TypeChecking.Reduce.Instantiate e) => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Dom' t e) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Elim.Elim' t) instance Agda.TypeChecking.Reduce.Instantiate Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.TypeChecking.Monad.Base.IPBoundary' t) instance Agda.TypeChecking.Reduce.Instantiate Agda.Syntax.Internal.Level instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate [t] instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Data.Map.Internal.Map k t) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Data.Strict.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Utils.List1.List1 t) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.PlusLevel' t) instance Agda.TypeChecking.Reduce.Instantiate Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Tele t) instance Agda.TypeChecking.Reduce.Instantiate Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Reduce.Instantiate a, Agda.TypeChecking.Reduce.Instantiate b) => Agda.TypeChecking.Reduce.Instantiate (a, b) instance (Agda.TypeChecking.Reduce.Instantiate a, Agda.TypeChecking.Reduce.Instantiate b, Agda.TypeChecking.Reduce.Instantiate c) => Agda.TypeChecking.Reduce.Instantiate (a, b, c) instance Agda.TypeChecking.Reduce.Instantiate t => Agda.TypeChecking.Reduce.Instantiate (Agda.Syntax.Internal.Type' t) instance Agda.TypeChecking.Reduce.Instantiate () instance Agda.TypeChecking.Reduce.IsMeta a => Agda.TypeChecking.Reduce.IsMeta (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Reduce.IsMeta Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Reduce.IsMeta a => Agda.TypeChecking.Reduce.IsMeta (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Reduce.IsMeta a => Agda.TypeChecking.Reduce.IsMeta (Agda.Syntax.Internal.Level' a) instance Agda.TypeChecking.Reduce.IsMeta a => Agda.TypeChecking.Reduce.IsMeta (Agda.Syntax.Internal.PlusLevel' a) instance Agda.TypeChecking.Reduce.IsMeta a => Agda.TypeChecking.Reduce.IsMeta (Agda.Syntax.Internal.Sort' a) instance Agda.TypeChecking.Reduce.IsMeta Agda.Syntax.Internal.Term instance Agda.TypeChecking.Reduce.IsMeta a => Agda.TypeChecking.Reduce.IsMeta (Agda.Syntax.Internal.Type'' t a) instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.Normalise a) => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Common.Arg t) instance Agda.TypeChecking.Reduce.Normalise GHC.Types.Bool instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Reduce.Normalise GHC.Types.Char instance Agda.TypeChecking.Reduce.Normalise a => Agda.TypeChecking.Reduce.Normalise (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.ConPatternInfo instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Monad.Base.Constraint instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.DBPatVar instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Dom t) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Elim.Elim' t) instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.TypeChecking.Monad.Base.IPBoundary' t) instance Agda.TypeChecking.Reduce.Normalise GHC.Types.Int instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.Level instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise [t] instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Data.Map.Internal.Map k t) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Data.Strict.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Common.Named name t) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Utils.List1.List1 t) instance Agda.TypeChecking.Reduce.Normalise a => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Pattern' a) instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Reduce.Normalise Agda.TypeChecking.Monad.Base.ProblemConstraint instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.Sort instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.Normalise a) => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.Reduce.Normalise Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Reduce.Normalise a, Agda.TypeChecking.Reduce.Normalise b) => Agda.TypeChecking.Reduce.Normalise (a, b) instance (Agda.TypeChecking.Reduce.Normalise a, Agda.TypeChecking.Reduce.Normalise b, Agda.TypeChecking.Reduce.Normalise c) => Agda.TypeChecking.Reduce.Normalise (a, b, c) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Internal.Type' t) instance Agda.TypeChecking.Reduce.Normalise t => Agda.TypeChecking.Reduce.Normalise (Agda.Syntax.Common.WithHiding t) instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.Reduce a) => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Common.Arg t) instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Reduce.Reduce a => Agda.TypeChecking.Reduce.Reduce (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Monad.Base.Constraint instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.Syntax.Internal.Dom t) instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.Elim instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (Agda.TypeChecking.Monad.Base.IPBoundary' t) instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.Level instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce [t] instance Agda.TypeChecking.Reduce.Reduce e => Agda.TypeChecking.Reduce.Reduce (Data.Map.Internal.Map k e) instance Agda.TypeChecking.Reduce.Reduce t => Agda.TypeChecking.Reduce.Reduce (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.DeBruijnPattern instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.Telescope instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Reduce.Reduce a, Agda.TypeChecking.Reduce.Reduce b) => Agda.TypeChecking.Reduce.Reduce (a, b) instance (Agda.TypeChecking.Reduce.Reduce a, Agda.TypeChecking.Reduce.Reduce b, Agda.TypeChecking.Reduce.Reduce c) => Agda.TypeChecking.Reduce.Reduce (a, b, c) instance Agda.TypeChecking.Reduce.Reduce Agda.Syntax.Internal.Type instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.Simplify a) => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Common.Arg t) instance Agda.TypeChecking.Reduce.Simplify GHC.Types.Bool instance Agda.TypeChecking.Reduce.Simplify Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Reduce.Simplify a => Agda.TypeChecking.Reduce.Simplify (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.Reduce.Simplify Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Reduce.Simplify Agda.TypeChecking.Monad.Base.Constraint instance Agda.TypeChecking.Reduce.Simplify Agda.TypeChecking.Monad.Base.DisplayForm instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Dom t) instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Elim.Elim' t) instance Agda.TypeChecking.Reduce.Simplify Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.TypeChecking.Monad.Base.IPBoundary' t) instance Agda.TypeChecking.Reduce.Simplify Agda.Syntax.Internal.Level instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify [t] instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Data.Map.Internal.Map k t) instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Data.Strict.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (GHC.Internal.Maybe.Maybe t) instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Common.Named name t) instance Agda.TypeChecking.Reduce.Simplify Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Reduce.Simplify Agda.TypeChecking.Monad.Base.ProblemConstraint instance Agda.TypeChecking.Reduce.Simplify Agda.Syntax.Internal.Sort instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Reduce.Simplify a) => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Tele a) instance Agda.TypeChecking.Reduce.Simplify Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Reduce.Simplify a, Agda.TypeChecking.Reduce.Simplify b) => Agda.TypeChecking.Reduce.Simplify (a, b) instance (Agda.TypeChecking.Reduce.Simplify a, Agda.TypeChecking.Reduce.Simplify b, Agda.TypeChecking.Reduce.Simplify c) => Agda.TypeChecking.Reduce.Simplify (a, b, c) instance Agda.TypeChecking.Reduce.Simplify t => Agda.TypeChecking.Reduce.Simplify (Agda.Syntax.Internal.Type' t) module Agda.TypeChecking.Telescope -- | Flatten telescope: (Γ : Tel) -> [Type Γ] flattenTel :: TermSubst a => Tele (Dom a) -> [Dom a] -- | Turn a context into a flat telescope: all entries live in the whole -- context. (Γ : Context) -> [Type Γ] flattenContext :: Context -> [ContextEntry] -- | Order a flattened telescope in the correct dependeny order: Γ -> -- Permutation (Γ -> Γ~) -- -- Since reorderTel tel uses free variable analysis of type in -- tel, the telescope should be normalised. reorderTel :: [Dom Type] -> Maybe Permutation reorderTel_ :: [Dom Type] -> Permutation -- | Unflatten: turns a flattened telescope into a proper telescope. Must -- be properly ordered. unflattenTel :: [ArgName] -> [Dom Type] -> Telescope -- | A variant of unflattenTel which takes the size of the last -- argument as an argument. unflattenTel' :: Int -> [ArgName] -> [Dom Type] -> Telescope -- | Rename the variables in the telescope to the given names Precondition: -- size xs == size tel. renameTel :: [Maybe ArgName] -> Telescope -> Telescope -- | Get the suggested names from a telescope teleNames :: Telescope -> [ArgName] teleArgNames :: Telescope -> [Arg ArgName] teleArgs :: DeBruijn a => Tele (Dom t) -> [Arg a] teleDoms :: DeBruijn a => Tele (Dom t) -> [Dom a] teleNamedArgs :: DeBruijn a => Tele (Dom t) -> [NamedArg a] -- | A variant of teleNamedArgs which takes the argument names (and -- the argument info) from the first telescope and the variable names -- from the second telescope. -- -- Precondition: the two telescopes have the same length. tele2NamedArgs :: DeBruijn a => Telescope -> Telescope -> [NamedArg a] -- | Split the telescope at the specified position. splitTelescopeAt :: Int -> Telescope -> (Telescope, Telescope) -- | Permute telescope: permutes or drops the types in the telescope -- according to the given permutation. Assumes that the permutation -- preserves the dependencies in the telescope. -- -- For example (Andreas, 2016-12-18, issue #2344): tel = (A : Set) -- (X : _18 A) (i : Fin (_m_23 A X)) tel (de Bruijn) = 2:Set, 1:_18 -- 0, 0:Fin(_m_23 1 0) flattenTel tel = 2:Set, 1:_18 0, -- 0:Fin(_m_23 1 0) |- [ Set, _18 2, Fin (_m_23 2 -- 1) ] perm = 0,1,2 -> 0,1 (picks the first two) renaming _ perm -- = [var 0, var 1, error] -- THE WRONG RENAMING! renaming _ (flipP perm) -- = [error, var 1, var 0] -- The correct renaming! apply to flattened -- tel = ... |- [ Set, _18 1, Fin (_m_23 1 0) ] permute perm -- it = ... |- [ Set, _18 1 ] unflatten (de Bruijn) = 1:Set, 0: _18 -- 0 unflatten = (A : Set) (X : _18 A) permuteTel :: Permutation -> Telescope -> Telescope -- | Like permuteTel, but start with a context. permuteContext :: Permutation -> Context -> Telescope -- | Recursively computes dependencies of a set of variables in a given -- telescope. Any dependencies outside of the telescope are ignored. varDependencies :: Telescope -> IntSet -> IntSet -- | Computes the set of variables in a telescope whose type depend on one -- of the variables in the given set (including recursive dependencies). -- Any dependencies outside of the telescope are ignored. varDependents :: Telescope -> IntSet -> IntSet -- | A telescope split in two. data SplitTel SplitTel :: Telescope -> Telescope -> Permutation -> SplitTel [firstPart] :: SplitTel -> Telescope [secondPart] :: SplitTel -> Telescope -- | The permutation takes us from the original telescope to firstPart -- ++ secondPart. [splitPerm] :: SplitTel -> Permutation -- | Split a telescope into the part that defines the given variables and -- the part that doesn't. -- -- See prop_splitTelescope. splitTelescope :: VarSet -> Telescope -> SplitTel -- | As splitTelescope, but fails if any additional variables or reordering -- would be needed to make the first part well-typed. splitTelescopeExact :: [Int] -> Telescope -> Maybe SplitTel -- | Try to instantiate one variable in the telescope (given by its de -- Bruijn level) with the given value, returning the new telescope and a -- substitution to the old one. Returns Nothing if the given value -- depends (directly or indirectly) on the variable. instantiateTelescope :: Telescope -> Int -> DeBruijnPattern -> Maybe (Telescope, PatternSubstitution, Permutation) -- | Try to eta-expand one variable in the telescope (given by its de -- Bruijn level) expandTelescopeVar :: Telescope -> Int -> Telescope -> ConHead -> (Telescope, PatternSubstitution) -- | Gather leading Πs of a type in a telescope. telView :: (MonadReduce m, MonadAddContext m) => Type -> m TelView -- | telViewUpTo n t takes off the first n function types -- of t. Takes off all if n < 0. telViewUpTo :: (MonadReduce m, MonadAddContext m) => Int -> Type -> m TelView -- | telViewUpTo' n p t takes off $t$ the first n (or -- arbitrary many if n < 0) function domains as long as they -- satify p. telViewUpTo' :: (MonadReduce m, MonadAddContext m) => Int -> (Dom Type -> Bool) -> Type -> m TelView telViewPath :: PureTCM m => Type -> m TelView -- | telViewUpToPath n t takes off t the first n -- (or arbitrary many if n < 0) function domains or Path -- types. -- --
-- telViewUpToPath n t = fst $ telViewUpToPathBoundary' n t --telViewUpToPath :: PureTCM m => Int -> Type -> m TelView -- | Boundary conditions [[ (i,(x,y)) ]] = [(i=0) -> x, (i=1) -> -- y]. For instance, if p : Path A a b, then p i -- has boundary condition (i,(a,b)). We call i the -- dimension and (x,y) its boundary. newtype Boundary' x a Boundary :: [(x, (a, a))] -> Boundary' x a [theBoundary] :: Boundary' x a -> [(x, (a, a))] -- | Usually, the dimensions of a boundary condition are interval -- variables, represented by a de Bruijn index Int. type Boundary = Boundary' Int Term -- | Substitution formally creates dimensions that are interval -- expressions, represented by a Term. However, in -- practice these terms should be of the form var i. type TmBoundary = Boundary' Term Term -- | Turn dimension variables i into dimension expressions -- var i. tmBoundary :: Boundary' Int a -> Boundary' Term a -- | Turn dimension expressions into dimension variables. Formally this is -- a partial operation, but should only be called when the precondition -- is met. -- -- Precondition: the dimension terms in the boundary are all of the form -- var i. varBoundary :: Boundary' Term a -> Boundary' Int a -- | Like telViewUpToPath but also returns the Boundary -- expected by the Path types encountered. The boundary terms live in the -- telescope given by the TelView. Each point of the boundary has -- the type of the codomain of the Path type it got taken from, see -- fullBoundary. -- --
-- (TelV Γ b, [(i,t_i,u_i)]) <- telViewUpToPathBoundary' n a -- Input: Δ ⊢ a -- Output: Δ.Γ ⊢ b -- Δ.Γ ⊢ T is the codomain of the PathP at variable i -- Δ.Γ ⊢ i : I -- Δ.Γ ⊢ [ (i=0) -> t_i; (i=1) -> u_i ] : T ---- -- Useful to reconstruct IApplyP patterns after teleNamedArgs Γ. telViewUpToPathBoundary' :: PureTCM m => Int -> Type -> m (TelView, Boundary) fullBoundary :: Telescope -> Boundary -> Boundary -- | (TelV Γ b, [(i,t_i,u_i)]) <- telViewUpToPathBoundary n a -- Input: Δ ⊢ a Output: ΔΓ ⊢ b ΔΓ ⊢ i : I ΔΓ ⊢ [ (i=0) -> t_i; (i=1) -- -> u_i ] : b telViewUpToPathBoundary :: PureTCM m => Int -> Type -> m (TelView, Boundary) telViewPathBoundary :: PureTCM m => Type -> m (TelView, Boundary) -- | teleElimsB args bs = es Input: Δ.Γ ⊢ args : Γ Δ.Γ ⊢ T is the -- codomain of the PathP at variable i Δ.Γ ⊢ i : I Δ.Γ ⊢ bs = [ (i=0) -- -> t_i; (i=1) -> u_i ] : T Output: Δ.Γ | PiPath Γ bs A ⊢ es : A teleElims :: DeBruijn a => Telescope -> Boundary' Int a -> [Elim' a] -- | Reduces Type. pathViewAsPi :: PureTCM m => Type -> m (Either (Dom Type, Abs Type) Type) -- | Reduces Type. pathViewAsPi' :: PureTCM m => Type -> m (Either ((Dom Type, Abs Type), (Term, Term)) Type) pathViewAsPi'whnf :: HasBuiltins m => m (Type -> Either ((Dom Type, Abs Type), (Term, Term)) Type) -- | Returns Left (a,b) in case the type is Pi a b or -- PathP b _ _. Assumes the Type is in whnf. piOrPath :: HasBuiltins m => Type -> m (Either (Dom Type, Abs Type) Type) -- | Assumes Type is in whnf. telView'UpToPath :: Int -> Type -> TCM TelView telView'Path :: Type -> TCM TelView isPath :: PureTCM m => Type -> m (Maybe (Dom Type, Abs Type)) ifPath :: PureTCM m => Type -> (Dom Type -> Abs Type -> m a) -> (Type -> m a) -> m a ifPathB :: PureTCM m => Type -> (Dom Type -> Abs Type -> m a) -> (Blocked Type -> m a) -> m a ifNotPathB :: PureTCM m => Type -> (Blocked Type -> m a) -> (Dom Type -> Abs Type -> m a) -> m a ifPiOrPathB :: PureTCM m => Type -> (Dom Type -> Abs Type -> m a) -> (Blocked Type -> m a) -> m a ifNotPiOrPathB :: PureTCM m => Type -> (Blocked Type -> m a) -> (Dom Type -> Abs Type -> m a) -> m a telePatterns :: DeBruijn a => Telescope -> Boundary -> [NamedArg (Pattern' a)] telePatterns' :: DeBruijn a => (forall a1. DeBruijn a1 => Telescope -> [NamedArg a1]) -> Telescope -> Boundary -> [NamedArg (Pattern' a)] -- | Decomposing a function type. mustBePi :: MonadReduce m => Type -> m (Dom Type, Abs Type) -- | If the given type is a Pi, pass its parts to the first -- continuation. If not (or blocked), pass the reduced type to the second -- continuation. ifPi :: MonadReduce m => Term -> (Dom Type -> Abs Type -> m a) -> (Term -> m a) -> m a ifPiB :: MonadReduce m => Term -> (Dom Type -> Abs Type -> m a) -> (Blocked Term -> m a) -> m a ifPiTypeB :: MonadReduce m => Type -> (Dom Type -> Abs Type -> m a) -> (Blocked Type -> m a) -> m a -- | If the given type is a Pi, pass its parts to the first -- continuation. If not (or blocked), pass the reduced type to the second -- continuation. ifPiType :: MonadReduce m => Type -> (Dom Type -> Abs Type -> m a) -> (Type -> m a) -> m a -- | If the given type is blocked or not a Pi, pass it reduced to -- the first continuation. If it is a Pi, pass its parts to the -- second continuation. ifNotPi :: MonadReduce m => Term -> (Term -> m a) -> (Dom Type -> Abs Type -> m a) -> m a -- | If the given type is blocked or not a Pi, pass it reduced to -- the first continuation. If it is a Pi, pass its parts to the -- second continuation. ifNotPiType :: MonadReduce m => Type -> (Type -> m a) -> (Dom Type -> Abs Type -> m a) -> m a ifNotPiOrPathType :: (MonadReduce tcm, HasBuiltins tcm) => Type -> (Type -> tcm a) -> (Dom Type -> Abs Type -> tcm a) -> tcm a shouldBePath :: (PureTCM m, MonadBlock m, MonadTCError m) => Type -> m (Dom Type, Abs Type) shouldBePi :: (PureTCM m, MonadBlock m, MonadTCError m) => Type -> m (Dom Type, Abs Type) shouldBePiOrPath :: (PureTCM m, MonadBlock m, MonadTCError m) => Type -> m (Dom Type, Abs Type) -- | A safe variant of piApply. class PiApplyM a piApplyM' :: (PiApplyM a, MonadReduce m, HasBuiltins m) => m Empty -> Type -> a -> m Type piApplyM :: (PiApplyM a, MonadReduce m, HasBuiltins m) => Type -> a -> m Type -- | Compute type arity typeArity :: Type -> TCM Nat -- | Fold a telescope into a monadic computation, adding variables to the -- context at each step. foldrTelescopeM :: MonadAddContext m => (Dom (ArgName, Type) -> m b -> m b) -> m b -> Telescope -> m b instance Agda.Utils.Null.Null (Agda.TypeChecking.Telescope.Boundary' x a) instance Agda.TypeChecking.Telescope.PiApplyM a => Agda.TypeChecking.Telescope.PiApplyM (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Telescope.PiApplyM a => Agda.TypeChecking.Telescope.PiApplyM [a] instance Agda.TypeChecking.Telescope.PiApplyM a => Agda.TypeChecking.Telescope.PiApplyM (Agda.Syntax.Common.Named n a) instance Agda.TypeChecking.Telescope.PiApplyM Agda.Syntax.Internal.Term instance (Agda.Syntax.Common.Pretty.Pretty x, Agda.Syntax.Common.Pretty.Pretty a) => Agda.Syntax.Common.Pretty.Pretty (Agda.TypeChecking.Telescope.Boundary' x a) instance (GHC.Internal.Show.Show x, GHC.Internal.Show.Show a) => GHC.Internal.Show.Show (Agda.TypeChecking.Telescope.Boundary' x a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Telescope.TmBoundary instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Telescope.Boundary -- | A syntactic equality check that takes meta instantiations into -- account, but does not reduce. It replaces (v, v') <- -- instantiateFull (v, v') v == v' by a more efficient routine -- which only traverses and instantiates the terms as long as they are -- equal. module Agda.TypeChecking.SyntacticEquality -- | Instantiate full as long as things are equal class SynEq a -- | Syntactic equality check for terms. If syntactic equality checking has -- fuel left, then checkSyntacticEquality behaves as if it were -- implemented in the following way (which does not match the given type -- signature), only that v and v' are only fully -- instantiated to the depth where they are equal (and the amount of fuel -- is reduced by one unit in the failure branch): -- checkSyntacticEquality v v' s f = do (v, v') <- instantiateFull (v, -- v') if v == v' then s v v' else f v v' If syntactic equality -- checking does not have fuel left, then checkSyntacticEquality -- instantiates the two terms and takes the failure branch. -- -- Note that in either case the returned values v and -- v' cannot be MetaVs that are instantiated. checkSyntacticEquality :: (Instantiate a, SynEq a, MonadReduce m) => a -> a -> (a -> a -> m b) -> (a -> a -> m b) -> m b -- | Syntactic equality check for terms without checking remaining fuel. checkSyntacticEquality' :: (Instantiate a, SynEq a, MonadReduce m) => a -> a -> (a -> a -> m b) -> (a -> a -> m b) -> m b -- | Does the syntactic equality check have any remaining fuel? syntacticEqualityFuelRemains :: MonadReduce m => m Bool instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.SyntacticEquality.SynEq a) => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.SyntacticEquality.SynEq a => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Common.ArgInfo instance Agda.TypeChecking.SyntacticEquality.SynEq GHC.Types.Bool instance Agda.TypeChecking.SyntacticEquality.SynEq a => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.SyntacticEquality.SynEq a => Agda.TypeChecking.SyntacticEquality.SynEq (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Internal.Level instance Agda.TypeChecking.SyntacticEquality.SynEq a => Agda.TypeChecking.SyntacticEquality.SynEq [a] instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Internal.Sort instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Internal.Term instance (Agda.TypeChecking.SyntacticEquality.SynEq a, Agda.TypeChecking.SyntacticEquality.SynEq b) => Agda.TypeChecking.SyntacticEquality.SynEq (a, b) instance Agda.TypeChecking.SyntacticEquality.SynEq Agda.Syntax.Internal.Type -- | Tools to manipulate patterns in internal syntax in the TCM (type -- checking monad). module Agda.TypeChecking.Patterns.Internal -- | Convert a term (from a dot pattern) to a DeBruijn pattern. class TermToPattern a b termToPattern :: TermToPattern a b => a -> TCM b ($dmtermToPattern) :: forall a' b' (f :: Type -> Type). (TermToPattern a b, TermToPattern a' b', Traversable f, a ~ f a', b ~ f b') => a -> TCM b dotPatternsToPatterns :: DeBruijn (Pattern' a) => Pattern' a -> TCM (Pattern' a) instance Agda.TypeChecking.Patterns.Internal.TermToPattern a b => Agda.TypeChecking.Patterns.Internal.TermToPattern (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b) instance Agda.TypeChecking.Patterns.Internal.TermToPattern a b => Agda.TypeChecking.Patterns.Internal.TermToPattern [a] [b] instance Agda.TypeChecking.Patterns.Internal.TermToPattern a b => Agda.TypeChecking.Patterns.Internal.TermToPattern (Agda.Syntax.Common.Named c a) (Agda.Syntax.Common.Named c b) instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn (Agda.Syntax.Internal.Pattern' a) => Agda.TypeChecking.Patterns.Internal.TermToPattern Agda.Syntax.Internal.Term (Agda.Syntax.Internal.Pattern' a) module Agda.TypeChecking.Level data LevelKit LevelKit :: Term -> (Term -> Term) -> (Term -> Term -> Term) -> Term -> QName -> QName -> QName -> QName -> LevelKit [lvlType] :: LevelKit -> Term [lvlSuc] :: LevelKit -> Term -> Term [lvlMax] :: LevelKit -> Term -> Term -> Term [lvlZero] :: LevelKit -> Term [typeName] :: LevelKit -> QName [sucName] :: LevelKit -> QName [maxName] :: LevelKit -> QName [zeroName] :: LevelKit -> QName -- | Get the primLevel as a Type. Aborts if any of the level -- BUILTINs is undefined. levelType :: (HasBuiltins m, MonadTCError m) => m Type -- | Get the primLevel as a Type. Unsafe, crashes if the -- BUILTIN LEVEL is undefined. levelType' :: HasBuiltins m => m Type isLevelType :: PureTCM m => Type -> m Bool builtinLevelKit :: HasBuiltins m => m LevelKit -- | Raises an error if no level kit is available. requireLevels :: (HasBuiltins m, MonadTCError m) => m LevelKit -- | Checks whether level kit is fully available. haveLevels :: HasBuiltins m => m Bool unLevel :: HasBuiltins m => Term -> m Term reallyUnLevelView :: HasBuiltins m => Level -> m Term unlevelWithKit :: LevelKit -> Level -> Term unConstV :: Term -> (Term -> Term) -> Integer -> Term unPlusV :: (Term -> Term) -> PlusLevel -> Term levelView :: PureTCM m => Term -> m Level levelView' :: PureTCM m => Term -> m Level -- | Given a level l, find the maximum constant n such -- that l = n + l' levelPlusView :: Level -> (Integer, Level) -- | Given a level l, find the biggest constant n such -- that n <= l levelLowerBound :: Level -> Integer -- | Given a constant n and a level l, find the level -- l' such that l = n + l' (or Nothing if there is no -- such level). Operates on levels in canonical form. subLevel :: Integer -> Level -> Maybe Level -- | Given two levels a and b, try to decompose the first -- one as a = a' ⊔ b (for the minimal value of a'). levelMaxDiff :: Level -> Level -> Maybe Level -- | A SingleLevel is a Level that cannot be further -- decomposed as a maximum a ⊔ b. data SingleLevel' t SingleClosed :: Integer -> SingleLevel' t SinglePlus :: PlusLevel' t -> SingleLevel' t type SingleLevel = SingleLevel' Term unSingleLevel :: SingleLevel' t -> Level' t -- | Return the maximum of the given SingleLevels unSingleLevels :: [SingleLevel] -> Level levelMaxView :: Level' t -> List1 (SingleLevel' t) singleLevelView :: Level' t -> Maybe (SingleLevel' t) instance GHC.Classes.Eq Agda.TypeChecking.Level.SingleLevel instance GHC.Internal.Data.Foldable.Foldable Agda.TypeChecking.Level.SingleLevel' instance Agda.TypeChecking.Free.Lazy.Free t => Agda.TypeChecking.Free.Lazy.Free (Agda.TypeChecking.Level.SingleLevel' t) instance GHC.Internal.Base.Functor Agda.TypeChecking.Level.SingleLevel' instance GHC.Internal.Show.Show t => GHC.Internal.Show.Show (Agda.TypeChecking.Level.SingleLevel' t) instance Agda.TypeChecking.Substitute.Class.Subst t => Agda.TypeChecking.Substitute.Class.Subst (Agda.TypeChecking.Level.SingleLevel' t) instance GHC.Internal.Data.Traversable.Traversable Agda.TypeChecking.Level.SingleLevel' module Agda.TypeChecking.LevelConstraints -- | simplifyLevelConstraint c cs turns an c into an -- equality constraint if it is an inequality constraint and the reverse -- inequality is contained in cs. -- -- The constraints don't necessarily have to live in the same context, -- but they do need to be universally quanitfied over the context. This -- function takes care of renaming variables when checking for matches. simplifyLevelConstraint :: Constraint -> List1 Constraint -> Maybe [Constraint] instance GHC.Classes.Eq Agda.TypeChecking.LevelConstraints.Leq instance GHC.Internal.Show.Show Agda.TypeChecking.LevelConstraints.Leq module Agda.TypeChecking.Level.Solve -- | Run the given action. If --cumulativity is off, that's it. -- -- Otherwise, at the end, take all new metavariables of type level for -- which the only constraints are upper bounds on the level, and -- instantiate them to the lowest level. defaultOpenLevelsToZero :: (PureTCM m, MonadMetaSolver m) => m a -> m a defaultLevelsToZero :: (PureTCM m, MonadMetaSolver m) => LocalMetaStore -> m () -- | Free variable check that reduces the subject to make certain variables -- not free. Used when pruning metavariables in -- Agda.TypeChecking.MetaVars.Occurs. module Agda.TypeChecking.Free.Reduce class (PrecomputeFreeVars a, Subst a) => ForceNotFree a -- | Try to enforce a set of variables not occurring in a given type. -- Returns a possibly reduced version of the type and for each of the -- given variables whether it is either not free, or maybe free depending -- on some metavariables. forceNotFree :: (ForceNotFree a, Reduce a, MonadReduce m) => IntSet -> a -> m (IntMap IsFree, a) -- | Checks if the given term contains any free variables that are in the -- given set of variables, possibly reducing the term in the process. -- Returns `Right Nothing` if there are such variables, `Right (Just v')` -- if there are none (where v' is the possibly reduced version of the -- given term) or `Left b` if the problem is blocked on a meta. reallyFree :: (MonadReduce m, Reduce a, ForceNotFree a) => IntSet -> a -> m (Either Blocked_ (Maybe a)) -- | A variable can either not occur (NotFree) or it does occur -- (MaybeFree). In the latter case, the occurrence may disappear -- depending on the instantiation of some set of metas. data IsFree MaybeFree :: MetaSet -> IsFree NotFree :: IsFree instance GHC.Classes.Eq Agda.TypeChecking.Free.Reduce.IsFree instance (Agda.TypeChecking.Reduce.Reduce a, Agda.TypeChecking.Free.Reduce.ForceNotFree a) => Agda.TypeChecking.Free.Reduce.ForceNotFree (Agda.Syntax.Internal.Abs a) instance (Agda.TypeChecking.Reduce.Reduce a, Agda.TypeChecking.Free.Reduce.ForceNotFree a) => Agda.TypeChecking.Free.Reduce.ForceNotFree (Agda.Syntax.Common.Arg a) instance (Agda.TypeChecking.Reduce.Reduce a, Agda.TypeChecking.Free.Reduce.ForceNotFree a, Agda.TypeChecking.Substitute.Class.TermSubst a) => Agda.TypeChecking.Free.Reduce.ForceNotFree (Agda.Syntax.Internal.Dom a) instance (Agda.TypeChecking.Reduce.Reduce a, Agda.TypeChecking.Free.Reduce.ForceNotFree a) => Agda.TypeChecking.Free.Reduce.ForceNotFree (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Free.Reduce.ForceNotFree Agda.Syntax.Internal.Level instance Agda.TypeChecking.Free.Reduce.ForceNotFree a => Agda.TypeChecking.Free.Reduce.ForceNotFree [a] instance Agda.TypeChecking.Free.Reduce.ForceNotFree Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Free.Reduce.ForceNotFree Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Free.Reduce.ForceNotFree Agda.Syntax.Internal.Term instance Agda.TypeChecking.Free.Reduce.ForceNotFree Agda.Syntax.Internal.Type instance GHC.Internal.Show.Show Agda.TypeChecking.Free.Reduce.IsFree -- | Tools for DisplayTerm and DisplayForm. module Agda.TypeChecking.DisplayForm -- | Find a matching display form for q es. In essence this tries -- to rewrite q es with any display form q ps --> dt -- and returns the instantiated dt if successful. First match -- wins. displayForm :: MonadDisplayForm m => QName -> Elims -> m (Maybe DisplayTerm) instance Agda.TypeChecking.DisplayForm.Match a => Agda.TypeChecking.DisplayForm.Match (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.DisplayForm.Match a => Agda.TypeChecking.DisplayForm.Match (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.DisplayForm.Match Agda.Syntax.Internal.Level instance Agda.TypeChecking.DisplayForm.Match a => Agda.TypeChecking.DisplayForm.Match [a] instance Agda.TypeChecking.DisplayForm.Match Agda.Syntax.Internal.Sort instance Agda.TypeChecking.DisplayForm.Match Agda.Syntax.Internal.Term instance Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Common.Arg Agda.Syntax.Internal.Term) instance Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Common.Arg Agda.TypeChecking.Monad.Base.DisplayTerm) instance Agda.TypeChecking.DisplayForm.SubstWithOrigin Agda.TypeChecking.Monad.Base.DisplayTerm instance (Agda.TypeChecking.DisplayForm.SubstWithOrigin a, Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Common.Arg a)) => Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.DisplayForm.SubstWithOrigin a => Agda.TypeChecking.DisplayForm.SubstWithOrigin [a] instance Agda.TypeChecking.DisplayForm.SubstWithOrigin a => Agda.TypeChecking.DisplayForm.SubstWithOrigin (Agda.Utils.List1.List1 a) instance Agda.TypeChecking.DisplayForm.SubstWithOrigin Agda.Syntax.Internal.Term module Agda.TypeChecking.DeadCode -- | Run before serialisation to remove data that's not reachable from the -- public interface. We do not compute reachable data precisely, because -- that would be very expensive, mainly because of rewrite rules. The -- following things are assumed to be "roots": - public definitions - -- definitions marked as primitive - definitions with COMPILE pragma - -- all pattern synonyms (because currently all of them go into -- interfaces) - all parameter sections (because currently all of them go -- into interfaces) (see also issues #6931 and #7382) - local builtins - -- all rewrite rules - closed display forms We only ever prune dead -- metavariables and definitions. We return the pruned metas, pruned -- definitions and closed display forms. eliminateDeadCode :: ScopeInfo -> TCM (RemoteMetaStore, Definitions, DisplayForms) module Agda.TypeChecking.CompiledClause.Match matchCompiled :: CompiledClauses -> MaybeReducedArgs -> ReduceM (Reduced (Blocked Args) Term) -- | matchCompiledE c es takes a function given by case tree -- c and and a spine es and tries to apply the function -- to es. matchCompiledE :: CompiledClauses -> MaybeReducedElims -> ReduceM (Reduced (Blocked Elims) Term) -- | A stack entry is a triple consisting of 1. the part of the case tree -- to continue matching, 2. the current argument vector, and 3. a patch -- function taking the current argument vector back to the original -- argument vector. type Frame = (CompiledClauses, MaybeReducedElims, Elims -> Elims) type Stack = [Frame] -- | match' tries to solve the matching problems on the -- Stack. In each iteration, the top problem is removed and -- handled. -- -- If the top problem was a Done, we succeed. -- -- If the top problem was a Case n and the nth argument -- of the problem is not a constructor or literal, we are stuck, thus, -- fail. -- -- If we have a branch for the constructor/literal, we put it on the -- stack to continue. If we do not have a branch, we fall through to the -- next problem, which should be the corresponding catch-all branch. -- -- An empty stack is an exception that can come only from an incomplete -- function definition. match' :: Stack -> ReduceM (Reduced (Blocked Elims) Term) -- | Checking for recursion: -- --
-- sequenceAFoldable == sequenceA . Fold.toList --sequenceAFoldable :: (Applicative m, Foldable t) => t (m a) -> m [a] superscript :: Applicative m => Int -> m Doc text :: Applicative m => String -> m Doc vcat :: (Applicative m, Foldable t) => t (m Doc) -> m Doc vsep :: (Applicative m, Foldable t) => t (m Doc) -> m Doc type Doc = Doc type MonadPretty (m :: Type -> Type) = MonadAbsToCon m newtype PrettyContext PrettyContext :: Context -> PrettyContext class PrettyTCM a prettyTCM :: (PrettyTCM a, MonadPretty m) => a -> m Doc -- | Pretty-print something paired with a (printable) node. | This -- intermediate typeclass exists to avoid UndecidableInstances. class PrettyTCMWithNode a prettyTCMWithNode :: (PrettyTCMWithNode a, PrettyTCM n, MonadPretty m) => WithNode n a -> m Doc -- | Pairing something with a node (for printing only). data WithNode n a WithNode :: n -> a -> WithNode n a -- | Preconditions to run the AbstractToConcrete translation. type MonadAbsToCon (m :: Type -> Type) = (MonadFresh NameId m, MonadInteractionPoints m, MonadStConcreteNames m, HasOptions m, PureTCM m, IsString m Doc, Null m Doc, Semigroup m Doc) instance (Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Substitute.Class.Subst a) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Scope.Base.AbstractName instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Arg Agda.Syntax.Internal.Term) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Arg Agda.Syntax.Internal.Type) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Arg GHC.Types.Bool) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Arg GHC.Internal.Base.String) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Arg Agda.Syntax.Abstract.Expr) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.NamedArg Agda.Syntax.Abstract.Expr) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.NamedArg Agda.Syntax.Internal.Term) instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Blocked a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Blockers.Blocker instance Agda.TypeChecking.Pretty.PrettyTCM GHC.Types.Bool instance (Agda.TypeChecking.Pretty.PrettyTCM x, Agda.TypeChecking.Pretty.PrettyTCM a) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.Telescope.Boundary' x a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.Candidate instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.CheckpointId instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Clause instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.Monad.Base.Closure a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.CompareAs instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.Types.Comparison instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.ConHead instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.Types.ContextEntry instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.DBPatVar instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.DiscrimTree.Types.DiscrimTree a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.DisplayTerm instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Elim instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Elim.Elim' Agda.TypeChecking.Monad.Base.DisplayTerm) instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Elim.Elim' Agda.TypeChecking.Monad.Base.NLPat) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.EqualityView instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.Erased instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.Expr instance (Agda.TypeChecking.Pretty.PrettyTCM n, Agda.TypeChecking.Pretty.PrettyTCMWithNode e) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Utils.Graph.AdjacencyMap.Unidirectional.Graph n e) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Concrete.ImportedName instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.Nat instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.InteractionId instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.IsForced instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.Monad.Base.Judgement a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.DiscrimTree.Types.Key instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Concrete.LHS instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Level instance Agda.TypeChecking.Pretty.PrettyTCM GHC.Internal.Base.String instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM [a] instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Literal.Literal instance (Agda.TypeChecking.Pretty.PrettyTCM k, Agda.TypeChecking.Pretty.PrettyTCM v) => Agda.TypeChecking.Pretty.PrettyTCM (Data.Map.Internal.Map k v) instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.Monad.Base.MaybeReduced a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.ModalPolarity instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.Modality instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.Name.ModuleName instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.Name.Name instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Concrete.Name.Name instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.Named_ Agda.Syntax.Internal.Term) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Translation.InternalToAbstract.NamedClause instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.Types.NamedMeta instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Utils.List1.List1 a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Positivity.Occurrence.Occurrence instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Pattern' a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.Pattern instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Utils.Permutation.Permutation instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.Types.Polarity instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.PolarityModality instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Pretty.PrettyContext instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.ProblemId instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Concrete.Name.QName instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Abstract.Name.QNamed Agda.Syntax.Internal.Clause) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.Quantity instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Position.Range instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.Relevance instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Data.Set.Internal.Set a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Coverage.SplitTree.SplitTag instance (Agda.Syntax.Common.Pretty.Pretty a, Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Substitute.Class.EndoSubst a) => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Substitution' a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Telescope instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Term instance Agda.TypeChecking.Pretty.PrettyTCM Data.Text.Internal.Text instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.TopLevelModuleName.TopLevelModuleName instance (Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Pretty.PrettyTCM b) => Agda.TypeChecking.Pretty.PrettyTCM (a, b) instance (Agda.TypeChecking.Pretty.PrettyTCM a, Agda.TypeChecking.Pretty.PrettyTCM b, Agda.TypeChecking.Pretty.PrettyTCM c) => Agda.TypeChecking.Pretty.PrettyTCM (a, b, c) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.Type instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Internal.Type' Agda.TypeChecking.Monad.Base.NLPat) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.TypeCheckingProblem instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.TypedBinding instance Agda.TypeChecking.Pretty.PrettyTCM a => Agda.TypeChecking.Pretty.PrettyTCM (Agda.Syntax.Common.WithHiding a) instance Agda.TypeChecking.Pretty.PrettyTCMWithNode Agda.TypeChecking.Positivity.Occurrence.Occurrence instance GHC.Internal.Base.Semigroup (Agda.TypeChecking.Monad.Base.TCM Agda.TypeChecking.Pretty.Doc) module Agda.TypeChecking.Telescope.Path -- | In an ambient context Γ, telePiPath f lams Δ t bs builds a -- type that can be telViewPathBoundaryed into (TelV Δ t, -- bs'). Γ.Δ ⊢ t bs = [(i,u_i)] Δ = Δ0,(i : I),Δ1 ∀ b ∈ {0,1}. Γ.Δ0 | -- lams Δ1 (u_i .b) : (telePiPath f Δ1 t bs)(i = b) -- kinda: see lams Γ -- ⊢ telePiPath f Δ t bs telePiPath :: (Abs Type -> Abs Type) -> ([Arg ArgName] -> Term -> Term) -> Telescope -> Type -> Boundary -> TCM Type -- | telePiPath_ Δ t [(i,u)] Δ ⊢ t i ∈ Δ Δ ⊢ u_b : t for b ∈ {0,1} telePiPath_ :: Telescope -> Type -> Boundary -> TCM Type -- | arity of the type, including both Pi and Path. Does not reduce the -- type. arityPiPath :: Type -> TCM Int -- | Collect the interval copattern variables as list of de Bruijn indices. class IApplyVars p iApplyVars :: IApplyVars p => p -> [Int] -- | Check whether a type is the built-in interval type. isInterval :: (MonadTCM m, MonadReduce m) => Type -> m Bool instance Agda.TypeChecking.Telescope.Path.IApplyVars p => Agda.TypeChecking.Telescope.Path.IApplyVars (Agda.Syntax.Common.NamedArg p) instance Agda.TypeChecking.Telescope.Path.IApplyVars p => Agda.TypeChecking.Telescope.Path.IApplyVars [p] instance Agda.TypeChecking.Substitute.DeBruijn.DeBruijn a => Agda.TypeChecking.Telescope.Path.IApplyVars (Agda.Syntax.Internal.Pattern' a) module Agda.TypeChecking.SizedTypes.WarshallSolver type Graph r f a = Graph Node r f a type Edge' r f a = Edge Node r f a type Key r f = Edge' r f () type Nodes r f = Nodes Node r f type LabelledEdge r f = Edge' r f Label src :: Edge n e -> n dest :: Edge n e -> n lookupEdge :: Ord n => Graph n e -> n -> n -> Maybe e graphToList :: Graph n e -> [Edge n e] graphFromList :: Ord n => [Edge n e] -> Graph n e insertEdge :: (Ord n, MeetSemiLattice e, Top e) => Edge n e -> Graph n e -> Graph n e -- | Compute list of edges that start in a given node. outgoing :: (Ord r, Ord f) => Graph r f a -> Node r f -> [Edge' r f a] -- | Compute list of edges that target a given node. -- -- Note: expensive for unidirectional graph representations. incoming :: (Ord r, Ord f) => Graph r f a -> Node r f -> [Edge' r f a] -- | Set.foldl does not exist in legacy versions of the -- containers package. setFoldl :: (b -> a -> b) -> b -> Set a -> b -- | Floyd-Warshall algorithm. transClos :: (Ord n, Dioid a) => Graph n a -> Graph n a data Weight Offset :: Offset -> Weight Infinity :: Weight -- | Test for negativity, used to detect negative cycles. class Negative a negative :: Negative a => a -> Bool -- | Going from Lt to Le is pred, going from -- Le to Lt is succ. -- -- X --(R,n)--> Y means X (R) Y + n. [ ... if -- n positive and X + (-n) (R) Y if n -- negative. ] data Label Label :: Cmp -> Offset -> Label [lcmp] :: Label -> Cmp [loffset] :: Label -> Offset -- | Nodes not connected. LInf :: Label -- | Convert a label to a weight, decrementing in case of Lt. toWeight :: Label -> Weight data Node rigid flex NodeZero :: Node rigid flex NodeInfty :: Node rigid flex NodeRigid :: rigid -> Node rigid flex NodeFlex :: flex -> Node rigid flex isFlexNode :: Node rigid flex -> Maybe flex isZeroNode :: Node rigid flex -> Bool isInftyNode :: Node rigid flex -> Bool nodeToSizeExpr :: Node rigid flex -> SizeExpr' rigid flex -- | A graph forest. type Graphs r f a = [Graph r f a] emptyGraphs :: Graphs r f a -- | Split a list of graphs gs into those that mention node -- n and those that do not. If n is zero or infinity, -- we regard it as "not mentioned". mentions :: (Ord r, Ord f) => Node r f -> Graphs r f a -> (Graphs r f a, Graphs r f a) -- | Add an edge to a graph forest. Graphs that share a node with the edge -- are joined. addEdge :: (Ord r, Ord f, MeetSemiLattice a, Top a) => Edge' r f a -> Graphs r f a -> Graphs r f a -- | Reflexive closure. Add edges 0 -> n -> n -> oo for -- all nodes n. reflClos :: (Ord r, Ord f, Dioid a) => Set (Node r f) -> Graph r f a -> Graph r f a -- | h implies g if any edge in g between rigids -- and constants is implied by a corresponding edge in h, which -- means that the edge in g carries at most the information of -- the one in h. -- -- Application: Constraint implication: Constraints are compatible with -- hypotheses. implies :: (Ord r, Ord f, Pretty r, Pretty f, Pretty a, Top a, Ord a, Negative a) => Graph r f a -> Graph r f a -> Bool nodeFromSizeExpr :: SizeExpr' rigid flex -> (Node rigid flex, Offset) edgeFromConstraint :: Constraint' rigid flex -> LabelledEdge rigid flex -- | Build a graph from list of simplified constraints. graphFromConstraints :: (Ord rigid, Ord flex) => [Constraint' rigid flex] -> Graph rigid flex Label -- | Build a graph from list of simplified constraints. graphsFromConstraints :: (Ord rigid, Ord flex) => [Constraint' rigid flex] -> Graphs rigid flex Label -- | Error messages produced by the solver. type Error = TCM Doc type CTrans r f = Constraint' r f -> Either Error [Constraint' r f] simplify1 :: (Pretty f, Pretty r, Eq r) => CTrans r f -> CTrans r f type Hyp = Constraint type Hyp' = Constraint' type HypGraph r f = Graph r f Label hypGraph :: (Ord rigid, Ord flex, Pretty rigid, Pretty flex) => Set rigid -> [Hyp' rigid flex] -> Either Error (HypGraph rigid flex) hypConn :: (Ord r, Ord f) => HypGraph r f -> Node r f -> Node r f -> Label simplifyWithHypotheses :: (Ord rigid, Ord flex, Pretty rigid, Pretty flex) => HypGraph rigid flex -> [Constraint' rigid flex] -> Either Error [Constraint' rigid flex] type ConGraph r f = Graph r f Label constraintGraph :: (Ord r, Ord f, Pretty r, Pretty f) => [Constraint' r f] -> HypGraph r f -> Either Error (ConGraph r f) type ConGraphs r f = Graphs r f Label constraintGraphs :: (Ord r, Ord f, Pretty r, Pretty f) => [Constraint' r f] -> HypGraph r f -> Either Error ([f], ConGraphs r f) -- | If we have an edge X + n <= X (with n >= 0), we must -- set X = oo. infinityFlexs :: (Ord r, Ord f) => ConGraph r f -> ([f], ConGraph r f) class SetToInfty f a setToInfty :: SetToInfty f a => [f] -> a -> a -- | Lower or upper bound for a flexible variable type Bound r f = Map f Set SizeExpr' r f emptyBound :: Bound r f data Bounds r f Bounds :: Bound r f -> Bound r f -> Set f -> Bounds r f [lowerBounds] :: Bounds r f -> Bound r f [upperBounds] :: Bounds r f -> Bound r f -- | These metas are < ∞. [mustBeFinite] :: Bounds r f -> Set f -- | Compute a lower bound for a flexible from an edge. edgeToLowerBound :: LabelledEdge r f -> Maybe (f, SizeExpr' r f) -- | Compute an upper bound for a flexible from an edge. edgeToUpperBound :: LabelledEdge r f -> Maybe (f, Cmp, SizeExpr' r f) -- | Compute the lower bounds for all flexibles in a graph. graphToLowerBounds :: (Ord r, Ord f) => [LabelledEdge r f] -> Bound r f -- | Compute the upper bounds for all flexibles in a graph. graphToUpperBounds :: (Ord r, Ord f) => [LabelledEdge r f] -> (Bound r f, Set f) -- | Compute the bounds for all flexibles in a graph. bounds :: (Ord r, Ord f) => ConGraph r f -> Bounds r f -- | Compute the relative minima in a set of nodes (those that do not have -- a predecessor in the set). smallest :: (Ord r, Ord f) => HypGraph r f -> [Node r f] -> [Node r f] -- | Compute the relative maxima in a set of nodes (those that do not have -- a successor in the set). largest :: (Ord r, Ord f) => HypGraph r f -> [Node r f] -> [Node r f] -- | Given source nodes n1,n2,... find all target nodes m1,m2, such that -- for all j, there are edges n_i --l_ij--> m_j for all i. Return -- these edges as a map from target notes to a list of edges. We assume -- the graph is reflexive-transitive. commonSuccs :: (Ord r, Ord f) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a] -- | Given target nodes m1,m2,... find all source nodes n1,n2, such that -- for all j, there are edges n_i --l_ij--> m_j for all i. Return -- these edges as a map from target notes to a list of edges. We assume -- the graph is reflexive-transitive. commonPreds :: (Ord r, Ord f) => Graph r f a -> [Node r f] -> Map (Node r f) [Edge' r f a] -- | Compute the sup of two different rigids or a rigid and a constant. lub' :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f) -- | Compute the inf of two different rigids or a rigid and a constant. glb' :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f) -- | Compute the least upper bound (sup). lub :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> SizeExpr' r f -> SizeExpr' r f -> Maybe (SizeExpr' r f) -- | Compute the greatest lower bound (inf) of size expressions relative to -- a hypotheses graph. glb :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> SizeExpr' r f -> SizeExpr' r f -> Maybe (SizeExpr' r f) findRigidBelow :: (Ord r, Ord f) => HypGraph r f -> SizeExpr' r f -> Maybe (SizeExpr' r f) solveGraph :: (Ord r, Ord f, Pretty r, Pretty f, PrettyTCM f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraph r f -> Either Error (Solution r f) -- | Solve a forest of constraint graphs relative to a hypotheses graph. -- Concatenate individual solutions. solveGraphs :: (Ord r, Ord f, Pretty r, Pretty f, PrettyTCM f, Show r, Show f) => Polarities f -> HypGraph r f -> ConGraphs r f -> Either Error (Solution r f) -- | Check that after substitution of the solution, constraints are implied -- by hypotheses. verifySolution :: (Ord r, Ord f, Pretty r, Pretty f, Show r, Show f) => HypGraph r f -> [Constraint' r f] -> Solution r f -> Either Error () -- | Iterate solver until no more metas can be solved. -- -- This might trigger a (wanted) error on the second iteration (see Issue -- 2096) which would otherwise go unnoticed. iterateSolver :: (Ord r, Ord f, Pretty r, Pretty f, PrettyTCM f, Show r, Show f) => Polarities f -> HypGraph r f -> [Constraint' r f] -> Solution r f -> Either Error (Solution r f) testSuccs :: Ord f => Map (Node [Char] f) [Edge' [Char] f Label] testLub :: (Pretty f, Ord f, Show f) => Maybe (SizeExpr' [Char] f) instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.Dioid a) => Agda.TypeChecking.SizedTypes.Utils.Dioid (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a) instance Agda.TypeChecking.SizedTypes.Utils.Dioid Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance Agda.TypeChecking.SizedTypes.Utils.Dioid Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance GHC.Internal.Enum.Enum Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance GHC.Classes.Eq Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance (GHC.Classes.Eq rigid, GHC.Classes.Eq flex) => GHC.Classes.Eq (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex) instance GHC.Classes.Eq Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice a) => Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a) instance Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance Agda.TypeChecking.SizedTypes.Utils.MeetSemiLattice Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance Agda.TypeChecking.SizedTypes.WarshallSolver.Negative a => Agda.TypeChecking.SizedTypes.WarshallSolver.Negative (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a) instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.WarshallSolver.Negative a) => Agda.TypeChecking.SizedTypes.WarshallSolver.Negative (Agda.TypeChecking.SizedTypes.WarshallSolver.Graph r f a) instance Agda.TypeChecking.SizedTypes.WarshallSolver.Negative GHC.Types.Int instance Agda.TypeChecking.SizedTypes.WarshallSolver.Negative Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.WarshallSolver.Negative a) => Agda.TypeChecking.SizedTypes.WarshallSolver.Negative (Agda.TypeChecking.SizedTypes.WarshallSolver.Graphs r f a) instance Agda.TypeChecking.SizedTypes.WarshallSolver.Negative Agda.TypeChecking.SizedTypes.Syntax.Offset instance Agda.TypeChecking.SizedTypes.WarshallSolver.Negative Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance GHC.Internal.Num.Num Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance GHC.Classes.Ord Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance (GHC.Classes.Ord rigid, GHC.Classes.Ord flex) => GHC.Classes.Ord (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex) instance GHC.Classes.Ord Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance Agda.TypeChecking.SizedTypes.Utils.Plus Agda.TypeChecking.SizedTypes.Syntax.Offset Agda.TypeChecking.SizedTypes.WarshallSolver.Weight Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance Agda.TypeChecking.SizedTypes.Utils.Plus (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' r f) Agda.TypeChecking.SizedTypes.WarshallSolver.Label (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' r f) instance Agda.TypeChecking.SizedTypes.Utils.Plus (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' r f) Agda.TypeChecking.SizedTypes.WarshallSolver.Weight (Agda.TypeChecking.SizedTypes.Syntax.SizeExpr' r f) instance Agda.TypeChecking.SizedTypes.Utils.Plus Agda.TypeChecking.SizedTypes.WarshallSolver.Weight Agda.TypeChecking.SizedTypes.Syntax.Offset Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance (Agda.Syntax.Common.Pretty.Pretty rigid, Agda.Syntax.Common.Pretty.Pretty flex) => Agda.Syntax.Common.Pretty.Pretty (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex) instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance GHC.Classes.Eq f => Agda.TypeChecking.SizedTypes.WarshallSolver.SetToInfty f (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a) instance (GHC.Classes.Ord r, GHC.Classes.Ord f) => Agda.TypeChecking.SizedTypes.WarshallSolver.SetToInfty f (Agda.TypeChecking.SizedTypes.WarshallSolver.ConGraph r f) instance GHC.Classes.Eq f => Agda.TypeChecking.SizedTypes.WarshallSolver.SetToInfty f (Agda.TypeChecking.SizedTypes.WarshallSolver.Node r f) instance GHC.Internal.Show.Show Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance (GHC.Internal.Show.Show rigid, GHC.Internal.Show.Show flex) => GHC.Internal.Show.Show (Agda.TypeChecking.SizedTypes.WarshallSolver.Node rigid flex) instance GHC.Internal.Show.Show Agda.TypeChecking.SizedTypes.WarshallSolver.Weight instance (GHC.Classes.Ord r, GHC.Classes.Ord f, Agda.TypeChecking.SizedTypes.Utils.Top a) => Agda.TypeChecking.SizedTypes.Utils.Top (Agda.TypeChecking.SizedTypes.WarshallSolver.Edge' r f a) instance Agda.TypeChecking.SizedTypes.Utils.Top Agda.TypeChecking.SizedTypes.WarshallSolver.Label instance Agda.TypeChecking.SizedTypes.Utils.Top Agda.TypeChecking.SizedTypes.WarshallSolver.Weight module Agda.TypeChecking.SizedTypes.Pretty -- | Turn a size expression into a term. unSizeExpr :: HasBuiltins m => DBSizeExpr -> m Term instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.SizedTypes.Syntax.SizeConstraint instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.SizedTypes.Syntax.HypSizeConstraint instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.SizedTypes.Syntax.SizeMeta module Agda.TypeChecking.Rules.Display -- | Add display pragma if well-formed. Otherwise, throw -- InvalidDisplayForm warning and ignore it. checkDisplayPragma :: QName -> [NamedArg Pattern] -> Expr -> TCM () module Agda.TypeChecking.Pretty.Call sayWhere :: (MonadPretty m, HasRange a) => a -> m Doc -> m Doc instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.Call instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Monad.Base.CallInfo -- | Tools to manipulate patterns in abstract syntax in the TCM (type -- checking monad). module Agda.TypeChecking.Patterns.Abstract -- | Expand literal integer pattern into suc/zero constructor patterns. expandLitPattern :: (MonadError TCErr m, MonadTCEnv m, ReadTCState m, HasBuiltins m) => Pattern -> m Pattern -- | Expand away (deeply) all pattern synonyms in a pattern. expandPatternSynonyms' :: Pattern' e -> TCM (Pattern' e) class ExpandPatternSynonyms a expandPatternSynonyms :: ExpandPatternSynonyms a => a -> TCM a ($dmexpandPatternSynonyms) :: forall (f :: Type -> Type) b. (ExpandPatternSynonyms a, Traversable f, ExpandPatternSynonyms b, f b ~ a) => a -> TCM a instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms [a] instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms a => Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Common.Named n a) instance Agda.TypeChecking.Patterns.Abstract.ExpandPatternSynonyms (Agda.Syntax.Abstract.Pattern' e) module Agda.TypeChecking.Opacity -- | Ensure that opaque blocks defined in the current module have saturated -- unfolding sets. saturateOpaqueBlocks :: (MonadTCState m, ReadTCState m, MonadFresh OpaqueId m, MonadDebug m, MonadTrace m, MonadWarning m, MonadIO m) => m () -- | Decide whether or not a definition is reducible. Returns True -- if the definition can step. isAccessibleDef :: TCEnv -> TCState -> Definition -> Bool -- | Will the given QName have a proper definition, or will it be -- wrapped in an AbstractDefn? hasAccessibleDef :: (ReadTCState m, MonadTCEnv m, HasConstInfo m) => QName -> m Bool -- | EDSL to construct terms without touching De Bruijn indices. -- -- e.g. given t, u :: Term, Γ ⊢ t, u : A, we can build "λ f. f t u" like -- this: -- -- runNames [] $ do -- open binds t and u to -- computations that know how to weaken themselves in -- an extended -- context -- --
-- primEraseEquality : {a : Level} {A : Set a} {x y : A} -> x ≡ y -> x ≡ y --primEraseEquality :: TCM PrimitiveImpl primFloatToWord64Injective :: TCM PrimitiveImpl primForce :: TCM PrimitiveImpl primForceLemma :: TCM PrimitiveImpl primLockUniv' :: TCM PrimitiveImpl primMetaToNatInjective :: TCM PrimitiveImpl primQNameToWord64sInjective :: TCM PrimitiveImpl primStringFromListInjective :: TCM PrimitiveImpl primStringToListInjective :: TCM PrimitiveImpl primWord64ToNatInjective :: TCM PrimitiveImpl primitiveFunctions :: Map PrimitiveId (TCM PrimitiveImpl) toTermTCM :: ToTerm a => TCM (a -> TCM Term) class FromTerm a fromTerm :: FromTerm a => TCM (FromTermFunction a) type FromTermFunction a = Arg Term -> ReduceM Reduced MaybeReduced Arg Term a type Fun a = a -> a newtype Lvl Lvl :: Integer -> Lvl [unLvl] :: Lvl -> Integer newtype Nat Nat :: Integer -> Nat [unNat] :: Nat -> Integer type Op a = a -> a -> a type Pred a = a -> Bool class PrimType a => PrimTerm a primTerm :: PrimTerm a => a -> TCM Term class PrimType a primType :: PrimType a => a -> TCM Type ($dmprimType) :: (PrimType a, PrimTerm a) => a -> TCM Type type Rel a = a -> a -> Bool class ToTerm a toTerm :: ToTerm a => TCM (a -> ReduceM Term) instance GHC.Internal.Enum.Enum Agda.TypeChecking.Primitive.Nat instance GHC.Classes.Eq Agda.TypeChecking.Primitive.Lvl instance GHC.Classes.Eq Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.FromTerm GHC.Types.Bool instance Agda.TypeChecking.Primitive.FromTerm GHC.Types.Char instance Agda.TypeChecking.Primitive.FromTerm GHC.Types.Double instance Agda.TypeChecking.Primitive.FromTerm GHC.Num.Integer.Integer instance (Agda.TypeChecking.Primitive.ToTerm a, Agda.TypeChecking.Primitive.FromTerm a) => Agda.TypeChecking.Primitive.FromTerm [a] instance Agda.TypeChecking.Primitive.FromTerm Agda.TypeChecking.Primitive.Lvl instance Agda.TypeChecking.Primitive.FromTerm a => Agda.TypeChecking.Primitive.FromTerm (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Primitive.FromTerm Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Primitive.FromTerm Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.FromTerm Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Primitive.FromTerm Data.Text.Internal.Text instance Agda.TypeChecking.Primitive.FromTerm GHC.Internal.Word.Word64 instance GHC.Internal.Real.Integral Agda.TypeChecking.Primitive.Nat instance GHC.Internal.Num.Num Agda.TypeChecking.Primitive.Nat instance GHC.Classes.Ord Agda.TypeChecking.Primitive.Lvl instance GHC.Classes.Ord Agda.TypeChecking.Primitive.Nat instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.Primitive.Lvl instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.PrimTerm GHC.Types.Bool instance Agda.TypeChecking.Primitive.PrimTerm GHC.Types.Char instance Agda.TypeChecking.Primitive.PrimTerm GHC.Types.Double instance (Agda.TypeChecking.Primitive.PrimType a, Agda.TypeChecking.Primitive.PrimType b) => Agda.TypeChecking.Primitive.PrimTerm (a -> b) instance Agda.TypeChecking.Primitive.PrimTerm Agda.Syntax.Common.Fixity' instance Agda.TypeChecking.Primitive.PrimTerm a => Agda.TypeChecking.Primitive.PrimTerm (GHC.Types.IO a) instance Agda.TypeChecking.Primitive.PrimTerm GHC.Num.Integer.Integer instance Agda.TypeChecking.Primitive.PrimTerm a => Agda.TypeChecking.Primitive.PrimTerm [a] instance Agda.TypeChecking.Primitive.PrimTerm Agda.TypeChecking.Primitive.Lvl instance Agda.TypeChecking.Primitive.PrimTerm a => Agda.TypeChecking.Primitive.PrimTerm (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Primitive.PrimTerm Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Primitive.PrimTerm Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.PrimTerm Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Primitive.PrimTerm Data.Text.Internal.Text instance (Agda.TypeChecking.Primitive.PrimType a, Agda.TypeChecking.Primitive.PrimType b) => Agda.TypeChecking.Primitive.PrimTerm (a, b) instance Agda.TypeChecking.Primitive.PrimTerm Agda.Syntax.Internal.Type instance Agda.TypeChecking.Primitive.PrimTerm GHC.Internal.Word.Word64 instance Agda.TypeChecking.Primitive.PrimType GHC.Types.Bool instance Agda.TypeChecking.Primitive.PrimType GHC.Types.Char instance Agda.TypeChecking.Primitive.PrimType GHC.Types.Double instance (Agda.TypeChecking.Primitive.PrimType a, Agda.TypeChecking.Primitive.PrimType b) => Agda.TypeChecking.Primitive.PrimType (a -> b) instance Agda.TypeChecking.Primitive.PrimType Agda.Syntax.Common.Fixity' instance Agda.TypeChecking.Primitive.PrimTerm a => Agda.TypeChecking.Primitive.PrimType (GHC.Types.IO a) instance Agda.TypeChecking.Primitive.PrimType GHC.Num.Integer.Integer instance Agda.TypeChecking.Primitive.PrimTerm a => Agda.TypeChecking.Primitive.PrimType [a] instance Agda.TypeChecking.Primitive.PrimType Agda.TypeChecking.Primitive.Lvl instance Agda.TypeChecking.Primitive.PrimTerm a => Agda.TypeChecking.Primitive.PrimType (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Primitive.PrimType Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Primitive.PrimType Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.PrimType Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Primitive.PrimType Data.Text.Internal.Text instance (Agda.TypeChecking.Primitive.PrimType a, Agda.TypeChecking.Primitive.PrimType b) => Agda.TypeChecking.Primitive.PrimType (a, b) instance Agda.TypeChecking.Primitive.PrimType Agda.Syntax.Internal.Type instance Agda.TypeChecking.Primitive.PrimType GHC.Internal.Word.Word64 instance GHC.Internal.Real.Real Agda.TypeChecking.Primitive.Nat instance Agda.Syntax.Internal.Generic.TermLike Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.ArgInfo instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.Associativity instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Internal.Blockers.Blocker instance Agda.TypeChecking.Primitive.ToTerm GHC.Types.Bool instance Agda.TypeChecking.Primitive.ToTerm GHC.Types.Char instance Agda.TypeChecking.Primitive.ToTerm (Agda.Syntax.Internal.Dom Agda.Syntax.Internal.Type) instance Agda.TypeChecking.Primitive.ToTerm GHC.Types.Double instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.Fixity instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.Fixity' instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.FixityLevel instance Agda.TypeChecking.Primitive.ToTerm GHC.Num.Integer.Integer instance Agda.TypeChecking.Primitive.ToTerm a => Agda.TypeChecking.Primitive.ToTerm [a] instance Agda.TypeChecking.Primitive.ToTerm Agda.TypeChecking.Primitive.Lvl instance Agda.TypeChecking.Primitive.ToTerm a => Agda.TypeChecking.Primitive.ToTerm (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Common.MetaId instance Agda.TypeChecking.Primitive.ToTerm Agda.TypeChecking.Primitive.Nat instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Abstract.Name.QName instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Internal.Term instance Agda.TypeChecking.Primitive.ToTerm Data.Text.Internal.Text instance (Agda.TypeChecking.Primitive.ToTerm a, Agda.TypeChecking.Primitive.ToTerm b) => Agda.TypeChecking.Primitive.ToTerm (a, b) instance Agda.TypeChecking.Primitive.ToTerm Agda.Syntax.Internal.Type instance Agda.TypeChecking.Primitive.ToTerm GHC.Internal.Word.Word64 -- | Compile-time irrelevance. -- -- In type theory with compile-time irrelevance à la Pfenning (LiCS -- 2001), variables in the context are annotated with relevance -- attributes. @ Γ = r₁x₁:A₁, ..., rⱼxⱼ:Aⱼ To handle -- irrelevant projections, we also record the current relevance attribute -- in the judgement. For instance, this attribute is equal to to -- Irrelevant if we are in an irrelevant position, like an -- irrelevant argument. Γ ⊢r t : A Only relevant -- variables can be used: @ -- -- (Relevant x : A) ∈ Γ -------------------- Γ ⊢r x : A @ Irrelevant -- global declarations can only be used if r = Irrelevant@. -- -- When we enter a r'-relevant function argument, we compose the -- r with r' and (left-)divide the attributes in the -- context by r'. @ Γ ⊢r t : (r' x : A) → B r' Γ ⊢(r'·r) u : -- A --------------------------------------------------------- Γ ⊢r t u : -- B[u/x] No surprises for abstraction: @ -- -- Γ, (r' x : A) ⊢r : B ----------------------------- Γ ⊢r λxt : (r' x : -- A) → B @@ -- -- This is different for runtime irrelevance (erasure) which is -- `flat', meaning that once one is in an irrelevant context, -- all new assumptions will be usable, since they are turned relevant -- once entering the context. See Conor McBride (WadlerFest 2016), for a -- type system in this spirit: -- -- We use such a rule for runtime-irrelevance: @ Γ, (q q') x : A ⊢q t -- : B ------------------------------ Γ ⊢q λxt : (q' x : A) → B @ -- -- Conor's system is however set up differently, with a very different -- variable rule: -- -- @@ -- -- (q x : A) ∈ Γ -------------- Γ ⊢q x : A -- -- Γ, (q·p) x : A ⊢q t : B ----------------------------- Γ ⊢q λxt : (p x -- : A) → B -- -- Γ ⊢q t : (p x : A) → B Γ' ⊢qp u : A -- ------------------------------------------------- Γ + Γ' ⊢q t u : -- B[u/x] @@ module Agda.TypeChecking.Irrelevance -- | Check whether something can be used in a position of the given -- relevance. -- -- This is a substitute for double-checking that only makes sure -- relevances are correct. See issue #2640. -- -- Used in unifier ( unifyStep Solution{}). -- -- At the moment, this implements McBride-style irrelevance, where -- Pfenning-style would be the most accurate thing. However, these two -- notions only differ how they handle bound variables in a term. Here, -- we are only concerned in the free variables, used meta-variables, and -- used (irrelevant) definitions. class UsableRelevance a usableRel :: (UsableRelevance a, ReadTCState m, HasConstInfo m, MonadTCEnv m, MonadAddContext m, MonadDebug m) => Relevance -> a -> m Bool -- | Check whether something can be used in a position of the given -- modality. -- -- This is a substitute for double-checking that only makes sure -- modalities are correct. See issue #2640. -- -- Used in unifier ( unifyStep Solution{}). -- -- This uses McBride-style modality checking. It does not differ from -- Pfenning-style if we are only interested in the modality of the free -- variables, used meta-variables, and used definitions. class UsableModality a usableMod :: (UsableModality a, ReadTCState m, HasConstInfo m, MonadTCEnv m, MonadAddContext m, MonadDebug m, MonadReduce m, MonadError Blocker m) => Modality -> a -> m Bool usableModAbs :: (Subst a, MonadAddContext m, UsableModality a, ReadTCState m, HasConstInfo m, MonadReduce m, MonadError Blocker m) => ArgInfo -> Modality -> Abs a -> m Bool usableAtModality' :: MonadConstraint TCM => Maybe Sort -> WhyCheckModality -> Modality -> Term -> TCM () usableAtModality :: MonadConstraint TCM => WhyCheckModality -> Modality -> Term -> TCM () -- | Is a type a proposition? (Needs reduction.) isPropM :: (LensSort a, PrettyTCM a, PureTCM m, MonadBlock m) => a -> m Bool isIrrelevantOrPropM :: (LensRelevance a, LensSort a, PrettyTCM a, PureTCM m, MonadBlock m) => a -> m Bool allIrrelevantOrPropTel :: (PureTCM m, MonadBlock m) => Telescope -> m Bool -- | Is a type fibrant (i.e. Type, Prop)? isFibrant :: (LensSort a, PureTCM m, MonadBlock m) => a -> m Bool isFibrant' :: (LensSort a, PureTCM m) => a -> m (Either Blocker Bool) -- | Cofibrant types are those that could be the domain of a fibrant pi -- type. (Notion by C. Sattler). isCoFibrantSort :: (LensSort a, PureTCM m) => a -> m (Either Blocker Bool) instance Agda.TypeChecking.Irrelevance.UsableModality a => Agda.TypeChecking.Irrelevance.UsableModality (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Irrelevance.UsableModality a => Agda.TypeChecking.Irrelevance.UsableModality (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Irrelevance.UsableModality a => Agda.TypeChecking.Irrelevance.UsableModality (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Irrelevance.UsableModality Agda.Syntax.Internal.Level instance Agda.TypeChecking.Irrelevance.UsableModality a => Agda.TypeChecking.Irrelevance.UsableModality [a] instance Agda.TypeChecking.Irrelevance.UsableModality Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Irrelevance.UsableModality Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Irrelevance.UsableModality a, Agda.TypeChecking.Irrelevance.UsableModality b) => Agda.TypeChecking.Irrelevance.UsableModality (a, b) instance Agda.TypeChecking.Irrelevance.UsableRelevance a => Agda.TypeChecking.Irrelevance.UsableModality (Agda.Syntax.Internal.Type' a) instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Irrelevance.UsableRelevance a) => Agda.TypeChecking.Irrelevance.UsableRelevance (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Irrelevance.UsableRelevance a => Agda.TypeChecking.Irrelevance.UsableRelevance (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Irrelevance.UsableRelevance a => Agda.TypeChecking.Irrelevance.UsableRelevance (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Irrelevance.UsableRelevance a => Agda.TypeChecking.Irrelevance.UsableRelevance (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Irrelevance.UsableRelevance Agda.Syntax.Internal.Level instance Agda.TypeChecking.Irrelevance.UsableRelevance a => Agda.TypeChecking.Irrelevance.UsableRelevance [a] instance Agda.TypeChecking.Irrelevance.UsableRelevance Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Irrelevance.UsableRelevance Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Irrelevance.UsableRelevance Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Irrelevance.UsableRelevance a, Agda.TypeChecking.Irrelevance.UsableRelevance b) => Agda.TypeChecking.Irrelevance.UsableRelevance (a, b) instance (Agda.TypeChecking.Irrelevance.UsableRelevance a, Agda.TypeChecking.Irrelevance.UsableRelevance b, Agda.TypeChecking.Irrelevance.UsableRelevance c) => Agda.TypeChecking.Irrelevance.UsableRelevance (a, b, c) instance Agda.TypeChecking.Irrelevance.UsableRelevance a => Agda.TypeChecking.Irrelevance.UsableRelevance (Agda.Syntax.Internal.Type' a) module Agda.TypeChecking.Records mkCon :: ConHead -> ConInfo -> Args -> Term -- | Order the fields of a record construction. orderFields :: HasRange a => QName -> (Arg Name -> a) -> [Arg Name] -> [(Name, a)] -> Writer [RecordFieldWarning] [a] -- | Raise generated RecordFieldWarnings as warnings. warnOnRecordFieldWarnings :: Writer [RecordFieldWarning] a -> TCM a -- | Raise generated RecordFieldWarnings as errors. failOnRecordFieldWarnings :: Writer [RecordFieldWarning] a -> TCM a -- | Order the fields of a record construction. Raise generated -- RecordFieldWarnings as warnings. orderFieldsWarn :: HasRange a => QName -> (Arg Name -> a) -> [Arg Name] -> [(Name, a)] -> TCM [a] -- | Order the fields of a record construction. Raise generated -- RecordFieldWarnings as errors. orderFieldsFail :: HasRange a => QName -> (Arg Name -> a) -> [Arg Name] -> [(Name, a)] -> TCM [a] -- | A record field assignment record{xs = es} might not mention -- all visible fields. insertMissingFields inserts placeholders -- for the missing visible fields and returns the values in order of the -- fields in the record declaration. insertMissingFields :: HasRange a => QName -> (Name -> a) -> [FieldAssignment' a] -> [Arg Name] -> Writer [RecordFieldWarning] [NamedArg a] -- | A record field assignment record{xs = es} might not mention -- all visible fields. insertMissingFields inserts placeholders -- for the missing visible fields and returns the values in order of the -- fields in the record declaration. insertMissingFieldsWarn :: HasRange a => QName -> (Name -> a) -> [FieldAssignment' a] -> [Arg Name] -> TCM [NamedArg a] -- | A record field assignment record{xs = es} might not mention -- all visible fields. insertMissingFields inserts placeholders -- for the missing visible fields and returns the values in order of the -- fields in the record declaration. insertMissingFieldsFail :: HasRange a => QName -> (Name -> a) -> [FieldAssignment' a] -> [Arg Name] -> TCM [NamedArg a] -- | Check if a name refers to a record. If yes, return record definition. isRecord :: HasConstInfo m => QName -> m (Maybe RecordData) -- | Get the definition for a record. Throws an exception if the name does -- not refer to a record or the record is abstract. getRecordDef :: (HasConstInfo m, ReadTCState m, MonadError TCErr m) => QName -> m RecordData -- | Get the record name belonging to a field name. getRecordOfField :: QName -> TCM (Maybe QName) -- | Get the field names of a record. getRecordFieldNames :: (HasConstInfo m, ReadTCState m, MonadError TCErr m) => QName -> m [Dom Name] recordFieldNames :: RecordData -> [Dom Name] -- | Find all records with at least the given fields. findPossibleRecords :: [Name] -> TCM [QName] -- | Get the field names belonging to a record type. getRecordTypeFields :: Type -> TCM [Dom QName] -- | Returns the given record type's constructor name (with an empty -- range). getRecordConstructor :: (HasConstInfo m, ReadTCState m, MonadError TCErr m) => QName -> m ConHead -- | Reduce a type and check whether it is a record type. Succeeds only if -- type is not blocked by a meta var. If yes, return its name, -- parameters, and definition. isRecordType :: PureTCM m => Type -> m (Maybe (QName, Args, RecordData)) -- | Reduce a type and check whether it is a record type. Succeeds only if -- type is not blocked by a meta var. If yes, return its name, -- parameters, and definition. If no, return the reduced type (unless it -- is blocked). tryRecordType :: PureTCM m => Type -> m (Either (Blocked Type) (QName, Args, RecordData)) -- | Get the original projection info for name. origProjection :: HasConstInfo m => QName -> m (QName, Definition, Maybe Projection) -- | getDefType f t computes the type of (possibly -- projection-(like)) function f whose first argument has type -- t. The parameters for f are extracted from -- t. Nothing if f is projection(like) but -- t is not a datarecordaxiom type. -- -- Precondition: t is reduced. -- -- See also: getConType getDefType :: PureTCM m => QName -> Type -> m (Maybe Type) -- | Apply a projection to an expression with a known type, returning the -- type of the projected value. The given type should either be a record -- type or a type eligible for the principal argument of a -- projection-like function. shouldBeProjectible :: (PureTCM m, MonadTCError m, MonadBlock m) => Term -> Type -> ProjOrigin -> QName -> m Type -- | The analogue of piApply. If v is a value of record -- type t with field f, then projectTyped v t -- f returns the type of f v. And also the record type (as -- first result). -- -- Works also for projection-like definitions f. In this case, -- the first result is not a record type. -- -- Precondition: t is reduced. projectTyped :: PureTCM m => Term -> Type -> ProjOrigin -> QName -> m (Maybe (Dom Type, Term, Type)) -- | Typing of an elimination. data ElimType -- | Type of the argument. ArgT :: Dom Type -> ElimType ProjT :: Dom Type -> Type -> ElimType -- | The type of the record which is eliminated. [projTRec] :: ElimType -> Dom Type -- | The type of the field. [projTField] :: ElimType -> Type -- | Given a head and its type, compute the types of the eliminations. typeElims :: Type -> Term -> Elims -> TCM [ElimType] -- | Given a term with a given type and a list of eliminations, returning -- the type of the term applied to the eliminations. eliminateType :: PureTCM m => m Empty -> Term -> Type -> Elims -> m Type eliminateType' :: PureTCM m => m Empty -> (Elims -> Term) -> Type -> Elims -> m Type -- | Check if a name refers to an eta expandable record. -- -- The answer is no for a record type with an erased constructor unless -- the current quantity is "erased". isEtaRecord :: HasConstInfo m => QName -> m Bool isEtaRecordDef :: RecordData -> Bool isEtaCon :: HasConstInfo m => QName -> m Bool -- | Going under one of these does not count as a decrease in size for the -- termination checker. isEtaOrCoinductiveRecordConstructor :: HasConstInfo m => QName -> m Bool -- | Check if a name refers to a record which is not coinductive. -- (Projections are then size-preserving) isInductiveRecord :: HasConstInfo m => QName -> m Bool -- | Check if a type is an eta expandable record and return the record -- identifier and the parameters. isEtaRecordType :: HasConstInfo m => Type -> m (Maybe (QName, Args)) -- | Check if a name refers to a record constructor. If yes, return record -- definition. isRecordConstructor :: HasConstInfo m => QName -> m (Maybe (QName, RecordData)) isEtaRecordConstructor :: HasConstInfo m => QName -> m (Maybe (QName, RecordData)) -- | Turn off eta for unguarded recursive records. Projections do not -- preserve guardedness. unguardedRecord :: QName -> PatternOrCopattern -> TCM () -- | Turn on eta for non-recursive and inductive guarded recursive records, -- unless user declared otherwise. Projections do not preserve -- guardedness. updateEtaForRecord :: QName -> TCM () -- | Turn on eta for inductive guarded recursive records. Projections do -- not preserve guardedness. recursiveRecord :: QName -> TCM () -- | Turn on eta for non-recursive record, unless user declared otherwise. nonRecursiveRecord :: QName -> TCM () -- | Check whether record type is marked as recursive. -- -- Precondition: record type identifier exists in signature. isRecursiveRecord :: QName -> TCM Bool -- |
-- etaExpandBoundVar i = (Δ, σ, τ) ---- -- Precondition: The current context is Γ = Γ₁, x:R pars, Γ₂ -- where |Γ₂| = i and R is a eta-expandable record type -- with constructor c and fields Γ'. -- -- Postcondition: Δ = Γ₁, Γ', Γ₂[c Γ'] and Γ ⊢ σ : Δ -- and Δ ⊢ τ : Γ. etaExpandBoundVar :: Int -> TCM (Maybe (Telescope, Substitution, Substitution)) -- |
-- expandRecordVar i Γ = (Δ, σ, τ, Γ') ---- -- Precondition: Γ = Γ₁, x:R pars, Γ₂ where |Γ₂| = i -- and R is a eta-expandable record type with constructor -- c and fields Γ'. -- -- Postcondition: Δ = Γ₁, Γ', Γ₂[c Γ'] and Γ ⊢ σ : Δ -- and Δ ⊢ τ : Γ. expandRecordVar :: PureTCM m => Int -> Telescope -> m (Maybe (Telescope, Substitution, Substitution, Telescope)) -- | Precondition: variable list is ordered descendingly. Can be empty. expandRecordVarsRecursively :: [Int] -> Telescope -> TCM (Telescope, Substitution, Substitution) -- |
-- curryAt v (Γ (y : R pars) -> B) n = -- ( v -> λ Γ ys → v Γ (c ys) {- curry -} -- , v -> λ Γ y → v Γ (p1 y) ... (pm y) {- uncurry -} -- , Γ (ys : As) → B[c ys / y] -- ) ---- -- where n = size Γ. curryAt :: Type -> Int -> TCM (Term -> Term, Term -> Term, Type) -- | etaExpand r pars u computes the eta expansion of record value -- u at record type r pars. -- -- The first argument r should be the name of an eta-expandable -- record type. Given -- --
-- record R : Set where field x : A; y : B; .z : C ---- -- and r : R, -- --
-- etaExpand R [] r = (tel, [R.x r, R.y r, R.z r]) ---- -- where tel is the record telescope instantiated at the -- parameters pars. etaExpandRecord :: (HasConstInfo m, MonadDebug m, ReadTCState m) => QName -> Args -> Term -> m (Telescope, Args) -- | Eta expand a record regardless of whether it's an eta-record or not. forceEtaExpandRecord :: (HasConstInfo m, MonadDebug m, ReadTCState m, MonadError TCErr m) => QName -> Args -> Term -> m (Telescope, Args) -- | Eta-expand a value at the given record type (must match). etaExpandRecord' :: (HasConstInfo m, MonadDebug m, ReadTCState m) => Bool -> QName -> Args -> Term -> m (Telescope, Args) -- | Eta-expand a value at the given eta record type (must match). etaExpandRecord_ :: HasConstInfo m => QName -> Args -> RecordData -> Term -> m (Telescope, ConHead, ConInfo, Args) -- | Eta-expand a value at the given record type (must match). etaExpandRecord'_ :: HasConstInfo m => Bool -> QName -> Args -> RecordData -> Term -> m (Telescope, ConHead, ConInfo, Args) etaExpandAtRecordType :: Type -> Term -> TCM (Telescope, Term) -- | The fields should be eta contracted already. -- -- We can eta contract if all fields f = ... are irrelevant or -- all fields f are the projection f v of the same -- value v, but we need at least one relevant field to find the -- value v. -- -- If all fields are erased, we cannot eta-contract. etaContractRecord :: HasConstInfo m => QName -> ConHead -> ConInfo -> Args -> m Term -- | Is the type a hereditarily singleton record type? May return a -- blocking metavariable. -- -- Precondition: The name should refer to a record type, and the -- arguments should be the parameters to the type. isSingletonRecord :: (PureTCM m, MonadBlock m) => QName -> Args -> m Bool isSingletonRecordModuloRelevance :: (PureTCM m, MonadBlock m) => QName -> Args -> m Bool -- | Return the unique (closed) inhabitant if exists. In case of counting -- irrelevance in, the returned inhabitant contains dummy terms. isSingletonRecord' :: (PureTCM m, MonadBlock m) => Bool -> QName -> Args -> Set QName -> m (Maybe Term) -- | Check whether a type has a unique inhabitant and return it. Can be -- blocked by a metavar. isSingletonType :: (PureTCM m, MonadBlock m) => Type -> m (Maybe Term) -- | Check whether a type has a unique inhabitant (irrelevant parts -- ignored). Can be blocked by a metavar. isSingletonTypeModuloRelevance :: (PureTCM m, MonadBlock m) => Type -> m Bool isSingletonType' :: (PureTCM m, MonadBlock m) => Bool -> Type -> Set QName -> m (Maybe Term) -- | Checks whether the given term (of the given type) is -- beta-eta-equivalent to a variable. Returns just the de Bruijn-index of -- the variable if it is, or nothing otherwise. isEtaVar :: PureTCM m => Term -> Type -> m (Maybe Int) -- | Replace projection patterns by the original projections. class NormaliseProjP a normaliseProjP :: (NormaliseProjP a, HasConstInfo m) => a -> m a instance Agda.TypeChecking.Records.NormaliseProjP a => Agda.TypeChecking.Records.NormaliseProjP (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Records.NormaliseProjP Agda.Syntax.Internal.Clause instance Agda.TypeChecking.Records.NormaliseProjP a => Agda.TypeChecking.Records.NormaliseProjP [a] instance Agda.TypeChecking.Records.NormaliseProjP a => Agda.TypeChecking.Records.NormaliseProjP (Agda.Syntax.Common.Named_ a) instance Agda.TypeChecking.Records.NormaliseProjP (Agda.Syntax.Internal.Pattern' x) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Records.ElimType module Agda.TypeChecking.Rules.LHS.Problem type FlexibleVars = [FlexibleVar Nat] -- | When we encounter a flexible variable in the unifier, where did it -- come from? The alternatives are ordered such that we will assign the -- higher one first, i.e., first we try to assign a DotFlex, -- then... data FlexibleVarKind -- | From a record pattern (ConP). Saves the FlexibleVarKind -- of its subpatterns. RecordFlex :: [FlexibleVarKind] -> FlexibleVarKind -- | From a hidden formal argument or underscore (WildP). ImplicitFlex :: FlexibleVarKind -- | From a dot pattern (DotP). DotFlex :: FlexibleVarKind -- | From a non-record constructor or literal (ConP or LitP). OtherFlex :: FlexibleVarKind -- | Flexible variables are equipped with information where they come from, -- in order to make a choice which one to assign when two flexibles are -- unified. data FlexibleVar a FlexibleVar :: ArgInfo -> IsForced -> FlexibleVarKind -> Maybe Int -> a -> FlexibleVar a [flexArgInfo] :: FlexibleVar a -> ArgInfo [flexForced] :: FlexibleVar a -> IsForced [flexKind] :: FlexibleVar a -> FlexibleVarKind [flexPos] :: FlexibleVar a -> Maybe Int [flexVar] :: FlexibleVar a -> a allFlexVars :: [IsForced] -> Telescope -> FlexibleVars data FlexChoice ChooseLeft :: FlexChoice ChooseRight :: FlexChoice ChooseEither :: FlexChoice ExpandBoth :: FlexChoice class ChooseFlex a chooseFlex :: ChooseFlex a => a -> a -> FlexChoice -- | A user pattern together with an internal term that it should be equal -- to after splitting is complete. Special cases: * User pattern is a -- variable but internal term isn't: this will be turned into an as -- pattern. * User pattern is a dot pattern: this pattern won't trigger -- any splitting but will be checked for equality after all splitting is -- complete and as patterns have been bound. * User pattern is an absurd -- pattern: emptiness of the type will be checked after splitting is -- complete. * User pattern is an annotated wildcard: type annotation -- will be checked after splitting is complete. data ProblemEq ProblemEq :: Pattern -> Term -> Dom Type -> ProblemEq [problemInPat] :: ProblemEq -> Pattern [problemInst] :: ProblemEq -> Term [problemType] :: ProblemEq -> Dom Type -- | The user patterns we still have to split on. data Problem a Problem :: [ProblemEq] -> [NamedArg Pattern] -> (LHSState a -> TCM a) -> Problem a -- | User patterns which are typed (including the ones generated from -- implicit arguments). [_problemEqs] :: Problem a -> [ProblemEq] -- | List of user patterns which could not yet be typed. Example: f : -- (b : Bool) -> if b then Nat else Nat -> Nat f true = zero f -- false zero = zero f false (suc n) = n In this sitation, for -- clause 2, we construct an initial problem problemEqs = [false = -- b] problemRestPats = [zero] As we instantiate b to -- false, the targetType reduces to Nat -> -- Nat and we can move pattern zero over to -- problemEqs. [_problemRestPats] :: Problem a -> [NamedArg Pattern] -- | The code that checks the RHS. [_problemCont] :: Problem a -> LHSState a -> TCM a problemEqs :: forall a f. Functor f => ([ProblemEq] -> f [ProblemEq]) -> Problem a -> f (Problem a) problemRestPats :: forall a f. Functor f => ([NamedArg Pattern] -> f [NamedArg Pattern]) -> Problem a -> f (Problem a) problemCont :: forall a f. Functor f => ((LHSState a -> TCM a) -> f (LHSState a -> TCM a)) -> Problem a -> f (Problem a) problemInPats :: Problem a -> [Pattern] data AsBinding AsB :: Name -> Term -> Dom Type -> AsBinding data DotPattern Dot :: Expr -> Term -> Dom Type -> DotPattern data AbsurdPattern Absurd :: Range -> Type -> AbsurdPattern data AnnotationPattern Ann :: Expr -> Type -> AnnotationPattern -- | State worked on during the main loop of checking a lhs. [Ulf Norell's -- PhD, page. 35] data LHSState a LHSState :: Telescope -> [NamedArg DeBruijnPattern] -> Problem a -> Arg Type -> ![Maybe Int] -> !Bool -> LHSState a -- | The types of the pattern variables. [_lhsTel] :: LHSState a -> Telescope -- | Patterns after splitting. The de Bruijn indices refer to positions in -- the list of abstract syntax patterns in the problem, counted from the -- back (right-to-left). [_lhsOutPat] :: LHSState a -> [NamedArg DeBruijnPattern] -- | User patterns of supposed type delta. [_lhsProblem] :: LHSState a -> Problem a -- | Type eliminated by problemRestPats in the problem. Can be -- Irrelevant to indicate that we came by an irrelevant projection -- and, hence, the rhs must be type-checked in irrelevant mode. [_lhsTarget] :: LHSState a -> Arg Type -- | have we splitted with a PartialFocus? [_lhsPartialSplit] :: LHSState a -> ![Maybe Int] -- | Have we split on any indexed inductive types? [_lhsIndexedSplit] :: LHSState a -> !Bool lhsTel :: forall a f. Functor f => (Telescope -> f Telescope) -> LHSState a -> f (LHSState a) lhsOutPat :: forall a f. Functor f => ([NamedArg DeBruijnPattern] -> f [NamedArg DeBruijnPattern]) -> LHSState a -> f (LHSState a) lhsProblem :: forall a f. Functor f => (Problem a -> f (Problem a)) -> LHSState a -> f (LHSState a) lhsTarget :: forall a f. Functor f => (Arg Type -> f (Arg Type)) -> LHSState a -> f (LHSState a) data LeftoverPatterns LeftoverPatterns :: IntMap [(Arg Name, PatVarPosition)] -> [AsBinding] -> [DotPattern] -> [AbsurdPattern] -> [AnnotationPattern] -> [Pattern] -> LeftoverPatterns [patternVariables] :: LeftoverPatterns -> IntMap [(Arg Name, PatVarPosition)] [asPatterns] :: LeftoverPatterns -> [AsBinding] [dotPatterns] :: LeftoverPatterns -> [DotPattern] [absurdPatterns] :: LeftoverPatterns -> [AbsurdPattern] [typeAnnotations] :: LeftoverPatterns -> [AnnotationPattern] [otherPatterns] :: LeftoverPatterns -> [Pattern] -- | Classify remaining patterns after splitting is complete into pattern -- variables, as patterns, dot patterns, and absurd patterns. -- Precondition: there are no more constructor patterns. getLeftoverPatterns :: (PureTCM m, MonadFresh NameId m) => [ProblemEq] -> m LeftoverPatterns -- | Build a renaming for the internal patterns using variable names from -- the user patterns. If there are multiple user names for the same -- internal variable, the unused ones are returned as as-bindings. Names -- that are not also module parameters are preferred over those that are. getUserVariableNames :: Telescope -> IntMap [(Arg Name, PatVarPosition)] -> ([Maybe Name], [AsBinding]) instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.Syntax.Common.ArgInfo instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex a => Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.TypeChecking.Rules.LHS.Problem.FlexibleVarKind instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.Syntax.Common.Hiding instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex GHC.Types.Int instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.TypeChecking.Monad.Base.IsForced instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex a => Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex [a] instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex a => Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Rules.LHS.Problem.ChooseFlex Agda.Syntax.Common.Origin instance GHC.Classes.Eq Agda.TypeChecking.Rules.LHS.Problem.FlexChoice instance GHC.Classes.Eq a => GHC.Classes.Eq (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance GHC.Classes.Eq Agda.TypeChecking.Rules.LHS.Problem.FlexibleVarKind instance GHC.Classes.Eq Agda.TypeChecking.Rules.LHS.Problem.PatVarPosition instance GHC.Internal.Data.Foldable.Foldable Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar instance GHC.Internal.Base.Functor Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar instance Agda.TypeChecking.Reduce.InstantiateFull Agda.TypeChecking.Rules.LHS.Problem.AsBinding instance Agda.Syntax.Common.LensArgInfo (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance Agda.Syntax.Common.LensHiding (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance Agda.Syntax.Common.LensModality (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance Agda.Syntax.Common.LensOrigin (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance GHC.Internal.Base.Monoid Agda.TypeChecking.Rules.LHS.Problem.FlexChoice instance GHC.Internal.Base.Monoid Agda.TypeChecking.Rules.LHS.Problem.LeftoverPatterns instance Agda.Utils.Null.Null Agda.TypeChecking.Rules.LHS.Problem.LeftoverPatterns instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.Rules.LHS.Problem.AsBinding instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.Rules.LHS.Problem.PatVarPosition instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Problem.AbsurdPattern instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Problem.AnnotationPattern instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Problem.AsBinding instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Problem.DotPattern instance Agda.TypeChecking.Pretty.PrettyTCM (Agda.TypeChecking.Rules.LHS.Problem.LHSState a) instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Problem.LeftoverPatterns instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Abstract.ProblemEq instance GHC.Internal.Base.Semigroup Agda.TypeChecking.Rules.LHS.Problem.FlexChoice instance GHC.Internal.Base.Semigroup Agda.TypeChecking.Rules.LHS.Problem.LeftoverPatterns instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.LHS.Problem.FlexChoice instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar a) instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.LHS.Problem.FlexibleVarKind instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.LHS.Problem.PatVarPosition instance GHC.Internal.Show.Show (Agda.TypeChecking.Rules.LHS.Problem.Problem a) instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Rules.LHS.Problem.AbsurdPattern instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Rules.LHS.Problem.AsBinding instance Agda.TypeChecking.Substitute.Class.Subst Agda.TypeChecking.Rules.LHS.Problem.DotPattern instance Agda.TypeChecking.Substitute.Class.Subst (Agda.TypeChecking.Rules.LHS.Problem.Problem a) instance GHC.Internal.Data.Traversable.Traversable Agda.TypeChecking.Rules.LHS.Problem.FlexibleVar module Agda.TypeChecking.Rules.LHS.Unify.Types data Equality Equal :: Dom Type -> Term -> Term -> Equality [_eqType] :: Equality -> Dom Type [_eqLeft] :: Equality -> Term [_eqRight] :: Equality -> Term eqConstructorForm :: HasBuiltins m => Equality -> m Equality eqUnLevel :: (HasBuiltins m, HasOptions m) => Equality -> m Equality data UnifyState UState :: Telescope -> FlexibleVars -> Telescope -> [Arg Term] -> [Arg Term] -> UnifyState -- | Don't reduce! [varTel] :: UnifyState -> Telescope [flexVars] :: UnifyState -> FlexibleVars -- | Can be reduced eagerly. [eqTel] :: UnifyState -> Telescope -- | Ends up in dot patterns (should not be reduced eagerly). [eqLHS] :: UnifyState -> [Arg Term] -- | Ends up in dot patterns (should not be reduced eagerly). [eqRHS] :: UnifyState -> [Arg Term] lensVarTel :: Lens' UnifyState Telescope lensEqTel :: Lens' UnifyState Telescope initUnifyState :: PureTCM m => Telescope -> FlexibleVars -> Type -> Args -> Args -> m UnifyState isUnifyStateSolved :: UnifyState -> Bool varCount :: UnifyState -> Int -- | Get the type of the i'th variable in the given state getVarType :: Int -> UnifyState -> Dom Type getVarTypeUnraised :: Int -> UnifyState -> Dom Type eqCount :: UnifyState -> Int -- | Get the k'th equality in the given state. The left- and right-hand -- sides of the equality live in the varTel telescope, and the type of -- the equality lives in the varTel++eqTel telescope getEquality :: Int -> UnifyState -> Equality getReducedEquality :: (MonadReduce m, MonadAddContext m) => Int -> UnifyState -> m Equality -- | As getEquality, but with the unraised type getEqualityUnraised :: Int -> UnifyState -> Equality getReducedEqualityUnraised :: (MonadReduce m, MonadAddContext m) => Int -> UnifyState -> m Equality -- | Instantiate the k'th variable with the given value. Returns Nothing if -- there is a cycle. solveVar :: Int -> DeBruijnPattern -> UnifyState -> Maybe (UnifyState, PatternSubstitution) applyUnder :: Int -> Telescope -> Term -> Telescope dropAt :: Int -> [a] -> [a] -- | Solve the k'th equation with the given value, which can depend on -- regular variables but not on other equation variables. solveEq :: Int -> Term -> UnifyState -> (UnifyState, PatternSubstitution) data UnifyStep Deletion :: Int -> Type -> Term -> Term -> UnifyStep [deleteAt] :: UnifyStep -> Int [deleteType] :: UnifyStep -> Type [deleteLeft] :: UnifyStep -> Term [deleteRight] :: UnifyStep -> Term Solution :: Int -> Dom Type -> FlexibleVar Int -> Term -> Either () () -> UnifyStep [solutionAt] :: UnifyStep -> Int [solutionType] :: UnifyStep -> Dom Type [solutionVar] :: UnifyStep -> FlexibleVar Int [solutionTerm] :: UnifyStep -> Term -- | side of the equation where the variable is. [solutionSide] :: UnifyStep -> Either () () Injectivity :: Int -> Type -> QName -> Args -> Args -> ConHead -> UnifyStep [injectAt] :: UnifyStep -> Int [injectType] :: UnifyStep -> Type [injectDatatype] :: UnifyStep -> QName [injectParameters] :: UnifyStep -> Args [injectIndices] :: UnifyStep -> Args [injectConstructor] :: UnifyStep -> ConHead Conflict :: Int -> Type -> QName -> Args -> Term -> Term -> UnifyStep [conflictAt] :: UnifyStep -> Int [conflictType] :: UnifyStep -> Type [conflictDatatype] :: UnifyStep -> QName [conflictParameters] :: UnifyStep -> Args [conflictLeft] :: UnifyStep -> Term [conflictRight] :: UnifyStep -> Term Cycle :: Int -> Type -> QName -> Args -> Int -> Term -> UnifyStep [cycleAt] :: UnifyStep -> Int [cycleType] :: UnifyStep -> Type [cycleDatatype] :: UnifyStep -> QName [cycleParameters] :: UnifyStep -> Args [cycleVar] :: UnifyStep -> Int [cycleOccursIn] :: UnifyStep -> Term EtaExpandVar :: FlexibleVar Int -> QName -> Args -> UnifyStep [expandVar] :: UnifyStep -> FlexibleVar Int [expandVarRecordType] :: UnifyStep -> QName [expandVarParameters] :: UnifyStep -> Args EtaExpandEquation :: Int -> QName -> Args -> UnifyStep [expandAt] :: UnifyStep -> Int [expandRecordType] :: UnifyStep -> QName [expandParameters] :: UnifyStep -> Args LitConflict :: Int -> Type -> Literal -> Literal -> UnifyStep [litConflictAt] :: UnifyStep -> Int [litType] :: UnifyStep -> Type [litConflictLeft] :: UnifyStep -> Literal [litConflictRight] :: UnifyStep -> Literal StripSizeSuc :: Int -> Term -> Term -> UnifyStep [stripAt] :: UnifyStep -> Int [stripArgLeft] :: UnifyStep -> Term [stripArgRight] :: UnifyStep -> Term SkipIrrelevantEquation :: Int -> UnifyStep [skipIrrelevantAt] :: UnifyStep -> Int TypeConInjectivity :: Int -> QName -> Args -> Args -> UnifyStep [typeConInjectAt] :: UnifyStep -> Int [typeConstructor] :: UnifyStep -> QName [typeConArgsLeft] :: UnifyStep -> Args [typeConArgsRight] :: UnifyStep -> Args data UnifyLogEntry UnificationStep :: UnifyState -> UnifyStep -> UnifyOutput -> UnifyLogEntry type UnifyLog = [(UnifyLogEntry, UnifyState)] -- | This variant of UnifyLog is used to ensure that tell is -- not expensive. type UnifyLog' = DList (UnifyLogEntry, UnifyState) data UnifyOutput UnifyOutput :: PatternSubstitution -> PatternSubstitution -> UnifyOutput [unifySubst] :: UnifyOutput -> PatternSubstitution [unifyProof] :: UnifyOutput -> PatternSubstitution type UnifyLogT (m :: Type -> Type) a = WriterT UnifyLog' m a type UnifyStepT (m :: Type -> Type) a = WriterT UnifyOutput m a tellUnifySubst :: MonadWriter UnifyOutput m => PatternSubstitution -> m () tellUnifyProof :: MonadWriter UnifyOutput m => PatternSubstitution -> m () writeUnifyLog :: MonadWriter UnifyLog' m => (UnifyLogEntry, UnifyState) -> m () runUnifyLogT :: Functor m => UnifyLogT m a -> m (a, UnifyLog) instance GHC.Internal.Base.Monoid Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyOutput instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyState instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyStep instance Agda.TypeChecking.Reduce.Reduce Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyState instance GHC.Internal.Base.Semigroup Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyOutput instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyState instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.LHS.Unify.Types.UnifyStep module Agda.TypeChecking.Rules.LHS.Unify.LeftInverse data NoLeftInv UnsupportedYet :: UnifyStep -> NoLeftInv [badStep] :: NoLeftInv -> UnifyStep Illegal :: UnifyStep -> NoLeftInv [badStep] :: NoLeftInv -> UnifyStep NoCubical :: NoLeftInv WithKEnabled :: NoLeftInv -- | splitting on a Strict Set. SplitOnStrict :: NoLeftInv -- | splitting on a @♭ argument SplitOnFlat :: NoLeftInv UnsupportedCxt :: NoLeftInv buildLeftInverse :: (PureTCM tcm, MonadError TCErr tcm) => UnifyState -> UnifyLog -> tcm (Either NoLeftInv (Substitution, Substitution)) type Retract = (Telescope, Substitution, Substitution, Substitution) termsS :: DeBruijn a => Impossible -> [a] -> Substitution' a composeRetract :: (PureTCM tcm, MonadError TCErr tcm, MonadDebug tcm, HasBuiltins tcm, MonadAddContext tcm) => Retract -> Term -> Retract -> tcm Retract buildEquiv :: (PureTCM tcm, MonadError TCErr tcm) => UnifyLogEntry -> UnifyState -> tcm (Either NoLeftInv (Retract, Term)) explainStep :: MonadPretty m => UnifyStep -> m Doc instance Agda.TypeChecking.Pretty.PrettyTCM Agda.TypeChecking.Rules.LHS.Unify.LeftInverse.NoLeftInv instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.LHS.Unify.LeftInverse.NoLeftInv -- | Pattern matcher used in the reducer for clauses that have not been -- compiled to case trees yet. module Agda.TypeChecking.Patterns.Match -- | If matching is inconclusive (DontKnow) we want to know -- whether it is on a lazy pattern and whether it is due to a particular -- meta variable. data Match a Yes :: Simplification -> IntMap (Arg a) -> Match a No :: Match a DontKnow :: OnlyLazy -> Blocked () -> Match a matchedArgs :: Empty -> Int -> IntMap (Arg a) -> [Arg a] matchedArgs' :: Int -> IntMap (Arg a) -> [Maybe (Arg a)] -- | Builds a proper substitution from an IntMap produced by -- match(Co)patterns buildSubstitution :: DeBruijn a => Impossible -> Int -> IntMap (Arg a) -> Substitution' a -- | Whether the inconclusive matches are only on lazy patterns. data OnlyLazy OnlyLazy :: OnlyLazy NonLazy :: OnlyLazy -- | Instead of zipWithM, we need to use this lazy version of -- combining pattern matching computations. foldMatch :: forall m p v. (IsProjP p, MonadMatch m) => (p -> v -> m (Match Term, v)) -> [p] -> [v] -> m (Match Term, [v]) mergeElim :: Elim -> Arg Term -> Elim mergeElims :: [Elim] -> [Arg Term] -> [Elim] type MonadMatch (m :: Type -> Type) = PureTCM m -- | matchCopatterns ps es matches spine es against -- copattern spine ps. -- -- Returns Yes and a substitution for the pattern variables (in -- form of IntMap Term) if matching was successful. -- -- Returns No if there was a constructor or projection mismatch. -- -- Returns DontKnow if an argument could not be evaluated to -- constructor form because of a blocking meta variable. -- -- In any case, also returns spine es in reduced form (with all -- the weak head reductions performed that were necessary to come to a -- decision). matchCopatterns :: MonadMatch m => [NamedArg DeBruijnPattern] -> [Elim] -> m (Match Term, [Elim]) -- | Match a single copattern. matchCopattern :: MonadMatch m => DeBruijnPattern -> Elim -> m (Match Term, Elim) matchPatterns :: MonadMatch m => [NamedArg DeBruijnPattern] -> [Arg Term] -> m (Match Term, [Arg Term]) -- | Match a single pattern. matchPattern :: MonadMatch m => DeBruijnPattern -> Arg Term -> m (Match Term, Arg Term) yesSimplification :: Match a -> Match a -- | Match a single pattern. matchPatternP :: MonadMatch m => DeBruijnPattern -> Arg DeBruijnPattern -> m (Match DeBruijnPattern) matchPatternsP :: MonadMatch m => [NamedArg DeBruijnPattern] -> [Arg DeBruijnPattern] -> m (Match DeBruijnPattern) -- | Does the pattern perform a match that could fail? properlyMatching :: HasConstInfo m => Pattern' a -> m Bool properlyMatching' :: HasConstInfo m => Bool -> Bool -> Pattern' a -> m Bool instance GHC.Internal.Base.Functor Agda.TypeChecking.Patterns.Match.Match instance GHC.Internal.Base.Monoid (Agda.TypeChecking.Patterns.Match.Match a) instance GHC.Internal.Base.Monoid Agda.TypeChecking.Patterns.Match.OnlyLazy instance Agda.Utils.Null.Null (Agda.TypeChecking.Patterns.Match.Match a) instance GHC.Internal.Base.Semigroup (Agda.TypeChecking.Patterns.Match.Match a) instance GHC.Internal.Base.Semigroup Agda.TypeChecking.Patterns.Match.OnlyLazy -- | Functions for inserting implicit arguments at the right places. module Agda.TypeChecking.Implicit -- | Split a given Pi Type until you reach the given named argument, -- returning the number of arguments skipped to reach the right plicity -- and name. splitImplicitBinderT :: HasRange a => NamedArg a -> Type -> TCM (Telescope, Type) -- | implicitArgs n expand t generates up to n implicit -- argument metas (unbounded if n<0), as long as t -- is a function type and expand holds on the hiding info of its -- domain. implicitArgs :: (PureTCM m, MonadMetaSolver m, MonadTCM m) => Int -> (Hiding -> Bool) -> Type -> m (Args, Type) -- | implicitNamedArgs n expand t generates up to n named -- implicit arguments metas (unbounded if n<0), as long as -- t is a function type and expand holds on the hiding -- and name info of its domain. implicitNamedArgs :: (PureTCM m, MonadMetaSolver m, MonadTCM m) => Int -> (Hiding -> ArgName -> Bool) -> Type -> m (NamedArgs, Type) -- | Create a metavariable of MetaKind. newMetaArg :: (PureTCM m, MonadMetaSolver m) => MetaKind -> ArgInfo -> ArgName -> Comparison -> Type -> m (MetaId, Term) -- | Create a questionmark (always UnificationMeta). newInteractionMetaArg :: ArgInfo -> ArgName -> Comparison -> Type -> TCM (MetaId, Term) -- | Possible results of insertImplicit. data ImplicitInsertion -- | Success: this many implicits have to be inserted (list can be empty). ImpInsert :: [Dom ()] -> ImplicitInsertion -- | Error: hidden argument where there should have been a non-hidden -- argument. BadImplicits :: ImplicitInsertion -- | Error: bad named argument. NoSuchName :: ArgName -> ImplicitInsertion pattern NoInsertNeeded :: ImplicitInsertion -- | If the next given argument is a and the expected arguments -- are ts insertImplicit' a ts returns the prefix of -- ts that precedes a. -- -- If a is named but this name does not appear in ts, -- the NoSuchName exception is thrown. insertImplicit :: NamedArg e -> [Dom a] -> ImplicitInsertion -- | If the next given argument is a and the expected arguments -- are ts insertImplicit' a ts returns the prefix of -- ts that precedes a. -- -- If a is named but this name does not appear in ts, -- the NoSuchName exception is thrown. insertImplicit' :: NamedArg e -> [Dom ArgName] -> ImplicitInsertion instance GHC.Internal.Show.Show Agda.TypeChecking.Implicit.ImplicitInsertion module Agda.TypeChecking.Rules.LHS.Implicit implicitP :: ArgInfo -> NamedArg Pattern -- | Insert implicit patterns in a list of patterns. Even if -- DontExpandLast, trailing SIZELT patterns are inserted. insertImplicitPatterns :: (PureTCM m, MonadError TCErr m, MonadFresh NameId m, MonadTrace m) => ExpandHidden -> [NamedArg Pattern] -> Telescope -> m [NamedArg Pattern] -- | Insert trailing SizeLt patterns, if any. insertImplicitSizeLtPatterns :: PureTCM m => Type -> m [NamedArg Pattern] -- | Insert implicit patterns in a list of patterns. Even if -- DontExpandLast, trailing SIZELT patterns are inserted. insertImplicitPatternsT :: (PureTCM m, MonadError TCErr m, MonadFresh NameId m, MonadTrace m) => ExpandHidden -> [NamedArg Pattern] -> Type -> m [NamedArg Pattern] module Agda.TypeChecking.Rules.LHS.ProblemRest -- | Rename the variables in a telescope using the names from a given -- pattern. -- -- If there are not at least as many patterns as entries as in the -- telescope, the names of the remaining entries in the telescope are -- unchanged. If there are too many patterns, there should be a type -- error later. useNamesFromPattern :: [NamedArg Pattern] -> Telescope -> Telescope useNamesFromProblemEqs :: (PureTCM m, MonadFresh NameId m) => [ProblemEq] -> Telescope -> m Telescope useOriginFrom :: (LensOrigin a, LensOrigin b) => [a] -> [b] -> [a] -- | Are there any untyped user patterns left? noProblemRest :: Problem a -> Bool -- | Construct an initial LHSState from user patterns. Example: @ -- -- Case : {A : Set} → Maybe A → Set → Set → Set Case nothing B C = B Case -- (just _) B C = C -- -- sample : {A : Set} (m : Maybe A) → Case m Bool (Maybe A → Bool) sample -- (just a) (just b) = true sample (just a) nothing = false sample -- nothing = true The problem generated for the first clause of -- sample with patterns just a, just b would be: -- lhsTel = [A : Set, m : Maybe A] lhsOutPat = [A, "m"] lhsProblem -- = Problem [A = _, "just a" = "a"] ["_", "just a"] ["just b"] [] -- lhsTarget = "Case m Bool (Maybe A -> Bool)" @ initLHSState :: Telescope -> [ProblemEq] -> [NamedArg Pattern] -> Type -> (LHSState a -> TCM a) -> TCM (LHSState a) -- | Try to move patterns from the problem rest into the problem. Possible -- if type of problem rest has been updated to a function type. updateProblemRest :: (PureTCM m, MonadError TCErr m, MonadTrace m, MonadFresh NameId m) => LHSState a -> m (LHSState a) module Agda.TypeChecking.Functions -- | Expand a clause to the maximal arity, by inserting variable patterns -- and applying the body to variables. etaExpandClause :: MonadTCM tcm => Clause -> tcm Clause -- | Get the name of defined symbol of the head normal form of a term. -- Returns Nothing if no such head exists. getDef :: Term -> TCM (Maybe QName) -- | Imperfect discrimination trees for indexing data by internal syntax. module Agda.TypeChecking.DiscrimTree -- | Insert a value into the discrimination tree, turning variables into -- rigid locals or wildcards depending on the given scope. insertDT :: (Ord a, PrettyTCM a) => Int -> Term -> a -> DiscrimTree a -> TCM (DiscrimTree a) -- | Look up a Term in the given discrimination tree, treating local -- variables as rigid symbols. The returned set is guaranteed to contain -- everything that could overlap the given key. lookupDT :: (Ord a, PrettyTCM a) => Term -> DiscrimTree a -> TCM (QueryResult a) -- | Look up a Term in the given discrimination tree, treating local -- variables as wildcards. lookupUnifyDT :: (Ord a, PrettyTCM a) => Term -> DiscrimTree a -> TCM (QueryResult a) data QueryResult a QueryResult :: Set a -> Blocker -> QueryResult a [resultValues] :: QueryResult a -> Set a [resultBlocker] :: QueryResult a -> Blocker -- | Remove a set of values from the discrimination tree. The tree is -- rebuilt so that cases with no leaves are removed. deleteFromDT :: Ord a => Set a -> DiscrimTree a -> DiscrimTree a instance GHC.Classes.Ord a => GHC.Internal.Base.Monoid (Agda.TypeChecking.DiscrimTree.QueryResult a) instance GHC.Classes.Ord a => GHC.Internal.Base.Semigroup (Agda.TypeChecking.DiscrimTree.QueryResult a) module Agda.TypeChecking.Datatypes -- | Get true constructor with record fields. getConHead :: HasConstInfo m => QName -> m (Either SigError ConHead) isConstructor :: HasConstInfo m => QName -> m Bool -- | Get true constructor with fields, expanding literals to constructors -- if possible. getConForm :: QName -> TCM (Either SigError ConHead) -- | Augment constructor with record fields (preserve constructor name). -- The true constructor might only surface via reduce. getOrigConHead :: QName -> TCM (Either SigError ConHead) -- | Get the name of the datatype constructed by a given constructor. -- Precondition: The argument must refer to a constructor getConstructorData :: HasConstInfo m => QName -> m QName -- | Is the datatype of this constructor a Higher Inductive Type? -- Precondition: The argument must refer to a constructor of a datatype -- or record. consOfHIT :: HasConstInfo m => QName -> m Bool isPathCons :: HasConstInfo m => QName -> m Bool -- | getFullyAppliedConType c t computes the constructor -- parameters from data type t and returns them plus the -- instantiated type of constructor c. -- -- Nothing if t is not a data/record type or does not -- have a constructor c. -- -- Precondition: t is reduced. getFullyAppliedConType :: PureTCM m => ConHead -> Type -> m (Maybe ((QName, Type, Args), Type)) -- | Make sure a constructor is fully applied and infer the type of the -- constructor. Raises a type error if the constructor does not belong to -- the given type. fullyApplyCon :: (PureTCM m, MonadBlock m, MonadTCError m) => ConHead -> Elims -> Type -> (QName -> Type -> Args -> Type -> Elims -> Telescope -> Type -> m a) -> m a -- | Like fullyApplyCon, but calls the given fallback function if -- it encounters something other than a datatype. fullyApplyCon' :: (PureTCM m, MonadBlock m) => ConHead -> Elims -> Type -> (QName -> Type -> Args -> Type -> Elims -> Telescope -> Type -> m a) -> (Type -> m a) -> m a -- | getConType c t computes the constructor parameters from type -- t and returns them plus the instantiated type of constructor -- c. This works also if t is a function type ending in -- a data/record type; the term from which c comes need not be -- fully applied -- -- Nothing if t is not a data/record type or does not -- have a constructor c. getConType :: (PureTCM m, MonadBlock m) => ConHead -> Type -> m (Maybe ((QName, Type, Args), Type)) data ConstructorInfo -- | Arity of the data constructor. DataCon :: Arity -> ConstructorInfo RecordCon :: PatternOrCopattern -> HasEta -> Arity -> [Dom QName] -> ConstructorInfo -- | Return the number of non-parameter arguments to a constructor (arity). -- In case of record constructors, also return the field names (plus -- other info). getConstructorInfo :: HasConstInfo m => QName -> m ConstructorInfo getConstructorInfo' :: HasConstInfo m => QName -> m (Maybe ConstructorInfo) -- | Check if a name refers to a datatype or a record with a named -- constructor. isDatatype :: QName -> TCM Bool -- | Check if a name refers to a datatype or a record. isDataOrRecordType :: QName -> TCM (Maybe DataOrRecord) -- | Precodition: Term is reduced. isDataOrRecord :: Term -> TCM (Maybe (QName, DataOrRecord)) getNumberOfParameters :: HasConstInfo m => QName -> m (Maybe Nat) -- | This is a simplified version of isDatatype from -- Coverage, useful when we do not want to import the module. getDatatypeArgs :: HasConstInfo m => Type -> m (Maybe (QName, Args, Args)) getNotErasedConstructors :: QName -> TCM [QName] -- | Precondition: Name is a data or record type. getConstructors :: QName -> TCM [QName] -- | Nothing if not data or record type name. getConstructors' :: QName -> TCM (Maybe [QName]) -- | Nothing if not data or record definition. getConstructors_ :: Defn -> Maybe [QName] -- | Various utility functions dealing with the non-linear, higher-order -- patterns used for rewrite rules. module Agda.TypeChecking.Rewriting.NonLinPattern -- | Turn a term into a non-linear pattern, treating the free variables as -- pattern variables. The first argument indicates the relevance we are -- working under: if this is Irrelevant, then we construct a pattern that -- never fails to match. The second argument is the number of bound -- variables (from pattern lambdas). The third argument is the type of -- the term. class PatternFrom a b patternFrom :: PatternFrom a b => Relevance -> Int -> TypeOf a -> a -> TCM b -- | Convert from a non-linear pattern to a term. class NLPatToTerm p a nlPatToTerm :: (NLPatToTerm p a, PureTCM m) => p -> m a ($dmnlPatToTerm) :: forall p' a' (f :: Type -> Type) m. (NLPatToTerm p a, NLPatToTerm p' a', Traversable f, p ~ f p', a ~ f a', PureTCM m) => p -> m a -- | Gather the set of pattern variables of a non-linear pattern class NLPatVars a nlPatVarsUnder :: NLPatVars a => Int -> a -> IntSet nlPatVars :: NLPatVars a => a -> IntSet -- | Get all symbols that a non-linear pattern matches against class GetMatchables a getMatchables :: GetMatchables a => a -> [QName] ($dmgetMatchables) :: forall (f :: Type -> Type) a'. (GetMatchables a, Foldable f, GetMatchables a', a ~ f a') => a -> [QName] blockOnMetasIn :: (MonadBlock m, AllMetas t) => t -> m () assertPi :: Type -> TCM (Dom Type, Abs Type) errNotPi :: Type -> TCM a assertPath :: Type -> TCM (Sort, QName, Arg Term, Arg Term, Arg Term, Arg Term) errNotPath :: Type -> TCM a assertProjOf :: QName -> Type -> TCM (Dom Type, Abs Type) errNotProjOf :: QName -> Type -> TCM a assertConOf :: ConHead -> Type -> TCM Type errNotConOf :: ConHead -> Type -> TCM a instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Free.Lazy.Free Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables a => Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables a => Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables a => Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables a => Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables a => Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables [a] instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables Agda.TypeChecking.Monad.Base.RewriteRule instance Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables a, Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables b) => Agda.TypeChecking.Rewriting.NonLinPattern.GetMatchables (a, b) instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm p a => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm (Agda.Syntax.Internal.Abs p) (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm p a => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm (Agda.Syntax.Common.Arg p) (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm p a => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm (Agda.Syntax.Internal.Dom p) (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm p a => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm (Agda.Syntax.Internal.Elim.Elim' p) (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm Agda.Syntax.Common.Nat Agda.Syntax.Internal.Term instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm p a => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm [p] [a] instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm Agda.TypeChecking.Monad.Base.NLPSort Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm Agda.TypeChecking.Monad.Base.NLPType Agda.Syntax.Internal.Type instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm Agda.TypeChecking.Monad.Base.NLPat Agda.Syntax.Internal.Level instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatToTerm Agda.TypeChecking.Monad.Base.NLPat Agda.Syntax.Internal.Term instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars a => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars Agda.TypeChecking.Monad.Base.NLPType instance Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars Agda.TypeChecking.Monad.Base.NLPat instance (Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars a, Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars b) => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars (a, b) instance (GHC.Internal.Data.Foldable.Foldable f, Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars a) => Agda.TypeChecking.Rewriting.NonLinPattern.NLPatVars (f a) instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom a b => Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b) instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom a b => Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom (Agda.Syntax.Internal.Dom a) (Agda.Syntax.Internal.Dom b) instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom Agda.Syntax.Internal.Level Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom Agda.Syntax.Internal.Elims [Agda.Syntax.Internal.Elim.Elim' Agda.TypeChecking.Monad.Base.NLPat] instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom Agda.Syntax.Internal.Sort Agda.TypeChecking.Monad.Base.NLPSort instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom Agda.Syntax.Internal.Term Agda.TypeChecking.Monad.Base.NLPat instance Agda.TypeChecking.Rewriting.NonLinPattern.PatternFrom Agda.Syntax.Internal.Type Agda.TypeChecking.Monad.Base.NLPType -- | Code which replaces pattern matching on record constructors with uses -- of projection functions. module Agda.TypeChecking.RecordPatterns translateCompiledClauses :: (HasConstInfo m, MonadChange m) => QName -> CompiledClauses -> m CompiledClauses -- | Bottom-up procedure to record-pattern-translate split tree. translateSplitTree :: SplitTree -> TCM SplitTree -- | Take a record pattern p and yield a list of projections -- corresponding to the pattern variables, from left to right. -- -- E.g. for (x , (y , z)) we return [ fst, fst . snd, snd . -- snd ]. -- -- If it is not a record pattern, error ShouldBeRecordPattern is -- raised. recordPatternToProjections :: DeBruijnPattern -> TCM [Term -> Term] recordRHSToCopatterns :: (MonadChange m, PureTCM m) => Clause -> m [Clause] instance Agda.TypeChecking.RecordPatterns.DropFrom a => Agda.TypeChecking.RecordPatterns.DropFrom [a] instance Agda.TypeChecking.RecordPatterns.DropFrom (Agda.TypeChecking.Coverage.SplitTree.SplitTree' c) instance Agda.TypeChecking.RecordPatterns.DropFrom (c, Agda.TypeChecking.Coverage.SplitTree.SplitTree' c) -- | Check that a datatype is strictly positive. module Agda.TypeChecking.Positivity type Graph n e = Graph n e -- | Check that the datatypes in the mutual block containing the given -- declarations are strictly positive. -- -- Find polarity of datatypes parameters and indices. -- -- Also add information about positivity and recursivity of records to -- the signature. checkStrictlyPositive :: MutualInfo -> Set QName -> TCM () getDefArity :: Definition -> TCM Int data Item AnArg :: Nat -> [Occurrence] -> Item ADef :: QName -> Item type Occurrences = Map Item [OccursWhere] -- | Used to build Occurrences and occurrence graphs. data OccurrencesBuilder Concat :: [OccurrencesBuilder] -> OccurrencesBuilder OccursAs :: Where -> OccurrencesBuilder -> OccurrencesBuilder OccursHere :: Item -> OccurrencesBuilder -- | OnlyVarsUpTo n occs discards occurrences of de Bruijn index -- >= n. OnlyVarsUpTo :: Nat -> OccurrencesBuilder -> OccurrencesBuilder -- | Used to build Occurrences and occurrence graphs. data OccurrencesBuilder' Concat' :: [OccurrencesBuilder'] -> OccurrencesBuilder' OccursAs' :: Where -> OccurrencesBuilder' -> OccurrencesBuilder' OccursHere' :: Item -> OccurrencesBuilder' -- | Removes OnlyVarsUpTo entries. preprocess :: OccurrencesBuilder -> OccurrencesBuilder' -- | An interpreter for OccurrencesBuilder. -- -- WARNING: There can be lots of sharing between the generated -- OccursWhere entries. Traversing all of these entries could be -- expensive. (See computeEdges for an example.) flatten :: OccurrencesBuilder -> Map Item Integer -- | Context for computing occurrences. data OccEnv OccEnv :: [Maybe Item] -> Maybe QName -> OccEnv -- | Items corresponding to the free variables. -- -- Potential invariant: It seems as if the list has the form -- genericReplicate n Nothing ++ map -- (Just . AnArg) is, for some n and -- is, where is is decreasing (non-strictly). [vars] :: OccEnv -> [Maybe Item] -- | Name for ∞ builtin. [inf] :: OccEnv -> Maybe QName -- | Monad for computing occurrences. type OccM = ReaderT OccEnv ReduceM withExtendedOccEnv :: Maybe Item -> OccM a -> OccM a withExtendedOccEnv' :: [Maybe Item] -> OccM a -> OccM a -- | Running the monad getOccurrences :: (Show a, PrettyTCM a, ComputeOccurrences a) => [Maybe Item] -> a -> TCM OccurrencesBuilder class ComputeOccurrences a occurrences :: ComputeOccurrences a => a -> OccM OccurrencesBuilder ($dmoccurrences) :: forall (t :: Type -> Type) b. (ComputeOccurrences a, Foldable t, ComputeOccurrences b, t b ~ a) => a -> OccM OccurrencesBuilder -- | Computes the number of occurrences of different Items in the -- given definition. -- -- WARNING: There can be lots of sharing between the OccursWhere -- entries. Traversing all of these entries could be expensive. (See -- computeEdges for an example.) computeOccurrences :: QName -> TCM (Map Item Integer) -- | Computes the occurrences in the given definition. computeOccurrences' :: QName -> TCM OccurrencesBuilder data Node DefNode :: !QName -> Node ArgNode :: !QName -> !Nat -> Node -- | Edge labels for the positivity graph. data Edge a Edge :: !Occurrence -> a -> Edge a -- | Merges two edges between the same source and target. mergeEdges :: Edge a -> Edge a -> Edge a -- | WARNING: There can be lots of sharing between the OccursWhere -- entries in the edges. Traversing all of these entries could be -- expensive. (See computeEdges for an example.) buildOccurrenceGraph :: Set QName -> TCM (Graph Node (Edge OccursWhere)) -- | Computes all non-ozero occurrence graph edges represented by -- the given OccurrencesBuilder. -- -- WARNING: There can be lots of sharing between the OccursWhere -- entries in the edges. Traversing all of these entries could be -- expensive. For instance, for the function F in -- benchmarkmiscSlowOccurrences.agda a large number of -- edges from the argument X to the function F are -- computed. These edges have polarity StrictPos, JustNeg -- or JustPos, and contain the following OccursWhere -- elements: -- --
-- data Sing {a}{A : Set a} : A -> Set where -- sing : (x : A) -> Sing x -- -- data Fin : Nat -> Set where -- zero : (n : Nat) -> Fin (suc n) -- suc : (n : Nat) (i : Fin n) -> Fin (suc n) ---- -- At runtime, forced constructor arguments may be erased as they can be -- recovered from dot patterns. For instance, unsing : {A : Set} (x -- : A) -> Sing x -> A unsing .x (sing x) = x can become -- unsing x sing = x and proj : (n : Nat) (i : Fin n) -> -- Nat proj .(suc n) (zero n) = n proj .(suc n) (suc n i) = n -- becomes proj (suc n) zero = n proj (suc n) (suc i) = n -- -- This module implements the analysis of which constructor arguments are -- forced. The process of moving the binding site of forced arguments is -- implemented in the unifier (see the Solution step of -- Agda.TypeChecking.Rules.LHS.Unify.unifyStep). -- -- Forcing is a concept from pattern matching and thus builds on the -- concept of equality (I) used there (closed terms, extensional) which -- is different from the equality (II) used in conversion checking and -- the constraint solver (open terms, intensional). -- -- Up to issue 1441 (Feb 2015), the forcing analysis here relied on the -- wrong equality (II), considering type constructors as injective. This -- is unsound for program extraction, but ok if forcing is only used to -- decide which arguments to skip during conversion checking. -- -- From now on, forcing uses equality (I) and does not search for forced -- variables under type constructors. This may lose some savings during -- conversion checking. If this turns out to be a problem, the old -- forcing could be brought back, using a new modality Skip to -- indicate that this is a relevant argument but still can be skipped -- during conversion checking as it is forced by equality (II). module Agda.TypeChecking.Forcing -- | Given the type of a constructor (excluding the parameters), decide -- which arguments are forced. computeForcingAnnotations :: QName -> Type -> TCM [IsForced] isForced :: IsForced -> Bool nextIsForced :: [IsForced] -> (IsForced, [IsForced]) instance GHC.Internal.Base.Applicative Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Agda.TypeChecking.Forcing.ForcedVariables a => Agda.TypeChecking.Forcing.ForcedVariables (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Forcing.ForcedVariables a => Agda.TypeChecking.Forcing.ForcedVariables (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Forcing.ForcedVariables a => Agda.TypeChecking.Forcing.ForcedVariables [a] instance Agda.TypeChecking.Forcing.ForcedVariables Agda.Syntax.Internal.Term instance GHC.Internal.Base.Functor Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Agda.TypeChecking.Monad.Signature.HasConstInfo Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Agda.Interaction.Options.HasOptions.HasOptions Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Agda.TypeChecking.Monad.Debug.MonadDebug Agda.TypeChecking.Forcing.ForcedVariableCollection' instance GHC.Internal.Base.Monad Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Control.Monad.Reader.Class.MonadReader Agda.TypeChecking.Forcing.ForcedVariableContext Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Agda.TypeChecking.Monad.Base.MonadReduce Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Control.Monad.State.Class.MonadState Agda.TypeChecking.Forcing.ForcedVariableState Agda.TypeChecking.Forcing.ForcedVariableCollection' instance Agda.TypeChecking.Monad.Base.MonadTCEnv Agda.TypeChecking.Forcing.ForcedVariableCollection' instance GHC.Internal.Base.Monoid Agda.TypeChecking.Forcing.ForcedVariableCollection instance Agda.TypeChecking.Monad.Base.ReadTCState Agda.TypeChecking.Forcing.ForcedVariableCollection' instance GHC.Internal.Base.Semigroup Agda.TypeChecking.Forcing.ForcedVariableCollection instance Agda.Utils.Singleton.Singleton (Agda.Syntax.Common.Nat, Agda.Syntax.Common.Modality) Agda.TypeChecking.Forcing.ForcedVariableCollection -- | Given -- --
-- ?0 Δ (i = i0) (j = i0) Γ (k = i1) Θ (l = i0) = t ---- -- where all the greek letters consist entirely of distinct bound -- variables (and, of course, arbitrarily many endpoints are allowed -- between each substitution fragment). isFaceConstraint :: MetaId -> Args -> TCM (Maybe (MetaVariable, IntMap Bool, SubstCand, Substitution)) -- | Record a "face" equation onto an interaction point into the actual -- interaction point boundary. Takes all the same arguments as -- assignMeta'. tryAddBoundary :: CompareDirection -> MetaId -> InteractionId -> Args -> Term -> CompareAs -> TCM () -- | Turn open metas into postulates. -- -- Preconditions: -- --
-- variable -- A : Set -- n : Nat -- xs : Vec A n -- -- foo : SomeType xs ---- -- generalisation should produce {A : Set} {n : Nat} {xs : Vec A n} → -- SomeType xs for the type of foo. -- -- The functions generalizeType and generalizeTelescope -- don't have access to the abstract syntax to be type checked -- (SomeType xs in the example). Instead they are provided a -- type checking action that delivers a Type or a -- Telescope. The challenge is setting up a context in which -- SomeType xs can be type checked successfully by this action, -- without knowing what the telescope of generalised variables will be. -- Once we have computed this telescope the result needs to be -- transformed into a well typed type abstracted over it. -- -- At no point are we allowed to cheat! Any transformation between -- well typed terms needs to be done by well typed substitutions. -- -- The key idea is to run the type checking action in the context of a -- single variable of an unknown type. Once we know what variables to -- generalise over this type is instantiated to a fresh record type with -- a field for each generalised variable. Turning the result of action -- into something valid in the context of the generalised variables is -- then a simple substitution unpacking the record variable. -- -- In more detail, generalisation proceeds as follows: -- --
-- (genTel : _GenTel) ---- --
-- (genTel : _GenTel) ⊢ -- _A : Set -- _n : Nat -- _xs : Vec _A _n ---- --
-- (genTel : _GenTel) ⊢ SomeType (_xs genTel) ---- --
-- {A : Set} {n : Nat} {xs : Vec A n} ---- --
-- record GeneralizeTel : Set₁ where -- constructor mkGeneralizeTel -- field -- A : Set -- n : Nat -- xs : Vec A n ---- --
-- _A := λ genTel → genTel .A -- _n := λ genTel → genTel .n -- _xs := λ genTel → genTel .xs ---- --
-- {A : Set} {n : Nat} {xs : Vec A n} ⊢ [mkGeneralizeTel A n xs / genTel] : (genTel : GeneralizeTel) ---- --
-- {A : Set} {n : Nat} {xs : Vec A n} → SomeType (_xs (mkGeneralizeTel A n xs)) == -- {A : Set} {n : Nat} {xs : Vec A n} → SomeType xs ---- --
-- piAbstract (v, a) b[v] = (w : a) -> b[w] ---- -- For the inspect idiom, it does something special: @piAbstract (v, a) -- b[v] = (w : a) {w' : Eq a w v} -> b[w] -- -- For rewrite, it does something special: piAbstract (prf, -- Eq a v v') b[v,prf] = (w : a) (w' : Eq a w v') -> b[w,w'] piAbstract :: Arg (Term, EqualityView) -> Type -> TCM Type -- | isPrefixOf u v = Just es if v == u applyE es. class IsPrefixOf a isPrefixOf :: IsPrefixOf a => a -> a -> Maybe Elims abstractTerm :: Type -> Term -> Type -> Term -> TCM Term class AbsTerm a -- |
-- subst u . absTerm u == id --absTerm :: AbsTerm a => Term -> a -> a -- | This swaps var 0 and var 1. swap01 :: TermSubst a => a -> a class EqualSy a equalSy :: EqualSy a => a -> a -> Bool instance (Agda.TypeChecking.Substitute.Class.TermSubst a, Agda.TypeChecking.Abstract.AbsTerm a) => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Level instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm [a] instance Agda.TypeChecking.Abstract.AbsTerm a => Agda.TypeChecking.Abstract.AbsTerm (GHC.Internal.Maybe.Maybe a) instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Term instance (Agda.TypeChecking.Abstract.AbsTerm a, Agda.TypeChecking.Abstract.AbsTerm b) => Agda.TypeChecking.Abstract.AbsTerm (a, b) instance Agda.TypeChecking.Abstract.AbsTerm Agda.Syntax.Internal.Type instance (Agda.TypeChecking.Substitute.Class.Subst a, Agda.TypeChecking.Abstract.EqualSy a) => Agda.TypeChecking.Abstract.EqualSy (Agda.Syntax.Internal.Abs a) instance Agda.TypeChecking.Abstract.EqualSy a => Agda.TypeChecking.Abstract.EqualSy (Agda.Syntax.Common.Arg a) instance Agda.TypeChecking.Abstract.EqualSy Agda.Syntax.Common.ArgInfo instance Agda.TypeChecking.Abstract.EqualSy a => Agda.TypeChecking.Abstract.EqualSy (Agda.Syntax.Internal.Dom a) instance Agda.TypeChecking.Abstract.EqualSy a => Agda.TypeChecking.Abstract.EqualSy (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.TypeChecking.Abstract.EqualSy Agda.Syntax.Internal.Level instance Agda.TypeChecking.Abstract.EqualSy a => Agda.TypeChecking.Abstract.EqualSy [a] instance Agda.TypeChecking.Abstract.EqualSy Agda.Syntax.Internal.PlusLevel instance Agda.TypeChecking.Abstract.EqualSy Agda.Syntax.Internal.Sort instance Agda.TypeChecking.Abstract.EqualSy Agda.Syntax.Internal.Term instance Agda.TypeChecking.Abstract.EqualSy Agda.Syntax.Internal.Type instance Agda.TypeChecking.Abstract.IsPrefixOf Agda.Syntax.Internal.Elims instance Agda.TypeChecking.Abstract.IsPrefixOf Agda.Syntax.Internal.Args instance Agda.TypeChecking.Abstract.IsPrefixOf Agda.Syntax.Internal.Term module Agda.TypeChecking.With -- | Split pattern variables according to with-expressions. splitTelForWith :: Telescope -> Type -> List1 (Arg (Term, EqualityView)) -> (Telescope, Telescope, Permutation, Type, List1 (Arg (Term, EqualityView))) -- | Abstract with-expressions vs to generate type for with-helper -- function. -- -- Each EqualityType, coming from a rewrite, will turn -- into 2 abstractions. withFunctionType :: Telescope -> List1 (Arg (Term, EqualityView)) -> Telescope -> Type -> Boundary -> TCM (Type, (Nat1, Nat)) -- | Count the number of arguments introduced into the type of the -- with-function. countWithArgs :: (Functor f, Foldable f) => f EqualityView -> Nat1 -- | Count the number of with-patterns in the with-clause that need to be -- transformed to regular patterns in the **current round** of -- with-abstraction (important for nested with). countWithPats :: (Functor f, Foldable f) => f (Arg (Term, EqualityView)) -> Nat1 -- | From a list of with and rewrite expressions and -- their types, compute the list of final with expressions -- (after expanding the rewrites). withArguments :: List1 (Arg (Term, EqualityView)) -> TCM (List1 (Arg Term)) -- | Compute the clauses for the with-function given the original patterns. buildWithFunction :: [Name] -> QName -> QName -> Type -> Telescope -> [NamedArg DeBruijnPattern] -> Nat -> Substitution -> Permutation -> Nat -> Nat -> List1 SpineClause -> TCM (List1 SpineClause) -- |
-- stripWithClausePatterns cxtNames parent f t Δ qs np π ps = ps' ---- -- Example: -- --
-- record Stream (A : Set) : Set where -- coinductive -- constructor delay -- field force : A × Stream A -- -- record SEq (s t : Stream A) : Set where -- coinductive -- field -- ~force : let a , as = force s -- b , bs = force t -- in a ≡ b × SEq as bs -- -- test : (s : Nat × Stream Nat) (t : Stream Nat) → SEq (delay s) t → SEq t (delay s) -- ~force (test (a , as) t p) with force t -- ~force (test (suc n , as) t p) | b , bs = ? ---- -- With function: -- --
-- f : (t : Stream Nat) (w : Nat × Stream Nat) (a : Nat) (as : Stream Nat) -- (p : SEq (delay (a , as)) t) → (fst w ≡ a) × SEq (snd w) as -- -- Δ = t a as p -- reorder to bring with-relevant (= needed) vars first -- π = a as t p → Δ -- qs = (a , as) t p ~force -- ps = (suc n , as) t p ~force -- ps' = (suc n) as t p ---- -- Resulting with-function clause is: -- --
-- f t (b , bs) (suc n) as t p ---- -- Note: stripWithClausePatterns factors ps through -- qs, thus -- --
-- ps = qs[ps'] ---- -- where [..] is to be understood as substitution. The -- projection patterns have vanished from ps' (as they -- are already in qs). stripWithClausePatterns :: [Name] -> QName -> QName -> Type -> Telescope -> [NamedArg DeBruijnPattern] -> Nat -> Permutation -> [NamedArg Pattern] -> TCM ([ProblemEq], [NamedArg Pattern]) -- | Construct the display form for a with function. It will display -- applications of the with function as applications to the original -- function. For instance, -- --
-- aux a b c -- ---- -- as -- --
-- f (suc a) (suc b) | c -- --withDisplayForm :: QName -> QName -> Telescope -> Telescope -> Nat -> [NamedArg DeBruijnPattern] -> Permutation -> Permutation -> TCM DisplayForm patsToElims :: [NamedArg DeBruijnPattern] -> [Elim' DisplayTerm] module Agda.Termination.TermCheck -- | Entry point: Termination check a single declaration. -- -- Precondition: envMutualBlock must be set correctly. termDecl :: Declaration -> TCM Result -- | Entry point: Termination check the current mutual block. termMutual :: [QName] -> TCM Result -- | The result of termination checking a module. Must be a Monoid -- and have Singleton. type Result = [TerminationError] instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Internal.Abs a) instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Common.Arg a) instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Internal.Dom a) instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Internal.Elim.Elim' a) instance Agda.Termination.TermCheck.ExtractCalls Agda.Syntax.Internal.Level instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls [a] instance Agda.Termination.TermCheck.ExtractCalls Agda.Syntax.Internal.PlusLevel instance Agda.Termination.TermCheck.ExtractCalls Agda.Syntax.Internal.Sort instance Agda.Termination.TermCheck.ExtractCalls a => Agda.Termination.TermCheck.ExtractCalls (Agda.Syntax.Internal.Tele a) instance Agda.Termination.TermCheck.ExtractCalls Agda.Syntax.Internal.Term instance (Agda.Termination.TermCheck.ExtractCalls a, Agda.Termination.TermCheck.ExtractCalls b) => Agda.Termination.TermCheck.ExtractCalls (a, b) instance (Agda.Termination.TermCheck.ExtractCalls a, Agda.Termination.TermCheck.ExtractCalls b, Agda.Termination.TermCheck.ExtractCalls c) => Agda.Termination.TermCheck.ExtractCalls (a, b, c) instance Agda.Termination.TermCheck.ExtractCalls Agda.Syntax.Internal.Type instance Agda.Termination.TermCheck.StripAllProjections a => Agda.Termination.TermCheck.StripAllProjections (Agda.Syntax.Common.Arg a) instance Agda.Termination.TermCheck.StripAllProjections Agda.Syntax.Internal.Elims instance Agda.Termination.TermCheck.StripAllProjections Agda.Syntax.Internal.Args instance Agda.Termination.TermCheck.StripAllProjections Agda.Syntax.Internal.Term instance Agda.Termination.TermCheck.TermToPattern a b => Agda.Termination.TermCheck.TermToPattern (Agda.Syntax.Common.Arg a) (Agda.Syntax.Common.Arg b) instance Agda.Termination.TermCheck.TermToPattern a b => Agda.Termination.TermCheck.TermToPattern [a] [b] instance Agda.Termination.TermCheck.TermToPattern a b => Agda.Termination.TermCheck.TermToPattern (Agda.Syntax.Common.Named c a) (Agda.Syntax.Common.Named c b) instance Agda.Termination.TermCheck.TermToPattern Agda.Syntax.Internal.Term Agda.Syntax.Internal.DeBruijnPattern -- | Sanity checking for internal syntax. Mostly checking variable scoping. module Agda.Syntax.Internal.SanityCheck sanityCheckVars :: (Pretty a, Free a) => Telescope -> a -> TCM () -- | Check that Γ ⊢ ρ : Δ. sanityCheckSubst :: (Pretty a, Free a) => Telescope -> Substitution' a -> Telescope -> TCM () module Agda.Syntax.IdiomBrackets parseIdiomBracketsSeq :: Range -> [Expr] -> ScopeM Expr -- | Desugaring for do-notation. Uses whatever `_>>=_` and -- `_>>_` happen to be in scope. -- -- Example: -- -- ``` foo = do x ← m₁ m₂ just y ← m₃ where nothing → m₄ let z = t m₅ ``` -- desugars to ``` foo = m₁ >>= λ x → m₂ >> m₃ >>= λ -- where just y → let z = t in m₅ nothing → m₄ ``` module Agda.Syntax.DoNotation desugarDoNotation :: Range -> List1 DoStmt -> ScopeM Expr module Agda.Interaction.Monad -- | Interaction monad. data IM a runIM :: IM a -> TCM a -- | Line reader. The line reader history is not stored between sessions. readline :: String -> IM (Maybe String) instance GHC.Internal.Base.Applicative Agda.Interaction.Monad.IM instance GHC.Internal.Base.Functor Agda.Interaction.Monad.IM instance Agda.Interaction.Options.HasOptions.HasOptions Agda.Interaction.Monad.IM instance Control.Monad.Error.Class.MonadError Agda.TypeChecking.Monad.Base.TCErr Agda.Interaction.Monad.IM instance Agda.Utils.FileId.MonadFileId Agda.Interaction.Monad.IM instance GHC.Internal.Base.Monad Agda.Interaction.Monad.IM instance GHC.Internal.Control.Monad.IO.Class.MonadIO Agda.Interaction.Monad.IM instance Agda.TypeChecking.Monad.Base.MonadTCEnv Agda.Interaction.Monad.IM instance Agda.TypeChecking.Monad.Base.MonadTCM Agda.Interaction.Monad.IM instance Agda.TypeChecking.Monad.Base.MonadTCState Agda.Interaction.Monad.IM instance Agda.TypeChecking.Monad.Base.ReadTCState Agda.Interaction.Monad.IM -- | Encoding stuff into JSON values in TCM module Agda.Interaction.JSON -- | Right-to-left composition of Kleisli arrows. -- (>=>), with the arguments flipped. -- -- Note how this operator resembles function composition -- (.): -- --
-- (.) :: (b -> c) -> (a -> b) -> a -> c -- (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c --(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c infixr 1 <=< -- | Left-to-right composition of Kleisli arrows. -- -- '(bs >=> cs) a' can be understood as the -- do expression -- --
-- do b <- bs a -- cs b ---- -- or in terms of (>>=) as -- --
-- bs a >>= cs --(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c infixr 1 >=> decode' :: FromJSON a => ByteString -> Maybe a decodeFileStrict :: FromJSON a => FilePath -> IO (Maybe a) decodeFileStrict' :: FromJSON a => FilePath -> IO (Maybe a) decodeStrict' :: FromJSON a => ByteString -> Maybe a eitherDecode' :: FromJSON a => ByteString -> Either String a eitherDecodeFileStrict :: FromJSON a => FilePath -> IO (Either String a) eitherDecodeFileStrict' :: FromJSON a => FilePath -> IO (Either String a) eitherDecodeStrict' :: FromJSON a => ByteString -> Either String a encode :: ToJSON a => a -> ByteString encodeFile :: ToJSON a => FilePath -> a -> IO () throwDecode' :: (FromJSON a, MonadThrow m) => ByteString -> m a throwDecodeStrict' :: (FromJSON a, MonadThrow m) => ByteString -> m a decode :: FromJSON a => ByteString -> Maybe a decodeStrict :: FromJSON a => ByteString -> Maybe a decodeStrictText :: FromJSON a => Text -> Maybe a eitherDecode :: FromJSON a => ByteString -> Either String a eitherDecodeStrict :: FromJSON a => ByteString -> Either String a eitherDecodeStrictText :: FromJSON a => Text -> Either String a throwDecode :: (FromJSON a, MonadThrow m) => ByteString -> m a throwDecodeStrict :: (FromJSON a, MonadThrow m) => ByteString -> m a throwDecodeStrictText :: (FromJSON a, MonadThrow m) => Text -> m a pairs :: Series -> Encoding foldable :: (Foldable t, ToJSON a) => t a -> Encoding (.!=) :: Parser (Maybe a) -> a -> Parser a (.:) :: FromJSON a => Object -> Key -> Parser a (.:!) :: FromJSON a => Object -> Key -> Parser (Maybe a) (.:!=) :: FromJSON a => Object -> Key -> Parser a (.:?) :: FromJSON a => Object -> Key -> Parser (Maybe a) (.:?=) :: FromJSON a => Object -> Key -> Parser a fromJSON :: FromJSON a => Value -> Result a genericFromJSONKey :: (Generic a, GFromJSONKey (Rep a)) => JSONKeyOptions -> FromJSONKeyFunction a genericLiftParseJSON :: (Generic1 f, GFromJSON One (Rep1 f)) => Options -> Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a) genericParseJSON :: (Generic a, GFromJSON Zero (Rep a)) => Options -> Value -> Parser a omittedField1 :: (FromJSON1 f, FromJSON a) => Maybe (f a) omittedField2 :: (FromJSON2 f, FromJSON a, FromJSON b) => Maybe (f a b) parseIndexedJSON :: (Value -> Parser a) -> Int -> Value -> Parser a parseJSON1 :: (FromJSON1 f, FromJSON a) => Value -> Parser (f a) parseJSON2 :: (FromJSON2 f, FromJSON a, FromJSON b) => Value -> Parser (f a b) withArray :: String -> (Array -> Parser a) -> Value -> Parser a withBool :: String -> (Bool -> Parser a) -> Value -> Parser a withEmbeddedJSON :: String -> (Value -> Parser a) -> Value -> Parser a withObject :: String -> (Object -> Parser a) -> Value -> Parser a withScientific :: String -> (Scientific -> Parser a) -> Value -> Parser a withText :: String -> (Text -> Parser a) -> Value -> Parser a (>) :: Parser a -> JSONPathElement -> Parser a camelTo2 :: Char -> String -> String defaultJSONKeyOptions :: JSONKeyOptions defaultOptions :: Options defaultTaggedObject :: SumEncoding object :: [Pair] -> Value genericLiftToEncoding :: (Generic1 f, GToJSON' Encoding One (Rep1 f)) => Options -> (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding genericLiftToJSON :: (Generic1 f, GToJSON' Value One (Rep1 f)) => Options -> (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value genericToEncoding :: (Generic a, GToJSON' Encoding Zero (Rep a)) => Options -> a -> Encoding genericToJSON :: (Generic a, GToJSON' Value Zero (Rep a)) => Options -> a -> Value genericToJSONKey :: (Generic a, GToJSONKey (Rep a)) => JSONKeyOptions -> ToJSONKeyFunction a omitField1 :: (ToJSON1 f, ToJSON a) => f a -> Bool omitField2 :: (ToJSON2 f, ToJSON a, ToJSON b) => f a b -> Bool toEncoding1 :: (ToJSON1 f, ToJSON a) => f a -> Encoding toEncoding2 :: (ToJSON2 f, ToJSON a, ToJSON b) => f a b -> Encoding toJSON1 :: (ToJSON1 f, ToJSON a) => f a -> Value toJSON2 :: (ToJSON2 f, ToJSON a, ToJSON b) => f a b -> Value type Encoding = Encoding' Value fromEncoding :: Encoding' tag -> Builder data Series data Key type GToEncoding = GToJSON' Encoding type GToJSON = GToJSON' Value data FromArgs arity a class FromJSON a parseJSON :: FromJSON a => Value -> Parser a parseJSONList :: FromJSON a => Value -> Parser [a] omittedField :: FromJSON a => Maybe a class FromJSON1 (f :: Type -> Type) liftParseJSON :: FromJSON1 f => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (f a) liftParseJSONList :: FromJSON1 f => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser [f a] liftOmittedField :: FromJSON1 f => Maybe a -> Maybe (f a) class FromJSON2 (f :: Type -> Type -> Type) liftParseJSON2 :: FromJSON2 f => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe b -> (Value -> Parser b) -> (Value -> Parser [b]) -> Value -> Parser (f a b) liftParseJSONList2 :: FromJSON2 f => Maybe a -> (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe b -> (Value -> Parser b) -> (Value -> Parser [b]) -> Value -> Parser [f a b] liftOmittedField2 :: FromJSON2 f => Maybe a -> Maybe b -> Maybe (f a b) class FromJSONKey a fromJSONKey :: FromJSONKey a => FromJSONKeyFunction a fromJSONKeyList :: FromJSONKey a => FromJSONKeyFunction [a] data FromJSONKeyFunction a [FromJSONKeyCoerce] :: forall a. Coercible Text a => FromJSONKeyFunction a [FromJSONKeyText] :: forall a. !Text -> a -> FromJSONKeyFunction a [FromJSONKeyTextParser] :: forall a. !Text -> Parser a -> FromJSONKeyFunction a [FromJSONKeyValue] :: forall a. !Value -> Parser a -> FromJSONKeyFunction a class GFromJSON arity (f :: Type -> Type) class (ConstructorNames f, SumFromString f) => GFromJSONKey (f :: Type -> Type) data One data Zero newtype AesonException AesonException :: String -> AesonException type Array = Vector Value newtype DotNetTime DotNetTime :: UTCTime -> DotNetTime [fromDotNetTime] :: DotNetTime -> UTCTime data JSONKeyOptions type JSONPath = [JSONPathElement] type Object = KeyMap Value data Options data SumEncoding TaggedObject :: String -> String -> SumEncoding [tagFieldName] :: SumEncoding -> String [contentsFieldName] :: SumEncoding -> String UntaggedValue :: SumEncoding ObjectWithSingleField :: SumEncoding TwoElemArray :: SumEncoding data Value Object :: !Object -> Value Array :: !Array -> Value String :: !Text -> Value Number :: !Scientific -> Value Bool :: !Bool -> Value Null :: Value class GToJSON' enc arity (f :: Type -> Type) class GetConName f => GToJSONKey (f :: k -> Type) class KeyValue e kv | kv -> e explicitToField :: KeyValue e kv => (v -> e) -> Key -> v -> kv class KeyValue e kv => KeyValueOmit e kv | kv -> e (.?=) :: (KeyValueOmit e kv, ToJSON v) => Key -> v -> kv explicitToFieldOmit :: KeyValueOmit e kv => (v -> Bool) -> (v -> e) -> Key -> v -> kv data ToArgs res arity a class ToJSON a toJSON :: ToJSON a => a -> Value toEncoding :: ToJSON a => a -> Encoding toJSONList :: ToJSON a => [a] -> Value toEncodingList :: ToJSON a => [a] -> Encoding omitField :: ToJSON a => a -> Bool class ToJSON1 (f :: Type -> Type) liftToJSON :: ToJSON1 f => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> f a -> Value liftToJSONList :: ToJSON1 f => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> [f a] -> Value liftToEncoding :: ToJSON1 f => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding liftToEncodingList :: ToJSON1 f => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> [f a] -> Encoding liftOmitField :: ToJSON1 f => (a -> Bool) -> f a -> Bool class ToJSON2 (f :: Type -> Type -> Type) liftToJSON2 :: ToJSON2 f => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> (b -> Bool) -> (b -> Value) -> ([b] -> Value) -> f a b -> Value liftToJSONList2 :: ToJSON2 f => (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> (b -> Bool) -> (b -> Value) -> ([b] -> Value) -> [f a b] -> Value liftToEncoding2 :: ToJSON2 f => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> (b -> Bool) -> (b -> Encoding) -> ([b] -> Encoding) -> f a b -> Encoding liftToEncodingList2 :: ToJSON2 f => (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> (b -> Bool) -> (b -> Encoding) -> ([b] -> Encoding) -> [f a b] -> Encoding liftOmitField2 :: ToJSON2 f => (a -> Bool) -> (b -> Bool) -> f a b -> Bool class ToJSONKey a toJSONKey :: ToJSONKey a => ToJSONKeyFunction a toJSONKeyList :: ToJSONKey a => ToJSONKeyFunction [a] data ToJSONKeyFunction a ToJSONKeyText :: !a -> Key -> !a -> Encoding' Key -> ToJSONKeyFunction a ToJSONKeyValue :: !a -> Value -> !a -> Encoding -> ToJSONKeyFunction a -- | The JSON version ofPrettyTCM, for encoding JSON value in TCM class EncodeTCM a encodeTCM :: EncodeTCM a => a -> TCM Value ($dmencodeTCM) :: (EncodeTCM a, ToJSON a) => a -> TCM Value -- | TCM monadic version of object obj :: [TCM Pair] -> TCM Value -- | A handy alternative of obj with kind specified kind :: Text -> [TCM Pair] -> TCM Value -- | A handy alternative of object with kind specified kind' :: Text -> [Pair] -> Value -- | A key-value pair for encoding a JSON object. (.=) :: ToJSON a => Text -> a -> Pair -- | Abbreviation of `_ #= encodeTCM _` (@=) :: EncodeTCM a => Text -> a -> TCM Pair -- | Pairs a key with a value wrapped in TCM (#=) :: ToJSON a => Text -> TCM a -> TCM Pair instance Agda.Interaction.JSON.EncodeTCM GHC.Types.Bool instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Common.Pretty.Doc instance Agda.Interaction.JSON.EncodeTCM GHC.Types.Int instance Agda.Interaction.JSON.EncodeTCM a => Agda.Interaction.JSON.EncodeTCM [a] instance Agda.Interaction.JSON.EncodeTCM GHC.Internal.Base.String instance Agda.Interaction.JSON.EncodeTCM a => Agda.Interaction.JSON.EncodeTCM (GHC.Internal.Maybe.Maybe a) instance Agda.Interaction.JSON.EncodeTCM Data.Aeson.Types.Internal.Value instance Agda.Interaction.JSON.EncodeTCM GHC.Internal.Word.Word32 instance Data.Aeson.Types.ToJSON.ToJSON Agda.Utils.FileName.AbsolutePath instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.Common.Pretty.Doc module Agda.Interaction.Highlighting.Vim vimFile :: FilePath -> FilePath escape :: String -> String wordBounded :: String -> String keyword :: String -> [String] -> String match :: String -> List1 String -> String matches :: [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String] toVim :: NamesInScope -> String generateVimFile :: FilePath -> TCM () -- | Extract highlighting syntax from abstract syntax. -- -- Implements one big fold over abstract syntax. module Agda.Interaction.Highlighting.FromAbstract -- | Create highlighting info for some piece of syntax. runHighlighter :: Hilite a => TopLevelModuleName -> NameKinds -> a -> HighlightingInfoBuilder -- | A function mapping names to the kind of name they stand for. type NameKinds = QName -> Maybe NameKind instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.Name.AmbiguousQName instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.Arg a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Common.ArgInfo instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.BindName instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Abstract.Binder' a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Abstract.Clause' a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.DataDefParams instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.Declaration instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.TypeChecking.Monad.Base.DisambiguatedName instance (Agda.Interaction.Highlighting.FromAbstract.Hilite a, Agda.Interaction.Highlighting.FromAbstract.Hilite b) => Agda.Interaction.Highlighting.FromAbstract.Hilite (GHC.Internal.Data.Either.Either a b) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Common.Erased instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.Expr instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Concrete.FieldAssignment' a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.GeneralizeTelescope instance (Agda.Interaction.Highlighting.FromAbstract.Hilite m, Agda.Interaction.Highlighting.FromAbstract.Hilite n, Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo m), Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo n)) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.ImportDirective' m n) instance (Agda.Interaction.Highlighting.FromAbstract.Hilite m, Agda.Interaction.Highlighting.FromAbstract.Hilite n) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.ImportedName' m n) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.LHS instance (Agda.Interaction.Highlighting.FromAbstract.Hilite a, Agda.Syntax.Abstract.Name.IsProjP a) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Abstract.LHSCore' a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.LamBinding instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.LetBinding instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite [a] instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Literal.Literal instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (GHC.Internal.Maybe.Maybe a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Common.Modality instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.ModuleApplication instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Info.ModuleInfo instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.Name.ModuleName instance (Agda.Interaction.Highlighting.FromAbstract.Hilite a, Agda.Syntax.Position.HasRange n) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.Named n a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Utils.List1.List1 a) instance (Agda.Interaction.Highlighting.FromAbstract.Hilite a, Agda.Syntax.Abstract.Name.IsProjP a) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Abstract.Pattern' a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.Pragma instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.ProblemEq instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.Name.QName instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Common.Quantity instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.RHS instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.Ranged a) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.RecordConName instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.RecordDirectives instance (Agda.Interaction.Highlighting.FromAbstract.Hilite m, Agda.Interaction.Highlighting.FromAbstract.Hilite n, Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo m), Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo n)) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.Renaming' m n) instance Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo Agda.Syntax.Abstract.Name.QName) instance Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo Agda.Syntax.Abstract.Name.ModuleName) instance (Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo m), Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo n)) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Interaction.Highlighting.FromAbstract.RenamingTo (Agda.Syntax.Common.ImportedName' m n)) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Scope.Base.ResolvedName instance (Agda.Syntax.Position.HasRange n, Agda.Interaction.Highlighting.FromAbstract.Hilite p, Agda.Interaction.Highlighting.FromAbstract.Hilite e) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.RewriteEqn' x n p e) instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Concrete.TacticAttribute' a) instance (Agda.Interaction.Highlighting.FromAbstract.Hilite a, Agda.Interaction.Highlighting.FromAbstract.Hilite b) => Agda.Interaction.Highlighting.FromAbstract.Hilite (a, b) instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.TypedBinding instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.TypedBindingInfo instance (Agda.Interaction.Highlighting.FromAbstract.Hilite m, Agda.Interaction.Highlighting.FromAbstract.Hilite n) => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.Using' m n) instance Agda.Interaction.Highlighting.FromAbstract.Hilite GHC.Internal.Base.Void instance Agda.Interaction.Highlighting.FromAbstract.Hilite Agda.Syntax.Abstract.WhereDeclarations instance Agda.Interaction.Highlighting.FromAbstract.Hilite a => Agda.Interaction.Highlighting.FromAbstract.Hilite (Agda.Syntax.Common.WithHiding a) instance GHC.Internal.Base.Monoid Agda.Interaction.Highlighting.FromAbstract.Hiliter -- | Generates data used for precise syntax highlighting. module Agda.Interaction.Highlighting.Generate -- | Highlighting levels. data Level -- | Full highlighting. Should only be used after typechecking has -- completed successfully. Full :: Level -- | Highlighting without disambiguation of overloaded constructors. Partial :: Level -- | Generate syntax highlighting information for the given declaration, -- and (if appropriate) print it. If the boolean is True, then the -- state is additionally updated with the new highlighting info (in case -- of a conflict new info takes precedence over old info). -- -- The procedure makes use of some of the highlighting info corresponding -- to stTokens (that corresponding to the interval covered by the -- declaration). If the boolean is True, then this highlighting -- info is additionally removed from the data structure that -- stTokens refers to. generateAndPrintSyntaxInfo :: Declaration -> Level -> Bool -> TCM () -- | Generate and return the syntax highlighting information for the tokens -- in the given file. generateTokenInfo :: AbsolutePath -> TCM HighlightingInfo -- | Generate and return the syntax highlighting information for the tokens -- in the given file. generateTokenInfoFromSource :: RangeFile -> String -> TCM HighlightingInfo -- | Generate and return the syntax highlighting information for the tokens -- in the given string, which is assumed to correspond to the given -- range. generateTokenInfoFromString :: Range -> String -> TCM HighlightingInfo printSyntaxInfo :: Range -> TCM () -- | Prints syntax highlighting info for an error. printErrorInfo :: TCErr -> TCM () -- | Generate highlighting for error. errorHighlighting :: TCErr -> TCM HighlightingInfoBuilder -- | Generates and prints syntax highlighting information for unsolved -- meta-variables and certain unsolved constraints. printUnsolvedInfo :: TCM () -- | Lispify and print the given highlighting information. printHighlightingInfo :: MonadTrace m => RemoveTokenBasedHighlighting -> HighlightingInfo -> m () -- | highlightAsTypeChecked rPre r m runs m and returns -- its result. Additionally, some code may be highlighted: -- --
-- checkRecordUpdate cmp ei recexpr fs e t ---- -- Preconditions: e = RecUpdate ei recexpr fs and t is -- reduced. checkRecordUpdate :: Comparison -> ExprInfo -> Expr -> Assigns -> Expr -> Type -> TCM Term checkLiteral :: Literal -> Type -> TCM Term -- | Remove top layers of scope info of expression and set the scope -- accordingly in the TCState. scopedExpr :: Expr -> TCM Expr -- | Type check an expression. checkExpr :: Expr -> Type -> TCM Term checkExpr' :: Comparison -> Expr -> Type -> TCM Term doQuoteTerm :: Comparison -> Term -> Type -> TCM Term -- | Unquote a TCM computation in a given hole. unquoteM :: Expr -> Term -> Type -> TCM () -- | Run a tactic `tac : Term → TC ⊤` in a hole (second argument) of the -- type given by the third argument. Runs the continuation if successful. unquoteTactic :: Term -> Term -> Type -> TCM () -- | Check an interaction point without arguments. checkQuestionMark :: (Comparison -> Type -> TCM (MetaId, Term)) -> Comparison -> Type -> MetaInfo -> InteractionId -> TCM Term -- | Check an underscore without arguments. checkUnderscore :: MetaInfo -> Comparison -> Type -> TCM Term -- | Type check a meta variable. checkMeta :: MetaInfo -> (Comparison -> Type -> TCM (MetaId, Term)) -> Comparison -> Type -> TCM Term -- | Infer the type of a meta variable. If it is a new one, we create a new -- meta for its type. inferMeta :: MetaInfo -> (Comparison -> Type -> TCM (MetaId, Term)) -> TCM (Elims -> Term, Type) -- | Type check a meta variable. If its type is not given, we return its -- type, or a fresh one, if it is a new meta. If its type is given, we -- check that the meta has this type, and we return the same type. checkOrInferMeta :: MetaInfo -> (Comparison -> Type -> TCM (MetaId, Term)) -> Maybe (Comparison, Type) -> TCM (Term, Type) -- | Turn a domain-free binding (e.g. lambda) into a domain-full one, by -- inserting an underscore for the missing type. domainFree :: ArgInfo -> Binder' Name -> LamBinding -- | Check arguments whose value we already know. -- -- This function can be used to check user-supplied parameters we have -- already computed by inference. -- -- Precondition: The type t of the head has enough domains. checkKnownArguments :: [NamedArg Expr] -> Args -> Type -> TCM (Args, Type) -- | Check an argument whose value we already know. checkKnownArgument :: NamedArg Expr -> Args -> Type -> TCM (Args, Type) -- | Check a single argument. checkNamedArg :: NamedArg Expr -> Type -> TCM Term -- | Infer the type of an expression. Implemented by checking against a -- meta variable. Except for neutrals, for them a polymorphic type is -- inferred. inferExpr :: Expr -> TCM (Term, Type) inferExpr' :: ExpandHidden -> Expr -> TCM (Term, Type) defOrVar :: Expr -> Bool -- | Used to check aliases f = e. Switches off ExpandLast -- for the checking of top-level application. checkDontExpandLast :: Comparison -> Expr -> Type -> TCM Term -- | Check whether a de Bruijn index is bound by a module telescope. isModuleFreeVar :: Int -> TCM Bool -- | Infer the type of an expression, and if it is of the form {tel} -- -> D vs for some datatype D then insert the hidden -- arguments. Otherwise, leave the type polymorphic. inferExprForWith :: Arg Expr -> TCM (Term, Type) checkLetBindings' :: Foldable t => t LetBinding -> TCM a -> TCM a checkLetBinding' :: LetBinding -> TCM a -> TCM a -- | Version of checkLetBinding which traces the fact that we're checking -- each binding in the Call. checkLetBinding :: LetBinding -> TCM a -> TCM a checkLetBindings :: Foldable t => t LetBinding -> TCM a -> TCM a instance GHC.Classes.Eq Agda.TypeChecking.Rules.Term.LamOrPi instance GHC.Internal.Show.Show Agda.TypeChecking.Rules.Term.LamOrPi -- | Handling of the INFINITY, SHARP and FLAT builtins. module Agda.TypeChecking.Rules.Builtin.Coinduction -- | The type of ∞. typeOfInf :: TCM Type -- | The type of ♯_. typeOfSharp :: TCM Type -- | The type of ♭. typeOfFlat :: TCM Type -- | Binds the INFINITY builtin, but does not change the type's definition. bindBuiltinInf :: ResolvedName -> TCM () -- | Binds the SHARP builtin, and changes the definitions of INFINITY and -- SHARP. bindBuiltinSharp :: ResolvedName -> TCM () -- | Binds the FLAT builtin, and changes its definition. bindBuiltinFlat :: ResolvedName -> TCM () -- | Coverage checking, case splitting, and splitting for refine tactics. module Agda.TypeChecking.Coverage data SplitClause SClause :: Telescope -> [NamedArg SplitPattern] -> Substitution' SplitPattern -> Map CheckpointId Substitution -> Maybe (Dom Type) -> SplitClause -- | Type of variables in scPats. [scTel] :: SplitClause -> Telescope -- | The patterns leading to the currently considered branch of the split -- tree. [scPats] :: SplitClause -> [NamedArg SplitPattern] -- | Substitution from scTel to old context. Only needed directly -- after split on variable: * To update scTarget * To rename other -- split variables when splitting on multiple variables. scSubst -- is not `transitive', i.e., does not record the substitution -- from the original context to scTel over a series of splits. It -- is freshly computed after each split by computeNeighborhood; -- also splitResult, which does not split on a variable, should -- reset it to the identity idS, lest it be applied to -- scTarget again, leading to Issue 1294. [scSubst] :: SplitClause -> Substitution' SplitPattern -- | We need to keep track of the module parameter checkpoints for the -- clause for the purpose of inferring missing instance clauses. [scCheckpoints] :: SplitClause -> Map CheckpointId Substitution -- | The type of the rhs, living in context scTel. -- fixTargetType computes the new scTarget by applying -- substitution scSubst. [scTarget] :: SplitClause -> Maybe (Dom Type) -- | Create a split clause from a clause in internal syntax. Used by -- make-case. clauseToSplitClause :: Clause -> SplitClause -- | Add more patterns to split clause if the target type is a function -- type. Returns the domains of the function type (if any). insertTrailingArgs :: Bool -> SplitClause -> TCM (Telescope, SplitClause) -- | A Covering is the result of splitting a SplitClause. data Covering Covering :: Arg Nat -> [(SplitTag, (SplitClause, IInfo))] -> Covering -- | De Bruijn level (counting dot patterns) of argument we split on. [covSplitArg] :: Covering -> Arg Nat -- | Covering clauses, indexed by constructor/literal these clauses share. [covSplitClauses] :: Covering -> [(SplitTag, (SplitClause, IInfo))] -- | Project the split clauses out of a covering. splitClauses :: Covering -> [SplitClause] -- | Top-level function for checking pattern coverage. -- -- Effects: -- --
-- true y -- x false -- false y ---- -- will expand the catch-all x to false. -- -- Catch-alls need also to be expanded if they come before/after a record -- pattern, otherwise we get into trouble when we want to eliminate -- splits on records later. -- -- Another example (see Issue 1650): f (x, (y, z)) true = a f _ -- false = b Split tree: 0 (first argument of f) - 1 (second -- component of the pair) - 3 (last argument of f) -- true -> a - -- false -> b We would like to get the following case tree: -- case 0 of _,_ -> case 1 of _,_ -> case 3 of true -> a; false -- -> b _ -> case 3 of true -> a; false -> b _ -> case 3 -- of true -> a; false -> b -- -- Example from issue #2168: f x false = a f false = _ -> b f x -- true = c case tree: f x y = case y of true -> case x of -- true -> c false -> b false -> a -- -- Example from issue #3628: f i j k (i = i0)(k = i1) = base f i j k -- (j = i1) = base case tree: f i j k o = case i of i0 -> -- case k of i1 -> base _ -> case j of i1 -> base _ -> case j -- of i1 -> base expandCatchalls :: Bool -> Int -> Cls -> Cls -- | Make sure (by eta-expansion) that clause has arity at least n -- where n is also the length of the provided list. ensureNPatterns :: Int -> [ArgInfo] -> Cl -> Cl substBody :: Subst a => Int -> Int -> SubstArg a -> a -> a instance GHC.Classes.Eq Agda.TypeChecking.CompiledClause.Compile.RunRecordPatternTranslation instance Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars a => Agda.TypeChecking.Free.Precompute.PrecomputeFreeVars (Agda.TypeChecking.CompiledClause.CompiledClauses' a) instance Agda.Syntax.Common.Pretty.Pretty Agda.TypeChecking.CompiledClause.Compile.Cl instance GHC.Internal.Show.Show Agda.TypeChecking.CompiledClause.Compile.Cl module Agda.TypeChecking.Rules.Record -- |
-- checkRecDef i name con ps contel fields ---- --
-- COMPILE GHC x as f --HsExport :: Range -> HaskellCode -> HaskellPragma -- | Retrieve and parse a COMPILE GHC pragma stored for a name. getHaskellPragma :: QName -> TCM (Maybe HaskellPragma) parsePragma :: CompilerPragma -> Maybe HaskellPragma parseHaskellPragma :: CompilerPragma -> TCM (Maybe HaskellPragma) -- | Check whether the parsed COMPILE GHC pragma matches the kind -- of identifier it attaches to. sanityCheckPragma :: QName -> HaskellPragma -> TCM (Maybe HaskellPragma) getHaskellConstructor :: QName -> HsCompileM (Maybe HaskellCode) -- | Get content of FOREIGN GHC pragmas, sorted by -- KindOfForeignCode: file header pragmas, import statements, -- rest. foreignHaskell :: Interface -> ([String], [String], [String]) -- | Classify FOREIGN Haskell code. data KindOfForeignCode -- | A pragma that must appear before the module header. ForeignFileHeaderPragma :: KindOfForeignCode -- | An import statement. Must appear right after the module header. ForeignImport :: KindOfForeignCode -- | The rest. To appear after the import statements. ForeignOther :: KindOfForeignCode -- | Classify a FOREIGN GHC declaration. classifyForeign :: String -> KindOfForeignCode -- | Classify a Haskell pragma into whether it is a file header pragma or -- not. classifyPragma :: String -> KindOfForeignCode -- | Partition a list by KindOfForeignCode attribute. partitionByKindOfForeignCode :: (a -> KindOfForeignCode) -> [a] -> ([a], [a], [a]) instance GHC.Classes.Eq Agda.Compiler.MAlonzo.Pragmas.HaskellPragma instance Agda.Syntax.Position.HasRange Agda.Compiler.MAlonzo.Pragmas.HaskellPragma instance Agda.Syntax.Common.Pretty.Pretty Agda.Compiler.MAlonzo.Pragmas.HaskellPragma instance GHC.Internal.Show.Show Agda.Compiler.MAlonzo.Pragmas.HaskellPragma module Agda.Compiler.MAlonzo.Encode -- | Haskell module names have to satisfy the Haskell (including the -- hierarchical module namespace extension) lexical syntax: -- --
-- modid -> [modid.] large {small | large | digit | ' } ---- -- encodeModuleName is an injective function into the set of -- module names defined by modid. The function preserves -- .s, and it also preserves module names whose first name part -- is not mazstr. -- -- Precondition: The input must not start or end with ., and no -- two .s may be adjacent. encodeModuleName :: ModuleName -> ModuleName module Agda.Compiler.MAlonzo.Pretty prettyPrint :: Pretty a => a -> String prettyWhere :: Maybe Binds -> Doc -> Doc prettyRhs :: String -> Rhs -> Doc prettyGuardedRhs :: String -> GuardedRhs -> Doc isOperator :: QName -> Bool prettyQName :: QName -> Doc instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Alt instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Binds instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.ConDecl instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.DataOrNew instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Decl instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Exp instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.ImportDecl instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.ImportSpec instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Literal instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Match instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Module instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.ModuleName instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.ModulePragma instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Name instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Pat instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.QName instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.QOp instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Stmt instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Strictness instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.TyVarBind instance Agda.Syntax.Common.Pretty.Pretty Agda.Utils.Haskell.Syntax.Type -- | Translating Agda types to Haskell types. Used to ensure that imported -- Haskell functions have the right type. module Agda.Compiler.MAlonzo.HaskellTypes haskellType :: QName -> HsCompileM Type hsTelApproximation :: Type -> HsCompileM ([Type], Type) hsTelApproximation' :: PolyApprox -> Type -> HsCompileM ([Type], Type) instance GHC.Classes.Eq Agda.Compiler.MAlonzo.HaskellTypes.PolyApprox -- | Type-check all files of a library (option --build-library). module Agda.Interaction.BuildLibrary -- | Find .agda-lib file from current directory and build all -- modules located in the include paths and their subdirectories -- of the library. buildLibrary :: TCM () -- | Interface for compiler backend writers. module Agda.Compiler.Backend data Recompile menv mod Recompile :: menv -> Recompile menv mod Skip :: mod -> Recompile menv mod data IsMain IsMain :: IsMain NotMain :: IsMain -- | f :: Flag opts is an action on the option record that results -- from parsing an option. f opts produces either an error -- message or an updated options record type Flag opts = opts -> OptM opts toTreeless :: EvaluationStrategy -> QName -> TCM (Maybe TTerm) crInterface :: CheckResult -> Interface crMode :: CheckResult -> ModuleCheckMode crWarnings :: CheckResult -> Set TCWarning -- | The result and associated parameters of a type-checked file, when -- invoked directly via interaction or a backend. Note that the -- constructor is not exported. data CheckResult -- | Flattened unidirectional pattern for CheckResult for -- destructuring inside the ModuleInfo field. pattern CheckResult :: Interface -> Set TCWarning -> ModuleCheckMode -> Source -> CheckResult backendInteraction :: AbsolutePath -> [Backend] -> TCM () -> (AbsolutePath -> TCM CheckResult) -> TCM () parseBackendOptions :: [Backend] -> [String] -> CommandLineOptions -> OptM ([Backend], CommandLineOptions) -- | Call the compilerMain function of the given backend. callBackend :: BackendName -> IsMain -> CheckResult -> TCM () -- | Call the backendInteractTop function of the given backend. callBackendInteractTop :: BackendName -> String -> CommandM () -- | Call the backendInteractHole function of the given backend. callBackendInteractHole :: BackendName -> String -> InteractionId -> Range -> String -> CommandM () module Agda.Interaction.InteractionTop atTopLevel :: CommandM a -> CommandM a -- | Displays the current goal, the given document, and the current -- context. -- -- Should not modify the state. cmd_goal_type_context_and :: GoalTypeAux -> Rewrite -> InteractionId -> Range -> String -> CommandM () -- | cmd_load' file argv unsolvedOk cmd loads the module in file -- file, using argv as the command-line options. -- -- If type checking completes without any exceptions having been -- encountered then the command cmd r is executed, where -- r is the result of typeCheckMain. cmd_load' :: FilePath -> [String] -> Bool -> Mode -> (CheckResult -> CommandM a) -> CommandM a -- | Opposite of liftIO for CommandM. -- -- This function should only be applied to computations that are -- guaranteed not to raise any errors (except for IOExceptions). commandMToIO :: (forall x. () => (CommandM a -> IO x) -> IO x) -> CommandM a decorate :: Doc -> String -- | Displays or updates status information. -- -- Does not change the state. displayStatus :: CommandM () -- | display_info does what display_info' False -- does, but additionally displays some status information (see -- status and displayStatus). display_info :: DisplayInfo -> CommandM () extlam_dropName :: UnicodeOrAscii -> CaseContext -> String -> String -- | Interpret an interaction getBackendName :: CompilerBackend -> BackendName getOldInteractionScope :: InteractionId -> CommandM ScopeInfo -- | A "give"-like action (give, refine, etc). -- -- give_gen force ii rng s give_ref mk_newtxt acts on -- interaction point ii occupying range rng, placing -- the new content given by string s, and replacing ii -- by the newly created interaction points in the state if safety checks -- pass (unless force is applied). give_gen :: UseForce -> InteractionId -> Range -> String -> GiveRefine -> CommandM () handleCommand :: (forall a. () => CommandM a -> CommandM a) -> CommandM () -> CommandM () -> CommandM () -- | Do setup and error handling for a command. handleCommand_ :: CommandM () -> CommandM () highlightExpr :: Expr -> TCM () -- | Can the command run even if the relevant file has not been loaded into -- the state? independent :: Interaction -> Bool -- | Creates a command queue, and forks a thread that writes commands to -- the queue. The queue is returned. initialiseCommandQueue :: IO Command -> IO CommandQueue insertOldInteractionScope :: InteractionId -> ScopeInfo -> CommandM () interpret :: Interaction -> CommandM () -- | Lift a TCM action transformer to a CommandM action transformer. liftCommandMT :: (forall x. () => TCM x -> TCM x) -> CommandM a -> CommandM a -- | Ditto, but restore state. liftCommandMTLocalState :: (forall x. () => TCM x -> TCM x) -> CommandM a -> CommandM a makeCaseVariant :: CaseContext -> MakeCaseVariant -- | If the next command from the command queue is anything but an actual -- command, then the command is returned. -- -- If the command is an IOTCM command, then the following happens: -- The given computation is applied to the command and executed. If an -- abort command is encountered (and acted upon), then the computation is -- interrupted, the persistent state and all options are restored, and -- some commands are sent to the frontend. If the computation was not -- interrupted, then its result is returned. maybeAbort :: (IOTCM -> CommandM a) -> CommandM (Command' (Maybe a)) maybeTimed :: CommandM a -> CommandM (Maybe CPUTime, a) -- | A Lens for oldInteractionScopes. modifyOldInteractionScopes :: (OldInteractionScopes -> OldInteractionScopes) -> CommandM () -- | A Lens for theInteractionPoints. modifyTheInteractionPoints :: ([InteractionId] -> [InteractionId]) -> CommandM () -- | Parses and scope checks an expression (using the "inside scope" as the -- scope), performs the given command with the expression as input, and -- returns the result and the time it takes. parseAndDoAtToplevel :: (Expr -> TCM a) -> String -> CommandM (Maybe CPUTime, a) -- | Put a response by the callback function given by -- stInteractionOutputCallback. putResponse :: Response -> CommandM () removeOldInteractionScope :: InteractionId -> CommandM () -- | Run an IOTCM value, catch the exceptions, emit output -- -- If an error happens the state of CommandM does not change, but -- stPersistent may change (which contains successfully loaded interfaces -- for example). runInteraction :: IOTCM -> CommandM () -- | Shows all the top-level names in scope which mention all the given -- identifiers in their type. searchAbout :: Rewrite -> Range -> String -> CommandM () -- | Sets the command line options and updates the status information. setCommandLineOpts :: CommandLineOptions -> CommandM () -- | Shows all the top-level names in the given module, along with their -- types. showModuleContents :: Rewrite -> Range -> String -> CommandM () -- | Solved goals already instantiated internally The second argument -- potentially limits it to one specific goal. solveInstantiatedGoals :: Rewrite -> Maybe InteractionId -> CommandM () -- | Sorts interaction points based on their ranges. sortInteractionPoints :: (MonadInteractionPoints m, MonadError TCErr m, MonadDebug m) => [InteractionId] -> m [InteractionId] -- | Computes some status information. -- -- Does not change the state. status :: CommandM Status -- | Tells the Emacs mode to go to the first error position (if any). tellEmacsToJumpToError :: Range -> [Response] -- | Tell to highlight the code using the given highlighting info (unless -- it is Nothing). tellToUpdateHighlighting :: Maybe (HighlightingInfo, HighlightingMethod, ModuleToSource) -> IO [Response] -- | Should Resp_InteractionPoints be issued after the command has -- run? updateInteractionPointsAfter :: Interaction -> Bool -- | Explain why something is in scope. whyInScope :: String -> CommandM () -- | Set envCurrentPath to theCurrentFile, if any. withCurrentFile :: CommandM a -> CommandM a data GiveRefine Give :: GiveRefine Refine :: GiveRefine Intro :: GiveRefine ElaborateGive :: Rewrite -> GiveRefine instance GHC.Classes.Eq Agda.Interaction.InteractionTop.GiveRefine instance GHC.Internal.Show.Show Agda.Interaction.InteractionTop.GiveRefine module Agda.Interaction.AgdaTop -- | repl is a fake ghci interpreter for both the Emacs the JSON -- frontend repl :: InteractionOutputCallback -> String -> TCM () -> TCM () module Agda.Interaction.EmacsTop -- | mimicGHCi is a fake ghci interpreter for the Emacs frontend and -- for interaction tests. -- -- mimicGHCi reads the Emacs frontend commands from stdin, -- interprets them and print the result into stdout. mimicGHCi :: TCM () -> TCM () namedMetaOf :: OutputConstraint Expr a -> a -- | Print open metas nicely. showGoals :: Goals -> TCM String -- | Serializing Info_Error showInfoError :: Info_Error -> TCM String explainWhyInScope :: MonadPretty m => WhyInScopeData -> m Doc -- | Pretty-prints the context of the given meta-variable. prettyResponseContext :: InteractionId -> Bool -> [ResponseContextEntry] -> TCM Doc -- | Pretty-prints the type of the meta-variable. prettyTypeOfMeta :: Rewrite -> InteractionId -> TCM Doc module Agda.Interaction.JSONTop -- | jsonREPL is a interpreter like mimicGHCi, but outputs -- JSON-encoded strings. -- -- jsonREPL reads Haskell values (that starts from IOTCM -- ...) from stdin, interprets them, and outputs JSON-encoded strings. -- into stdout. jsonREPL :: TCM () -> TCM () instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Internal.Blockers.Blocker instance Agda.Interaction.JSON.EncodeTCM Agda.Utils.Time.CPUTime instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Base.CommandState instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Base.ComputeMode instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Base.CurrentFile instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.DisplayInfo instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Base.GiveResult instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Base.GoalTypeAux instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Info_Error instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Common.InteractionId instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Base.MakeCaseVariant instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Common.MetaId instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Concrete.Name.NameInScope instance Agda.Interaction.JSON.EncodeTCM Agda.TypeChecking.Monad.Base.Types.NamedMeta instance Agda.Interaction.JSON.EncodeTCM (Agda.Interaction.Output.OutputForm Agda.Syntax.Concrete.Expr Agda.Syntax.Concrete.Expr) instance Agda.Interaction.JSON.EncodeTCM (Agda.Syntax.Position.Position' ()) instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Common.ProblemId instance Agda.Interaction.JSON.EncodeTCM Agda.Syntax.Position.Range instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Base.ResponseContextEntry instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Response instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Base.Rewrite instance Agda.Interaction.JSON.EncodeTCM Agda.Interaction.Response.Base.Status instance Agda.Interaction.JSON.EncodeTCM Agda.TypeChecking.Monad.Base.TCErr instance Agda.Interaction.JSON.EncodeTCM Agda.TypeChecking.Monad.Base.TCWarning instance Data.Aeson.Types.ToJSON.ToJSON Agda.Utils.Time.CPUTime instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Base.CommandState instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Base.ComputeMode instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Base.CurrentFile instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Response.Base.GiveResult instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.Common.InteractionId instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Response.Base.MakeCaseVariant instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.Common.MetaId instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.TopLevelModuleName.Boot.ModuleNameHash instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.Concrete.Name.NameInScope instance Data.Aeson.Types.ToJSON.ToJSON (Agda.Syntax.Position.Position' ()) instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.Common.ProblemId instance Data.Aeson.Types.ToJSON.ToJSON Agda.Syntax.Position.Range instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Base.Rewrite instance Data.Aeson.Types.ToJSON.ToJSON Agda.Interaction.Response.Base.Status -- | Generating highlighted and aligned LaTeX from literate Agda source. module Agda.Interaction.Highlighting.LaTeX latexBackend :: Backend -- | Backend for generating highlighted, hyperlinked HTML from Agda -- sources. module Agda.Interaction.Highlighting.HTML htmlBackend :: Backend module Agda.Interaction.Highlighting.Dot dotBackend :: Backend module Agda.Compiler.MAlonzo.Compiler ghcBackend :: Backend -- | Option strings to activate the GHC backend. ghcInvocationStrings :: [String] instance GHC.Classes.Eq Agda.Compiler.MAlonzo.Compiler.UsesFloat instance GHC.Internal.Generics.Generic Agda.Compiler.MAlonzo.Compiler.GHCFlags instance GHC.Internal.Base.Monoid Agda.Compiler.MAlonzo.Compiler.UsesFloat instance Control.DeepSeq.NFData Agda.Compiler.MAlonzo.Compiler.GHCFlags instance GHC.Internal.Base.Monad m => Agda.Compiler.MAlonzo.Misc.ReadGHCModuleEnv (Control.Monad.Trans.Reader.ReaderT Agda.Compiler.MAlonzo.Compiler.GHCModule m) instance GHC.Internal.Base.Monad m => Agda.Compiler.MAlonzo.Compiler.ReadGHCOpts (Control.Monad.Trans.Reader.ReaderT Agda.Compiler.MAlonzo.Compiler.GHCModule m) instance GHC.Internal.Base.Monad m => Agda.Compiler.MAlonzo.Compiler.ReadGHCOpts (Control.Monad.Trans.Reader.ReaderT Agda.Compiler.MAlonzo.Misc.GHCOptions m) instance GHC.Internal.Base.Monad m => Agda.Compiler.MAlonzo.Compiler.ReadGHCOpts (Control.Monad.Trans.Reader.ReaderT Agda.Compiler.MAlonzo.Misc.GHCEnv m) instance GHC.Internal.Base.Monad m => Agda.Compiler.MAlonzo.Compiler.ReadGHCOpts (Control.Monad.Trans.Reader.ReaderT Agda.Compiler.MAlonzo.Misc.GHCModuleEnv m) instance GHC.Internal.Base.Semigroup Agda.Compiler.MAlonzo.Compiler.UsesFloat instance GHC.Internal.Show.Show Agda.Compiler.MAlonzo.Compiler.UsesFloat -- | Main module for JS backend. module Agda.Compiler.JS.Compiler jsBackend :: Backend jsBackend' :: Backend' JSOptions JSOptions JSModuleEnv Module (Maybe Export) data JSOptions JSOptions :: Bool -> Bool -> Bool -> Bool -> JSModuleStyle -> JSOptions [optJSCompile] :: JSOptions -> Bool [optJSOptimize] :: JSOptions -> Bool -- | Remove spaces etc. See -- https://en.wikipedia.org/wiki/Minification_(programming). [optJSMinify] :: JSOptions -> Bool -- | Run generated code through interpreter. [optJSVerify] :: JSOptions -> Bool [optJSModuleStyle] :: JSOptions -> JSModuleStyle defaultJSOptions :: JSOptions jsCommandLineFlags :: [OptDescr (Flag JSOptions)] jsPreCompile :: JSOptions -> TCM JSOptions -- | After all modules have been compiled, copy RTE modules and verify -- compiled modules. jsPostCompile :: JSOptions -> IsMain -> Map TopLevelModuleName Module -> TCM () data JSModuleEnv JSModuleEnv :: Maybe CoinductionKit -> Bool -> JSModuleEnv [jsCoinductionKit] :: JSModuleEnv -> Maybe CoinductionKit -- | Should this module be compiled? [jsCompile] :: JSModuleEnv -> Bool jsPreModule :: JSOptions -> IsMain -> TopLevelModuleName -> Maybe FilePath -> TCM (Recompile JSModuleEnv Module) jsPostModule :: JSOptions -> JSModuleEnv -> IsMain -> TopLevelModuleName -> [Maybe Export] -> TCM Module jsCompileDef :: JSOptions -> JSModuleEnv -> IsMain -> Definition -> TCM (Maybe Export) prefix :: [Char] jsMod :: TopLevelModuleName -> GlobalId jsFileName :: JSModuleStyle -> GlobalId -> String jsMember :: Name -> MemberId global' :: QName -> TCM (Exp, JSQName) global :: QName -> TCM (Exp, JSQName) reorder :: [Export] -> [Export] reorder' :: Set JSQName -> [Export] -> [Export] isTopLevelValue :: Export -> Bool isEmptyObject :: Export -> Bool insertAfter :: Set JSQName -> Export -> [Export] -> [Export] type EnvWithOpts = (JSOptions, JSModuleEnv) definition :: EnvWithOpts -> (QName, Definition) -> TCM (Maybe Export) -- | Ensure that there is at most one pragma for a name. checkCompilerPragmas :: QName -> TCM () defJSDef :: Definition -> Maybe String definition' :: EnvWithOpts -> QName -> Definition -> Type -> JSQName -> TCM (Maybe Export) compileTerm :: EnvWithOpts -> TTerm -> TCM Exp compilePrim :: TPrim -> Exp compileAlt :: EnvWithOpts -> TAlt -> TCM (MemberId, Exp) visitorName :: QName -> TCM MemberId flatName :: MemberId local :: Nat -> Exp qname :: QName -> TCM Exp literal :: Literal -> Exp litqname :: QName -> Exp litmeta :: MetaId -> Exp writeModule :: Bool -> JSModuleStyle -> Module -> TCM () outFile :: JSModuleStyle -> GlobalId -> TCM FilePath -- | Primitives implemented in the JS Agda RTS. -- -- TODO: Primitives that are not part of this set, and for which -- defJSDef does not return anything, are silently compiled to -- Undefined. A better approach might be to list exactly those -- primitives which should be compiled to Undefined. primitives :: Set PrimitiveId instance GHC.Internal.Generics.Generic Agda.Compiler.JS.Compiler.JSOptions instance Control.DeepSeq.NFData Agda.Compiler.JS.Pretty.JSModuleStyle instance Control.DeepSeq.NFData Agda.Compiler.JS.Compiler.JSOptions -- | Built-in backends. module Agda.Compiler.Builtin builtinBackends :: [Backend] -- | Agda main module. module Agda.Main -- | The main function runAgda :: [Backend] -> IO () -- | The main function without importing built-in backends runAgda' :: [Backend] -> IO () type Interactor a = TCM () -> AbsolutePath -> TCM CheckResult -> TCM a -- | Major mode of operation, not including the standard mode (checking the -- given main module). data FrontendType -- | --interaction or --interaction-json. FrontEndInteraction :: InteractionFormat -> FrontendType -- | --interactive. FrontEndRepl :: FrontendType -- | --build-library. FrontEndBuildLibrary :: FrontendType data InteractionFormat -- | --interaction. InteractionEmacs :: InteractionFormat -- | --interaction-json. InteractionJson :: InteractionFormat pattern FrontEndEmacs :: FrontendType pattern FrontEndJson :: FrontendType buildLibraryInteractor :: Interactor () -- | Emacs/JSON mode. Note that it ignores the "check" action because it -- calls typeCheck directly. interactionInteractor :: InteractionFormat -> Interactor () -- | The (deprecated) repl mode. replInteractor :: Maybe AbsolutePath -> Interactor () -- | The interactor to use when there are no frontends or backends -- specified. defaultInteractor :: AbsolutePath -> Interactor () getInteractor :: MonadError String m => [Backend] -> Maybe AbsolutePath -> CommandLineOptions -> m (Maybe (Interactor ())) -- | Run Agda with parsed command line options runAgdaWithOptions :: Interactor a -> String -> CommandLineOptions -> TCM a -- | Print usage information. printUsage :: [Backend] -> Help -> IO () backendUsage :: Backend -> String -- | Print version information. printVersion :: [Backend] -> PrintAgdaVersion -> IO () printAgdaDataDir :: IO () printAgdaAppDir :: IO () -- | What to do for bad options. optionError :: String -> IO () -- | Run a TCM action in IO; catch and pretty print errors. runTCMPrettyErrors :: TCM () -> IO () -- | If the error is an IO error, and the error message suggests that the -- problem is related to locales or code pages, print out some extra -- information. helpForLocaleError :: TCErr -> IO ()