packages feed

Agda 2.5.1 → 2.5.1.1

raw patch · 28 files changed

+397/−197 lines, 28 filesdep ~Agdadep ~EdisonAPIdep ~uhc-utilPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: Agda, EdisonAPI, uhc-util

API changes (from Hackage documentation)

- Agda.Syntax.Common: data Placeholder
- Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.Placeholder
- Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.Placeholder
- Agda.Syntax.Common: instance GHC.Generics.Constructor Agda.Syntax.Common.C1_0NameId
- Agda.Syntax.Common: instance GHC.Generics.Datatype Agda.Syntax.Common.D1NameId
- Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.Placeholder
- Agda.Syntax.Concrete.Name: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Name.C1_0NamePart
- Agda.Syntax.Concrete.Name: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Name.C1_1NamePart
- Agda.Syntax.Concrete.Name: instance GHC.Generics.Datatype Agda.Syntax.Concrete.Name.D1NamePart
- Agda.Syntax.Concrete.Operators.Parser: In :: NK InfixNotation
- Agda.Syntax.Concrete.Operators.Parser: Non :: NK NonfixNotation
- Agda.Syntax.Concrete.Operators.Parser: Post :: NK PostfixNotation
- Agda.Syntax.Concrete.Operators.Parser: Pre :: NK PrefixNotation
- Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_0MemoKey
- Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_1MemoKey
- Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_2MemoKey
- Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_3MemoKey
- Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Constructor Agda.Syntax.Concrete.Operators.Parser.C1_4MemoKey
- Agda.Syntax.Concrete.Operators.Parser: instance GHC.Generics.Datatype Agda.Syntax.Concrete.Operators.Parser.D1MemoKey
- Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_0Interval'
- Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_0Position'
- Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_0Range'
- Agda.Syntax.Position: instance GHC.Generics.Constructor Agda.Syntax.Position.C1_1Range'
- Agda.Syntax.Position: instance GHC.Generics.Datatype Agda.Syntax.Position.D1Interval'
- Agda.Syntax.Position: instance GHC.Generics.Datatype Agda.Syntax.Position.D1Position'
- Agda.Syntax.Position: instance GHC.Generics.Datatype Agda.Syntax.Position.D1Range'
- Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_0Interval'
- Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_0Position'
- Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_1Interval'
- Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_1Position'
- Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_2Position'
- Agda.Syntax.Position: instance GHC.Generics.Selector Agda.Syntax.Position.S1_0_3Position'
- Agda.Syntax.Scope.Base: ModuleTag :: InScopeTag AbstractModule
- Agda.Syntax.Scope.Base: NameTag :: InScopeTag AbstractName
- Agda.TypeChecking.InstanceArguments: initializeIFSMeta :: String -> Type -> TCM Term
- Agda.TypeChecking.Monad.Base: [constraintProblem] :: ProblemConstraint -> ProblemId
- Agda.Utils.Maybe.Strict: instance GHC.Generics.Constructor Agda.Utils.Maybe.Strict.C1_0Maybe
- Agda.Utils.Maybe.Strict: instance GHC.Generics.Constructor Agda.Utils.Maybe.Strict.C1_1Maybe
- Agda.Utils.Maybe.Strict: instance GHC.Generics.Datatype Agda.Utils.Maybe.Strict.D1Maybe
+ Agda.Compiler.Epic.Erasure: infixr 2 ||-
+ Agda.Compiler.Epic.Erasure: infixr 3 &&-
+ Agda.Syntax.Common: data PositionInName
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.PositionInName
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.PositionInName
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.PositionInName
+ Agda.Syntax.Common: noPlaceholder :: e -> MaybePlaceholder e
+ Agda.Syntax.Concrete.Operators.Parser: [In] :: NK InfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [Non] :: NK NonfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [Post] :: NK PostfixNotation
+ Agda.Syntax.Concrete.Operators.Parser: [Pre] :: NK PrefixNotation
+ Agda.Syntax.Concrete.Operators.Parser: atLeastTwoParts :: IsExpr e => Parser e Name
+ Agda.Syntax.Concrete.Operators.Parser: wildOrUnqualifiedName :: IsExpr e => Parser e (Maybe Name)
+ Agda.Syntax.Scope.Base: [ModuleTag] :: InScopeTag AbstractModule
+ Agda.Syntax.Scope.Base: [NameTag] :: InScopeTag AbstractName
+ Agda.TypeChecking.Constraints: debugConstraints :: TCM ()
+ Agda.TypeChecking.InstanceArguments: Maybe :: YesNoMaybe
+ Agda.TypeChecking.InstanceArguments: No :: YesNoMaybe
+ Agda.TypeChecking.InstanceArguments: Yes :: YesNoMaybe
+ Agda.TypeChecking.InstanceArguments: data YesNoMaybe
+ Agda.TypeChecking.InstanceArguments: insidePi :: Type -> (Type -> TCM a) -> TCM a
+ Agda.TypeChecking.InstanceArguments: instance GHC.Classes.Eq Agda.TypeChecking.InstanceArguments.YesNoMaybe
+ Agda.TypeChecking.InstanceArguments: instance GHC.Show.Show Agda.TypeChecking.InstanceArguments.YesNoMaybe
+ Agda.TypeChecking.InstanceArguments: isIFSConstraint :: Constraint -> Bool
+ Agda.TypeChecking.Monad.Base: [constraintProblems] :: ProblemConstraint -> [ProblemId]
+ Agda.TypeChecking.Monad.Constraints: AwakeConstraint :: ConstraintStatus
+ Agda.TypeChecking.Monad.Constraints: SleepingConstraint :: ConstraintStatus
+ Agda.TypeChecking.Monad.Constraints: data ConstraintStatus
+ Agda.TypeChecking.Monad.Constraints: holdConstraints :: (ConstraintStatus -> ProblemConstraint -> Bool) -> TCM a -> TCM a
+ Agda.TypeChecking.Monad.Constraints: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Constraints.ConstraintStatus
+ Agda.TypeChecking.Monad.Constraints: instance GHC.Show.Show Agda.TypeChecking.Monad.Constraints.ConstraintStatus
+ Agda.TypeChecking.Monad.Constraints: solvingProblems :: [ProblemId] -> TCM a -> TCM a
+ Agda.TypeChecking.Primitive: infixl 9 <#>
+ Agda.TypeChecking.Primitive: infixr 4 ..-->
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Serialise.Instances.Common.SerialisedRange
+ Agda.TypeChecking.Substitute: infixr 4 ++#
+ Agda.Utils.FileName: infix 4 ===
+ Agda.Utils.Functor: infix 4 <&>
+ Agda.Utils.Functor: infixl 4 <$>
+ Agda.Utils.Functor: infixr 4 $>
+ Agda.Utils.Functor: infixr 9 <.>
+ Agda.Utils.Lens: infix 4 <&>
+ Agda.Utils.Lens: infixl 8 ^.
+ Agda.Utils.Monad: infixl 4 <$>
+ Agda.Utils.Parser.ReadP: infixr 5 <++
+ Agda.Utils.Tuple: infix 2 -*-
+ Agda.Utils.Tuple: infix 3 /\
- Agda.Auto.CaseSplit: caseSplitSearch :: IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
+ Agda.Auto.CaseSplit: caseSplitSearch :: forall o. IORef Int -> Int -> [ConstRef o] -> Maybe (EqReasoningConsts o) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
- Agda.Auto.CaseSplit: caseSplitSearch' :: (Int -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
+ Agda.Auto.CaseSplit: caseSplitSearch' :: forall o. (Int -> CSCtx o -> MExp o -> ([Nat], Nat, [Nat]) -> IO (Maybe (MExp o))) -> Int -> Int -> ConstRef o -> CSCtx o -> MExp o -> [CSPat o] -> IO [Sol o]
- Agda.Auto.NarrowingSearch: calc :: MetaEnv (PB blk) -> Maybe (CTree blk) -> Undo (Maybe [OKMeta blk])
+ Agda.Auto.NarrowingSearch: calc :: forall blk. MetaEnv (PB blk) -> Maybe (CTree blk) -> Undo (Maybe [OKMeta blk])
- Agda.Auto.NarrowingSearch: topSearch :: IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool
+ Agda.Auto.NarrowingSearch: topSearch :: forall blk. IORef Int -> IORef Int -> HandleSol -> blk -> MetaEnv (PB blk) -> Int -> Int -> IO Bool
- Agda.Auto.Typecheck: comp' :: Bool -> CExp o -> CExp o -> EE (MyPB o)
+ Agda.Auto.Typecheck: comp' :: forall o. Bool -> CExp o -> CExp o -> EE (MyPB o)
- Agda.Compiler.MAlonzo.Misc: emptyBinds :: Binds
+ Agda.Compiler.MAlonzo.Misc: emptyBinds :: Maybe Binds
- Agda.Syntax.Abstract.Views: recurseExpr :: (ExprLike a, Applicative m) => (Expr -> m Expr -> m Expr) -> a -> m a
+ Agda.Syntax.Abstract.Views: recurseExpr :: (ExprLike a, Traversable f, Applicative m) => (Expr -> m Expr -> m Expr) -> f a -> m (f a)
- Agda.Syntax.Common: Beginning :: Placeholder
+ Agda.Syntax.Common: Beginning :: PositionInName
- Agda.Syntax.Common: End :: Placeholder
+ Agda.Syntax.Common: End :: PositionInName
- Agda.Syntax.Common: Middle :: Placeholder
+ Agda.Syntax.Common: Middle :: PositionInName
- Agda.Syntax.Common: NoPlaceholder :: e -> MaybePlaceholder e
+ Agda.Syntax.Common: NoPlaceholder :: !(Maybe PositionInName) -> e -> MaybePlaceholder e
- Agda.Syntax.Common: Placeholder :: !Placeholder -> MaybePlaceholder e
+ Agda.Syntax.Common: Placeholder :: !PositionInName -> MaybePlaceholder e
- Agda.Syntax.Concrete.Operators.Parser: maybePlaceholder :: Maybe Placeholder -> Parser e e -> Parser e (MaybePlaceholder e)
+ Agda.Syntax.Concrete.Operators.Parser: maybePlaceholder :: Maybe PositionInName -> Parser e e -> Parser e (MaybePlaceholder e)
- Agda.Syntax.Concrete.Operators.Parser: opP :: IsExpr e => ParseSections -> Parser e e -> NewNotation -> NK k -> Parser e (OperatorType k e)
+ Agda.Syntax.Concrete.Operators.Parser: opP :: forall e k. IsExpr e => ParseSections -> Parser e e -> NewNotation -> NK k -> Parser e (OperatorType k e)
- Agda.Syntax.Concrete.Operators.Parser: placeholder :: Placeholder -> Parser e (MaybePlaceholder e)
+ Agda.Syntax.Concrete.Operators.Parser: placeholder :: PositionInName -> Parser e (MaybePlaceholder e)
- Agda.Syntax.Scope.Base: inNameSpace :: InScope a => NameSpace -> ThingsInScope a
+ Agda.Syntax.Scope.Base: inNameSpace :: forall a. InScope a => NameSpace -> ThingsInScope a
- Agda.Syntax.Scope.Base: scopeLookup' :: InScope a => QName -> ScopeInfo -> [(a, Access)]
+ Agda.Syntax.Scope.Base: scopeLookup' :: forall a. InScope a => QName -> ScopeInfo -> [(a, Access)]
- Agda.Termination.SparseMatrix: zipMatrices :: (Ord i) => (a -> c) -> (b -> c) -> (a -> b -> c) -> (c -> Bool) -> Matrix i a -> Matrix i b -> Matrix i c
+ Agda.Termination.SparseMatrix: zipMatrices :: forall a b c i. (Ord i) => (a -> c) -> (b -> c) -> (a -> b -> c) -> (c -> Bool) -> Matrix i a -> Matrix i b -> Matrix i c
- Agda.TypeChecking.InstanceArguments: filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM Bool) -> TCM [Candidate]
+ Agda.TypeChecking.InstanceArguments: filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM YesNoMaybe) -> TCM [Candidate]
- Agda.TypeChecking.MetaVars: newIFSMeta :: MetaNameSuggestion -> Type -> Maybe [Candidate] -> TCM Term
+ Agda.TypeChecking.MetaVars: newIFSMeta :: MetaNameSuggestion -> Type -> TCM Term
- Agda.TypeChecking.MetaVars: newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> Maybe [Candidate] -> TCM Term
+ Agda.TypeChecking.MetaVars: newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> TCM Term
- Agda.TypeChecking.Monad.Base: PConstr :: ProblemId -> Closure Constraint -> ProblemConstraint
+ Agda.TypeChecking.Monad.Base: PConstr :: [ProblemId] -> Closure Constraint -> ProblemConstraint
- Agda.TypeChecking.Patterns.Match: foldMatch :: (p -> v -> ReduceM (Match Term, v)) -> [p] -> [v] -> ReduceM (Match Term, [v])
+ Agda.TypeChecking.Patterns.Match: foldMatch :: forall p v. (p -> v -> ReduceM (Match Term, v)) -> [p] -> [v] -> ReduceM (Match Term, [v])
- Agda.TypeChecking.Serialise.Base: tickICode :: Typeable a => a -> S ()
+ Agda.TypeChecking.Serialise.Base: tickICode :: forall a. Typeable a => a -> S ()
- Agda.TypeChecking.Serialise.Base: vcase :: EmbPrj a => (Node -> R a) -> Int32 -> R a
+ Agda.TypeChecking.Serialise.Base: vcase :: forall a. EmbPrj a => (Node -> R a) -> Int32 -> R a
- Agda.TypeChecking.SizedTypes.WarshallSolver: glb' :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: glb' :: forall r f. (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: lub' :: (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
+ Agda.TypeChecking.SizedTypes.WarshallSolver: lub' :: forall r f. (Ord r, Ord f, Show r, Show f) => HypGraph r f -> (Node r f, Offset) -> (Node r f, Offset) -> Maybe (SizeExpr' r f)
- Agda.TypeChecking.SizedTypes.WarshallSolver: transClos :: (Ord n, Dioid a) => Graph n n a -> Graph n n a
+ Agda.TypeChecking.SizedTypes.WarshallSolver: transClos :: forall n a. (Ord n, Dioid a) => Graph n n a -> Graph n n a
- Agda.TypeChecking.Telescope: renaming :: DeBruijn a => Permutation -> Substitution' a
+ Agda.TypeChecking.Telescope: renaming :: forall a. DeBruijn a => Permutation -> Substitution' a
- Agda.Utils.Bag: traverse' :: (Applicative m, Ord b) => (a -> m b) -> Bag a -> m (Bag b)
+ Agda.Utils.Bag: traverse' :: forall a b m. (Applicative m, Ord b) => (a -> m b) -> Bag a -> m (Bag b)
- Agda.Utils.Except: catchError :: MonadError e m => m a -> (e -> m a) -> m a
+ Agda.Utils.Except: catchError :: m a -> (e -> m a) -> m a
- Agda.Utils.Except: throwError :: MonadError e m => e -> m a
+ Agda.Utils.Except: throwError :: e -> m a
- Agda.Utils.Favorites: property_not_null_singleton :: a -> Bool
+ Agda.Utils.Favorites: property_not_null_singleton :: forall a. a -> Bool
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: gaussJordanFloydWarshallMcNaughtonYamada :: (Ord n, Eq e, StarSemiRing e) => Graph n n e -> (Graph n n e, [SCC n])
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: gaussJordanFloydWarshallMcNaughtonYamada :: forall n e. (Ord n, Eq e, StarSemiRing e) => Graph n n e -> (Graph n n e, [SCC n])
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: gaussJordanFloydWarshallMcNaughtonYamadaReference :: (Ord n, Eq e, StarSemiRing e) => Graph n n e -> Graph n n e
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: gaussJordanFloydWarshallMcNaughtonYamadaReference :: forall n e. (Ord n, Eq e, StarSemiRing e) => Graph n n e -> Graph n n e
- Agda.Utils.Graph.AdjacencyMap.Unidirectional: sccDAG' :: Ord n => Graph n n e -> [SCC n] -> DAG n
+ Agda.Utils.Graph.AdjacencyMap.Unidirectional: sccDAG' :: forall n e. Ord n => Graph n n e -> [SCC n] -> DAG n
- Agda.Utils.Monad: mplus :: MonadPlus m => m a -> m a -> m a
+ Agda.Utils.Monad: mplus :: m a -> m a -> m a
- Agda.Utils.Monad: mzero :: MonadPlus m => m a
+ Agda.Utils.Monad: mzero :: m a
- Agda.Utils.Null: null :: Null a => a -> Bool
+ Agda.Utils.Null: null :: (Null a, Eq a) => a -> Bool

Files

Agda.cabal view
@@ -1,5 +1,5 @@ name:            Agda-version:         2.5.1+version:         2.5.1.1 cabal-version:   >= 1.8 build-type:      Custom license:         OtherLicense@@ -35,6 +35,7 @@ tested-with:        GHC == 7.6.3                     GHC == 7.8.4                     GHC == 7.10.3+                    GHC == 8.0.1 extra-source-files: src/full/undefined.h                     README.md                     CHANGELOG@@ -76,8 +77,8 @@  source-repository this   type:     git-  location: https://github.com/agda/agda/tree/2.5.1-  tag:      2.5.1+  location: https://github.com/agda/agda/tree/v2.5.1.1+  tag:      v2.5.1.1  flag cpphs   default:     True@@ -99,12 +100,13 @@     ghc-options: -pgmP cpphs -optP --cpp    if flag(uhc)-    build-depends:    shuffle >= 0.1.3.3-                    , uhc-light >= 1.1.9.2 && < 1.2-                    , uhc-util >= 0.1.6.3 && < 0.1.6.6-                    , uulib >= 0.9.20-    -- we use the CPP processor to conditionally import the UHC Light modules. If UHC Light is not-    -- present, we instead create dummy definitions, see module Agda.Compiler.UHC.Bridge.+    build-depends:  shuffle >= 0.1.3.3+                  , uhc-light >= 1.1.9.2 && < 1.2+                  , uhc-util >= 0.1.6.3 && < 0.1.6.7+                  , uulib >= 0.9.20+    -- we use the CPP processor to conditionally import the UHC Light+    -- modules. If UHC Light is not present, we instead create dummy+    -- definitions, see module Agda.Compiler.UHC.Bridge.     cpp-options:    -DUHC_BACKEND    if os(windows)@@ -534,7 +536,7 @@   hs-source-dirs: src/main   main-is:        Main.hs   build-depends:-    Agda == 2.5.1+    Agda == 2.5.1.1     -- Nothing is used from the following package, except for the     -- prelude.     , base >= 4.6.0.1 && < 6@@ -572,3 +574,4 @@     , mtl >= 2.1.1 && <= 2.1.3.1 || >= 2.2.1 && < 2.3     , filepath >= 1.3.0.1 && < 1.5   ghc-options:  -rtsopts+
CHANGELOG view
@@ -1,4 +1,60 @@ ------------------------------------------------------------------------+-- Release notes for Agda version 2.5.1.1+------------------------------------------------------------------------++Important changes since 2.5.1:++Installation and infrastructure+===============================++* Added support for GHC 8.0.1.++Bug fixes+=========++* Fixed a serious performance problem with instance search++  Issues #1952 and #1998. Also related: #1955 and #2025++* Interactively splitting variable with C-c C-c no longer introduces+  new trailing patterns.  This fixes issue #1950.++    data Ty : Set where+      _⇒_ : Ty → Ty → Ty++    ⟦_⟧ : Ty → Set+    ⟦ A ⇒ B ⟧ = ⟦ A ⟧ → ⟦ B ⟧++    data Term : Ty → Set where+      K : (A B : Ty) → Term (A ⇒ (B ⇒ A))++    test : (A : Ty) (a : Term A) → ⟦ A ⟧+    test A a = {!a!}++  Before change, case splitting on `a` would give++    test .(A ⇒ (B ⇒ A)) (K A B) x x₁ = ?++  Now, it yields++    test .(A ⇒ (B ⇒ A)) (K A B) = ?++* Other issues fixed ( see https://github.com/agda/agda/issues ):+  - #1322 (Missing error for attempted higher order instance)+  - #1951 (mixfix binders not working in 'syntax')+  - #1967 (too eager insteance search error)+  - #1974 (lost constraint dependencies)+  - #1982 (internal error in unifier)+  - #2034 (function type instance goals)++Compiler backends+=================++* UHC compiler backend++  Added support for UHC 1.1.9.4.++------------------------------------------------------------------------ -- Release notes for Agda version 2.5.1 ------------------------------------------------------------------------ 
dist/build/Agda/Syntax/Parser/Lexer.hs view
@@ -267,27 +267,6 @@ {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-}-{-# LINE 9 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-8.0-upstream/lib/ghc-8.0.0.20160316/include/ghcversion.h" #-}-------------------{-# LINE 9 "<command-line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- ----------------------------------------------------------------------------- -- ALEX TEMPLATE
dist/build/Agda/Syntax/Parser/Parser.hs view
@@ -6324,27 +6324,6 @@ {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-}-{-# LINE 11 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-8.0-upstream/lib/ghc-8.0.0.20160316/include/ghcversion.h" #-}-------------------{-# LINE 11 "<command-line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp  
src/data/emacs-mode/agda2-mode.el view
@@ -10,7 +10,7 @@  ;;; Code: -(defvar agda2-version "2.5.1"+(defvar agda2-version "2.5.1.1"   "The version of the Agda mode. Note that the same version of the Agda executable must be used.") 
src/full/Agda/Interaction/BasicOps.hs view
@@ -295,7 +295,7 @@       FindInScopeOF _ _ _        -> __IMPOSSIBLE__  instance Reify ProblemConstraint (Closure (OutputForm Expr Expr)) where-  reify (PConstr pid cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm (getRange c) pid <$> reify c)+  reify (PConstr pids cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm (getRange c) (last pids) <$> reify c)  instance Reify Constraint (OutputConstraint Expr Expr) where     reify (ValueCmp cmp t u v)   = CmpInType cmp <$> reify t <*> reify u <*> reify v
src/full/Agda/Interaction/Imports.hs view
@@ -726,6 +726,11 @@     -- Andreas, Makoto, 2014-10-18 AIM XX: repeating the experiment     -- with discarding also the nameBindingSite in QName:     -- Saves 10% on serialization time (and file size)!+    --+    -- NOTE: We no longer discard all nameBindingSites (but the commit+    -- that introduced this change seems to have made Agda a bit+    -- faster and interface file sizes a bit smaller, at least for the+    -- standard library).     builtin <- use stLocalBuiltins     ms      <- getImports     mhs     <- mapM (\ m -> (m,) <$> moduleHash m) $ Set.toList ms@@ -736,7 +741,8 @@     -- Non-closed display forms are not applicable outside the module anyway,     -- and should be dead-code eliminated (#1928).     display <- HMap.filter (not . null) . HMap.map (filter isClosed) <$> use stImportsDisplayForms-    (display, sig) <- second killRange <$> (eliminateDeadCode display =<< getSignature)+    -- TODO: Kill some ranges?+    (display, sig) <- eliminateDeadCode display =<< getSignature     -- Andreas, 2015-02-09 kill ranges in pattern synonyms before     -- serialization to avoid error locations pointing to external files     -- when expanding a pattern synoym.
src/full/Agda/Syntax/Common.hs view
@@ -18,6 +18,7 @@ import qualified Data.ByteString.Char8 as ByteString import Data.Foldable import Data.Hashable+import qualified Data.Strict.Maybe as Strict import Data.Monoid import Data.Traversable import Data.Typeable (Typeable)@@ -768,32 +769,49 @@  newtype Constr a = Constr a -data Placeholder+------------------------------------------------------------------------+-- * Placeholders (used to parse sections)+------------------------------------------------------------------------++-- | The position of a name part or underscore in a name.++data PositionInName   = Beginning-    -- ^ @_foo@.+    -- ^ The following underscore is at the beginning of the name:+    -- @_foo@.   | Middle-    -- ^ @foo_bar@.+    -- ^ The following underscore is in the middle of the name:+    -- @foo_bar@.   | End-    -- ^ @foo_@.+    -- ^ The following underscore is at the end of the name: @foo_@.   deriving (Show, Eq, Ord)  -- | Placeholders are used to represent the underscores in a section.+ data MaybePlaceholder e-  = Placeholder !Placeholder-  | NoPlaceholder e+  = Placeholder !PositionInName+  | NoPlaceholder !(Strict.Maybe PositionInName) e+    -- ^ The second argument is used only (but not always) for name+    -- parts other than underscores.   deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable, Show) +-- | An abbreviation: @noPlaceholder = 'NoPlaceholder'+-- 'Strict.Nothing'@.++noPlaceholder :: e -> MaybePlaceholder e+noPlaceholder = NoPlaceholder Strict.Nothing+ instance HasRange a => HasRange (MaybePlaceholder a) where-  getRange Placeholder{}     = noRange-  getRange (NoPlaceholder e) = getRange e+  getRange Placeholder{}       = noRange+  getRange (NoPlaceholder _ e) = getRange e  instance KillRange a => KillRange (MaybePlaceholder a) where-  killRange p@Placeholder{}   = p-  killRange (NoPlaceholder e) = killRange1 NoPlaceholder e+  killRange p@Placeholder{}     = p+  killRange (NoPlaceholder p e) = killRange1 (NoPlaceholder p) e  instance NFData a => NFData (MaybePlaceholder a) where-  rnf (Placeholder _)   = ()-  rnf (NoPlaceholder a) = rnf a+  rnf (Placeholder _)     = ()+  rnf (NoPlaceholder _ a) = rnf a  --------------------------------------------------------------------------- -- * Interaction meta variables
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -452,9 +452,9 @@             nonAssoc = case filter (isInfix NonAssoc) ops of               []  -> Nothing               ops -> Just $ do-                x <- NoPlaceholder <$> higher+                x <- noPlaceholder <$> higher                 f <- choice In ops-                y <- NoPlaceholder <$> higher+                y <- noPlaceholder <$> higher                 return (f x y)              or p1 []   p2 []   = Nothing@@ -466,7 +466,7 @@             preRight =               or (choice Pre)                  (filter isPrefix ops)-                 (\ops -> flip ($) <$> (NoPlaceholder <$> higher)+                 (\ops -> flip ($) <$> (noPlaceholder <$> higher)                                    <*> choice In ops)                  (filter (isInfix RightAssoc) ops) @@ -474,14 +474,14 @@             preRights = do               preRight <- preRight               return $ Data.Function.fix $ \preRights ->-                preRight <*> (NoPlaceholder <$> (preRights <|> higher))+                preRight <*> (noPlaceholder <$> (preRights <|> higher))              postLeft :: Maybe (Parser e (MaybePlaceholder e -> e))             postLeft =               or (choice Post)                  (filter isPostfix ops)                  (\ops -> flip <$> choice In ops-                               <*> (NoPlaceholder <$> higher))+                               <*> (noPlaceholder <$> higher))                  (filter (isInfix LeftAssoc) ops)              postLefts :: Maybe (Parser e e)@@ -489,7 +489,7 @@               postLeft <- postLeft               return $ Data.Function.fix $ \postLefts ->                 memoise (PostLeftsK key) $-                  flip ($) <$> (NoPlaceholder <$> (postLefts <|> higher))+                  flip ($) <$> (noPlaceholder <$> (postLefts <|> higher))                            <*> postLeft  ---------------------------------------------------------------------------
src/full/Agda/Syntax/Concrete/Operators/Parser.hs view
@@ -12,6 +12,7 @@ import Data.Either import Data.Hashable import Data.Maybe+import qualified Data.Strict.Maybe as Strict import Data.Set (Set)  import GHC.Generics (Generic)@@ -42,26 +43,26 @@ type Parser tok a =   MemoisedCPS.Parser MemoKey tok (MaybePlaceholder tok) a -placeholder :: Placeholder -> Parser e (MaybePlaceholder e)+placeholder :: PositionInName -> Parser e (MaybePlaceholder e) placeholder p = sat $ \t ->   case t of     Placeholder p' | p' == p -> True     _                        -> False  maybePlaceholder ::-  Maybe Placeholder -> Parser e e -> Parser e (MaybePlaceholder e)+  Maybe PositionInName -> Parser e e -> Parser e (MaybePlaceholder e) maybePlaceholder mp p = case mp of   Nothing -> p'   Just h  -> placeholder h <|> p'   where-  p' = NoPlaceholder <$> p+  p' = noPlaceholder <$> p  notPlaceholder :: Parser e e notPlaceholder = do   tok <- token   case tok of-    Placeholder _   -> empty-    NoPlaceholder e -> return e+    Placeholder _     -> empty+    NoPlaceholder _ e -> return e  sat' :: (e -> Bool) -> Parser e e sat' p = do@@ -116,7 +117,7 @@         IdentP x         -> LocalV x         AppP e1 e2       -> AppV e1 e2         OpAppP r d ns es -> OpAppV d ns ((map . fmap . fmap)-                                           (NoPlaceholder . Ordinary) es)+                                           (noPlaceholder . Ordinary) es)         HiddenP _ e      -> HiddenArgV e         InstanceP _ e    -> InstanceArgV e         ParenP _ e       -> ParenV e@@ -128,8 +129,8 @@         OpAppV d ns es -> let ess :: [NamedArg Pattern]                               ess = (map . fmap . fmap)                                       (\x -> case x of-                                          Placeholder{}   -> __IMPOSSIBLE__-                                          NoPlaceholder x -> fromOrdinary __IMPOSSIBLE__ x)+                                          Placeholder{}     -> __IMPOSSIBLE__+                                          NoPlaceholder _ x -> fromOrdinary __IMPOSSIBLE__ x)                                       es                           in OpAppP (fuseRange d ess) d ns ess         HiddenArgV e   -> HiddenP (getRange e) e@@ -143,8 +144,13 @@ data ParseSections = ParseSections | DoNotParseSections   deriving (Eq, Show) +-- | Runs a parser. If sections should be parsed, then identifiers+-- with at least two name parts are split up into multiple tokens,+-- using 'PositionInName' to record the tokens' original positions+-- within their respective identifiers.+ parse :: IsExpr e => (ParseSections, Parser e a) -> [e] -> [a]-parse (DoNotParseSections, p) es = Parser.parse p (map NoPlaceholder es)+parse (DoNotParseSections, p) es = Parser.parse p (map noPlaceholder es) parse (ParseSections,      p) es = Parser.parse p                                      (concat $ map splitExpr es)   where@@ -153,11 +159,11 @@     LocalV n -> splitName n     _        -> noSplit     where-    noSplit = [NoPlaceholder e]+    noSplit = [noPlaceholder e]      splitName n = case last ns of-      NoName{}  -> noSplit-      Name r ps -> splitParts r (init ns) Beginning ps+      Name r ps@(_ : _ : _) -> splitParts r (init ns) Beginning ps+      _                     -> noSplit       where       ns = qnameParts n @@ -168,14 +174,17 @@       -- Note also that the module qualifier, if any, is only applied       -- to the first name part. -      splitParts _ _ _ []          = []+      splitParts _ _ _ []          = __IMPOSSIBLE__       splitParts _ _ _ (Hole : []) = [Placeholder End]+      splitParts r m _ (Id s : []) = [part r m End s]       splitParts r m w (Hole : ps) = Placeholder w : splitParts r m  Middle ps-      splitParts r m _ (Id s : ps) = part          : splitParts r [] Middle ps-        where-        part = NoPlaceholder $ unExprView $ LocalV $-                 foldr Qual (QName (Name r [Id s])) m+      splitParts r m w (Id s : ps) = part r m w s  : splitParts r [] Middle ps +      part r m w s =+        NoPlaceholder (Strict.Just w)+                      (unExprView $ LocalV $+                         foldr Qual (QName (Name r [Id s])) m)+ --------------------------------------------------------------------------- -- * Parser combinators ---------------------------------------------------------------------------@@ -196,6 +205,51 @@             LocalV y | str == show y -> Just (getRange y)             _                        -> Nothing +-- | Parses a split-up, unqualified name consisting of at least two+-- name parts.+--+-- The parser does not check that underscores and other name parts+-- alternate. The range of the resulting name is the range of the+-- first name part that is not an underscore.++atLeastTwoParts :: IsExpr e => Parser e Name+atLeastTwoParts = do+  (r, ps) <- parts Beginning+  case r of+    Nothing -> __IMPOSSIBLE__+    Just r  -> return (Name r ps)+  where+  parts pos = do+    tok          <- token+    (pos', r, p) <- case tok of+      Placeholder pos'                   -> return (pos', Nothing, Hole)+      NoPlaceholder (Strict.Just pos') e -> case exprView e of+        LocalV (QName (Name r [Id s])) -> return (pos', Just r, Id s)+        _                              -> empty+      _ -> empty+    if pos == Middle && pos' == End then+      return (r, [p])+     else if pos' == pos then do+      (r', ps) <- parts Middle+      return (maybe r' Just r, p : ps)+     else+      empty++-- | Either a wildcard (@_@), or an unqualified name (possibly+-- containing multiple name parts).++wildOrUnqualifiedName :: IsExpr e => Parser e (Maybe Name)+wildOrUnqualifiedName =+  (Nothing <$ partP [] "_")+    <|>+  (do e <- notPlaceholder+      case exprView e of+        LocalV (QName n) -> return (Just n)+        WildV _          -> return Nothing+        _                -> empty)+    <|>+  Just <$> atLeastTwoParts+ -- | Used to define the return type of 'opP'.  type family OperatorType (k :: NotationKind) (e :: *) :: *@@ -288,13 +342,10 @@     (r, es) <- worker ms xs     return (r, Right (mkBinding h $ Name noRange [Hole]) : es)   worker ms (BindHole h : xs) = do-    e <- notPlaceholder-    case exprView e of-      LocalV (QName name) -> ret name-      WildV e             -> ret (Name noRange [Hole])-      _                   -> empty-        -- Old error message: "Expected variable name in binding-        -- position".+    e <- wildOrUnqualifiedName+    case e of+      Just name -> ret name+      Nothing   -> ret (Name noRange [Hole])     where     ret x = do       (r, es) <- worker ms xs@@ -311,10 +362,10 @@     NamedArg (MaybePlaceholder (OpApp e))   findExprFor normalHoles binders n =     case [ h | h@(_, m) <- normalHoles, namedArg m == n ] of-      [(Placeholder p,   arg)] -> set (Placeholder p) arg-      [(NoPlaceholder e, arg)] -> case [b | (b, m) <- binders, m == n] of-        [] -> set (NoPlaceholder (Ordinary e)) arg -- no variable to bind-        bs -> set (NoPlaceholder (SyntaxBindingLambda (fuseRange bs e) bs e)) arg+      [(Placeholder p,     arg)] -> set (Placeholder p) arg+      [(NoPlaceholder _ e, arg)] -> case [b | (b, m) <- binders, m == n] of+        [] -> set (noPlaceholder (Ordinary e)) arg -- no variable to bind+        bs -> set (noPlaceholder (SyntaxBindingLambda (fuseRange bs e) bs e)) arg       _ -> __IMPOSSIBLE__    noPlaceholders :: [NamedArg (MaybePlaceholder (OpApp e))] -> Int
src/full/Agda/Syntax/Concrete/Pretty.hs view
@@ -12,6 +12,7 @@  import Data.Functor import Data.Maybe+import qualified Data.Strict.Maybe as Strict  import Agda.Syntax.Common import Agda.Syntax.Concrete@@ -105,8 +106,8 @@   pretty (SyntaxBindingLambda r bs e) = pretty (Lam r bs e)  instance Pretty a => Pretty (MaybePlaceholder a) where-  pretty Placeholder{}     = text "_"-  pretty (NoPlaceholder e) = pretty e+  pretty Placeholder{}       = text "_"+  pretty (NoPlaceholder _ e) = pretty e  instance Pretty Expr where     pretty e =@@ -511,7 +512,7 @@             IdentP x        -> pretty x             AppP p1 p2      -> sep [ pretty p1, nest 2 $ pretty p2 ]             RawAppP _ ps    -> fsep $ map pretty ps-            OpAppP _ q _ ps -> fsep $ prettyOpApp q (fmap (fmap (fmap NoPlaceholder)) ps)+            OpAppP _ q _ ps -> fsep $ prettyOpApp q (fmap (fmap (fmap (NoPlaceholder Strict.Nothing))) ps)             HiddenP _ p     -> braces' $ pretty p             InstanceP _ p   -> dbraces $ pretty p             ParenP _ p      -> parens $ pretty p@@ -545,7 +546,7 @@      -- Section underscores should be printed without surrounding     -- whitespace. This function takes care of that.-    merge :: [Doc] -> [(Doc, Maybe Placeholder)] -> [Doc]+    merge :: [Doc] -> [(Doc, Maybe PositionInName)] -> [Doc]     merge before []                            = reverse before     merge before ((d, Nothing) : after)        = merge (d : before) after     merge before ((d, Just Beginning) : after) = mergeRight before d after
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -914,7 +914,7 @@ cOpApp :: Range -> C.QName -> A.Name -> [C.Expr] -> C.Expr cOpApp r x n es =   C.OpApp r x (Set.singleton n)-          (map (defaultNamedArg . NoPlaceholder . Ordinary) es)+          (map (defaultNamedArg . noPlaceholder . Ordinary) es)  tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr tryToRecoverOpApp e def = caseMaybeM (recoverOpApp bracket cOpApp view e) def return
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -2049,9 +2049,9 @@       ScopeM ([A.LamBinding], [NamedArg (Either A.Expr (OpApp e))])     replacePlaceholders []       = return ([], [])     replacePlaceholders (a : as) = case namedArg a of-      NoPlaceholder x -> mapSnd (set (Right x) a :) <$>-                           replacePlaceholders as-      Placeholder p   -> do+      NoPlaceholder _ x -> mapSnd (set (Right x) a :) <$>+                             replacePlaceholders as+      Placeholder _     -> do         x <- freshName noRange "section"         let i = argInfo a         (ls, ns) <- replacePlaceholders as
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -46,6 +46,7 @@ import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA) import Agda.Syntax.Info as Info import Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Pretty import Agda.Syntax.Internal as I import Agda.Syntax.Internal.Pattern as I import Agda.Syntax.Scope.Base (isNameInScope, inverseScopeLookupName)@@ -69,6 +70,7 @@ import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Permutation+import Agda.Utils.Pretty import Agda.Utils.Size import Agda.Utils.Tuple @@ -198,16 +200,25 @@     -- Ulf, can you add an explanation?     md <- liftTCM $ -- addContext (replicate (length ps) "x") $       displayForm f vs-    reportSLn "reify.display" 20 $+    reportSLn "reify.display" 60 $       "display form of " ++ show f ++ " " ++ show ps ++ " " ++ show wps ++ ":\n  " ++ show md     case md of-      Just d  | okDisplayForm d ->+      Just d  | okDisplayForm d -> do         -- In the display term @d@, @var i@ should be a placeholder         -- for the @i@th pattern of @ps@.         -- Andreas, 2014-06-11:         -- Are we sure that @d@ did not use @var i@ otherwise?-        reifyDisplayFormP =<< displayLHS (map namedArg ps) wps d-      _ -> return lhs+        lhs' <- displayLHS (map namedArg ps) wps d+        reportSDoc "reify.display" 70 $ do+          doc <- prettyA lhs'+          return $ vcat+            [ text "rewritten lhs to"+            , text "  lhs' = " <+> doc+            ]+        reifyDisplayFormP lhs'+      _ -> do+        reportSLn "reify.display" 70 $ "display form absent or not valid as lhs"+        return lhs   where     -- Andreas, 2015-05-03: Ulf, please comment on what     -- is the idea behind okDisplayForm.@@ -215,13 +226,15 @@     -- can serve as a valid left-hand side. That means checking that it is a     -- defined name applied to valid lhs eliminators (projections or     -- applications to constructor patterns).-    okDisplayForm (DWithApp d ds [])   = okDisplayForm d && all okDisplayTerm ds+    okDisplayForm (DWithApp d ds args) =+      okDisplayForm d && all okDisplayTerm ds  && all okToDrop args+      -- Andreas, 2016-05-03, issue #1950.+      -- We might drop trailing hidden trivial (=variable) patterns.     okDisplayForm (DTerm (I.Def f vs)) = all okElim vs     okDisplayForm (DDef f es)          = all okDElim es     okDisplayForm DDot{}               = False     okDisplayForm DCon{}               = False     okDisplayForm DTerm{}              = False-    okDisplayForm DWithApp{}           = False      okDisplayTerm (DTerm v) = okTerm v     okDisplayTerm DDot{}    = True@@ -231,6 +244,12 @@      okDElim (I.Apply v) = okDisplayTerm $ unArg v     okDElim I.Proj{}    = True++    okToDrop arg = notVisible arg && case ignoreSharing $ unArg arg of+      I.Var _ []   -> True+      I.DontCare{} -> True  -- no matching on irrelevant things.  __IMPOSSIBLE__ anyway?+      I.Level{}    -> True  -- no matching on levels. __IMPOSSIBLE__ anyway?+      _ -> False      okArg = okTerm . unArg 
src/full/Agda/TypeChecking/Constraints.hs view
@@ -25,6 +25,7 @@ import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Pretty (prettyShow)+import Agda.Utils.Lens  #include "undefined.h" import Agda.Utils.Impossible@@ -205,4 +206,13 @@   CheckArgs eh r args t0 t1 k    -> checkArguments' eh r args t0 t1 k   CheckLambda args body target   -> checkPostponedLambda args body target   UnquoteTactic tac hole t       -> unquoteTactic tac hole t $ return hole++debugConstraints :: TCM ()+debugConstraints = verboseS "tc.constr" 50 $ do+  awake    <- use stAwakeConstraints+  sleeping <- use stSleepingConstraints+  reportSDoc "" 0 $ vcat+    [ text "Current constraints"+    , nest 2 $ vcat [ text "awake " <+> vcat (map prettyTCM awake)+                    , text "asleep" <+> vcat (map prettyTCM sleeping) ] ] 
src/full/Agda/TypeChecking/Constraints.hs-boot view
@@ -9,3 +9,4 @@ noConstraints          :: TCM a -> TCM a ifNoConstraints_       :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a guardConstraint        :: Constraint -> TCM () -> TCM ()+debugConstraints       :: TCM ()
src/full/Agda/TypeChecking/Coverage.hs view
@@ -551,7 +551,10 @@  -- | Entry point from @Interaction.MakeCase@. splitClauseWithAbsurd :: SplitClause -> Nat -> TCM (Either SplitError (Either SplitClause Covering))-splitClauseWithAbsurd c x = split' Inductive c (BlockingVar x Nothing)+splitClauseWithAbsurd c x = split' Inductive False c (BlockingVar x Nothing)+  -- Andreas, 2016-05-03, issue 1950:+  -- Do not introduce trailing pattern vars after split,+  -- because this does not work for with-clauses.  -- | Entry point from @TypeChecking.Empty@ and @Interaction.BasicOps@. --   @splitLast CoInductive@ is used in the @refine@ tactics.@@ -578,7 +581,7 @@       -> SplitClause       -> BlockingVar       -> TCM (Either SplitError Covering)-split ind sc x = fmap blendInAbsurdClause <$> split' ind sc x+split ind sc x = fmap blendInAbsurdClause <$> split' ind True sc x   where     n = lookupPatternVar sc $ blockingVarNo x     blendInAbsurdClause :: Either SplitClause Covering -> Covering@@ -613,10 +616,13 @@ split' :: Induction           -- ^ Coinductive constructors are allowed if this argument is           -- 'CoInductive'.+       -> Bool+          -- ^ If 'True', introduce new trailing variable patterns via+          --   'fixTarget'.        -> SplitClause        -> BlockingVar        -> TCM (Either SplitError (Either SplitClause Covering))-split' ind sc@(SClause tel ps _ target) (BlockingVar x mcons) = liftTCM $ runExceptionT $ do+split' ind fixtarget sc@(SClause tel ps _ target) (BlockingVar x mcons) = liftTCM $ runExceptionT $ do    debugInit tel x ps @@ -636,6 +642,7 @@     forM cons $ \ con ->       fmap (con,) <$> do         msc <- computeNeighbourhood delta1 n delta2 d pars ixs x ps con+        if not fixtarget then return msc else do         Trav.forM msc $ \ sc -> lift $ snd <$> fixTarget sc{ scTarget = target }    case ns of
src/full/Agda/TypeChecking/Errors.hs view
@@ -839,12 +839,12 @@         unambiguous e = pretty e          isOrdinary :: MaybePlaceholder (C.OpApp e) -> Bool-        isOrdinary (NoPlaceholder (C.Ordinary _)) = True-        isOrdinary _                              = False+        isOrdinary (NoPlaceholder _ (C.Ordinary _)) = True+        isOrdinary _                                = False          fromOrdinary :: MaybePlaceholder (C.OpApp e) -> e-        fromOrdinary (NoPlaceholder (C.Ordinary e)) = e-        fromOrdinary _                              = __IMPOSSIBLE__+        fromOrdinary (NoPlaceholder _ (C.Ordinary e)) = e+        fromOrdinary _                                = __IMPOSSIBLE__          isPlaceholder :: MaybePlaceholder a -> Bool         isPlaceholder Placeholder{}   = True
src/full/Agda/TypeChecking/Implicit.hs view
@@ -16,7 +16,6 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute-import {-# SOURCE #-} Agda.TypeChecking.InstanceArguments import Agda.TypeChecking.Pretty  import Agda.Utils.Tuple@@ -53,9 +52,10 @@           mapFst (narg :) <$> implicitNamedArgs (n-1) expand (absApp b v)       _ -> return ([], t0')   where+    newMeta :: Hiding -> String -> Type -> TCM Term     newMeta Hidden   = newNamedValueMeta RunMetaOccursCheck-    newMeta Instance = initializeIFSMeta-    newMeta NotHidden = initializeIFSMeta+    newMeta Instance = newIFSMeta+    newMeta NotHidden = newIFSMeta  --------------------------------------------------------------------------- 
src/full/Agda/TypeChecking/InstanceArguments.hs view
@@ -111,14 +111,6 @@         handle (TypeError _ (Closure {clValue = InternalError _})) = return Nothing         handle err                                                 = throwError err --- | @initializeIFSMeta s t@ generates an instance meta of type @t@---   with suggested name @s@, possibly with leading lambdas.-initializeIFSMeta :: String -> Type -> TCM Term-initializeIFSMeta s t = do-  t <- reduce t  -- see Issue 1321-  cands <- initialIFSCandidates t-  newIFSMeta s t cands- -- | @findInScope m (v,a)s@ tries to instantiate on of the types @a@s --   of the candidate terms @v@s to the type @t@ of the metavariable @m@. --   If successful, meta @m@ is solved with the instantiation of @v@.@@ -169,6 +161,7 @@       reportSDoc "tc.instance" 70 $ nest 2 $ vcat         [ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM t ] | Candidate v t _ <- cands ]       t <- normalise =<< getMetaTypeInContext m+      insidePi t $ \ t -> do       reportSDoc "tc.instance" 15 $ text "findInScope 3: t =" <+> prettyTCM t       reportSLn "tc.instance" 70 $ "findInScope 3: t: " ++ show t @@ -177,6 +170,7 @@       ifJustM (areThereNonRigidMetaArguments (unEl t)) (\ m -> return (Just (cands, Just m))) $ do          mcands <- checkCandidates m t cands+        debugConstraints         case mcands of            Just [] -> do@@ -192,6 +186,10 @@               , text "for type" <+> prettyTCM t               ] +            -- If we actually solved the constraints we should wake up any held+            -- instance constraints, to make sure we don't forget about them.+            wakeConstraints (return . const True)+            solveAwakeConstraints' False             return Nothing  -- We’re done            _ -> do@@ -201,6 +199,22 @@               prettyTCM (List.map candidateTerm cs)             return (Just (cs, Nothing)) +-- | Precondition: type is spine reduced and ends in a Def or a Var.+insidePi :: Type -> (Type -> TCM a) -> TCM a+insidePi t ret =+  case ignoreSharing $ unEl t of+    Pi a b     -> addContext (absName b, a) $ insidePi (unAbs b) ret+    Def{}      -> ret t+    Var{}      -> ret t+    Sort{}     -> __IMPOSSIBLE__+    Con{}      -> __IMPOSSIBLE__+    Lam{}      -> __IMPOSSIBLE__+    Lit{}      -> __IMPOSSIBLE__+    Level{}    -> __IMPOSSIBLE__+    MetaV{}    -> __IMPOSSIBLE__+    Shared{}   -> __IMPOSSIBLE__+    DontCare{} -> __IMPOSSIBLE__+ -- | A meta _M is rigidly constrained if there is a constraint _M us == D vs, -- for inert D. Such metas can safely be instantiated by recursive instance -- search, since the constraint limits the solution space.@@ -309,18 +323,21 @@ --   If the resulting list contains exactly one element, then the state is the --   same as the one obtained after running the corresponding computation. In --   all the other cases, the state is reseted.-filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM Bool) -> TCM [Candidate]+filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM YesNoMaybe) -> TCM [Candidate] filterResetingState m cands f = disableDestructiveUpdate $ do   ctxArgs  <- getContextArgs   let ctxElims = map Apply ctxArgs       tryC c = do         ok <- f c         v  <- instantiateFull (MetaV m ctxElims)-        a  <- instantiateFull =<< (`piApply` ctxArgs) <$> getMetaType m+        a  <- instantiateFull =<< (`piApplyM` ctxArgs) =<< getMetaType m         return (ok, v, a)   result <- mapM (\c -> do bs <- localTCStateSaving (tryC c); return (c, bs)) cands-  let result' = [ (c, v, a, s) | (c, ((True, v, a), s)) <- result ]-  result <- dropSameCandidates m result'+  let result' = [ (c, v, a, s) | (c, ((r, v, a), s)) <- result, r /= No ]+      noMaybes = null [ Maybe | (_, ((Maybe, _, _), _)) <- result ]+            -- It's not safe to compare maybes for equality because they might+            -- not have instantiated at all.+  result <- if noMaybes then dropSameCandidates m result' else return result'   case result of     [(c, _, _, s)] -> [c] <$ put s     _              -> return [ c | (c, _, _, _) <- result ]@@ -355,12 +372,16 @@                              {- else -} (\ _ -> return False)                              `catchError` (\ _ -> return False) +data YesNoMaybe = Yes | No | Maybe+  deriving (Show, Eq)+ -- | Given a meta @m@ of type @t@ and a list of candidates @cands@, -- @checkCandidates m t cands@ returns a refined list of valid candidates. checkCandidates :: MetaId -> Type -> [Candidate] -> TCM (Maybe [Candidate]) checkCandidates m t cands = disableDestructiveUpdate $   verboseBracket "tc.instance.candidates" 20 ("checkCandidates " ++ prettyShow m) $-  ifM (anyMetaTypes cands) (return Nothing) $ Just <$> do+  ifM (anyMetaTypes cands) (return Nothing) $+  holdConstraints (\ _ -> isIFSConstraint . clValue . theConstraint) $ Just <$> do     reportSDoc "tc.instance.candidates" 20 $ nest 2 $ text "target:" <+> prettyTCM t     reportSDoc "tc.instance.candidates" 20 $ nest 2 $ vcat       [ text "candidates"@@ -379,14 +400,15 @@         MetaV{} -> return True         _       -> anyMetaTypes cands -    checkCandidateForMeta :: MetaId -> Type -> Candidate -> TCM Bool+    checkCandidateForMeta :: MetaId -> Type -> Candidate -> TCM YesNoMaybe     checkCandidateForMeta m t (Candidate term t' eti) = do       -- Andreas, 2015-02-07: New metas should be created with range of the       -- current instance meta, thus, we set the range.       mv <- lookupMeta m       setCurrentRange mv $ do-        verboseBracket "tc.instance" 20 ("checkCandidateForMeta " ++ prettyShow m) $ do-          liftTCM $ flip catchError handle $ do+        debugConstraints+        verboseBracket "tc.instance" 20 ("checkCandidateForMeta " ++ prettyShow m) $+          liftTCM $ runCandidateCheck $ do             reportSLn "tc.instance" 70 $ "  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."             reportSDoc "tc.instance" 20 $ vcat               [ text "checkCandidateForMeta"@@ -415,24 +437,37 @@             -- unsolvable by the assignment, but don't do this for FindInScope's             -- to prevent loops. We currently also ignore UnBlock constraints             -- to be on the safe side.+            debugConstraints             solveAwakeConstraints' True+             verboseS "tc.instance" 15 $ do               sol <- instantiateFull (MetaV m ctxElims)-              reportSDoc "tc.instance" 15 $-                sep [ text "instance search: found solution for" <+> prettyTCM m <> text ":"-                    , nest 2 $ prettyTCM sol ]-            return True+              case sol of+                MetaV m' _ | m == m' ->+                  reportSDoc "tc.instance" 15 $+                    sep [ text "instance search: maybe solution for" <+> prettyTCM m <> text ":"+                        , nest 2 $ prettyTCM v ]+                _ ->+                  reportSDoc "tc.instance" 15 $+                    sep [ text "instance search: found solution for" <+> prettyTCM m <> text ":"+                        , nest 2 $ prettyTCM sol ]         where-          handle :: TCErr -> TCM Bool+          runCandidateCheck check =+            flip catchError handle $+            ifNoConstraints_ check+              (return Yes)+              (\ _ -> Maybe <$ reportSLn "tc.instance" 50 "assignment inconclusive")++          handle :: TCErr -> TCM YesNoMaybe           handle err = do             reportSDoc "tc.instance" 50 $               text "assignment failed:" <+> prettyTCM err-            return False+            return No -    isIFSConstraint :: Constraint -> Bool-    isIFSConstraint FindInScope{} = True-    isIFSConstraint UnBlock{}     = True -- otherwise test/fail/Issue723 loops-    isIFSConstraint _             = False+isIFSConstraint :: Constraint -> Bool+isIFSConstraint FindInScope{} = True+isIFSConstraint UnBlock{}     = True -- otherwise test/fail/Issue723 loops+isIFSConstraint _             = False  -- | To preserve the invariant that a constructor is not applied to its --   parameter arguments, we explicitly check whether function term
− src/full/Agda/TypeChecking/InstanceArguments.hs-boot
@@ -1,7 +0,0 @@--module Agda.TypeChecking.InstanceArguments where--import Agda.TypeChecking.Monad.Base (TCM)-import Agda.Syntax.Internal (Type, Term)--initializeIFSMeta :: String -> Type -> TCM Term
src/full/Agda/TypeChecking/MetaVars.hs view
@@ -177,20 +177,19 @@ -- newTypeMeta_  = newTypeMeta Inf  -- | @newIFSMeta s t cands@ creates a new "implicit from scope" metavariable---   of type the output type of @t@ with name suggestion @s@ and initial---   solution candidates @cands@. If @t@ is a function type, then insert enough+--   of type the output type of @t@ with name suggestion @s@.+--   If @t@ is a function type, then insert enough --   lambdas in front of it.-newIFSMeta :: MetaNameSuggestion -> Type -> Maybe [Candidate] -> TCM Term-newIFSMeta s t cands = do+newIFSMeta :: MetaNameSuggestion -> Type -> TCM Term+newIFSMeta s t = do   TelV tel t' <- telView t   addCtxTel tel $ do     vs  <- getContextArgs     ctx <- getContextTelescope-    teleLam tel <$> newIFSMetaCtx s (telePi_ ctx t') vs (raise (size tel) cands)+    teleLam tel <$> newIFSMetaCtx s (telePi_ ctx t') vs --- | Create a new value meta with specific dependencies.-newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> Maybe [Candidate] -> TCM Term-newIFSMetaCtx s t vs cands = do+newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> TCM Term+newIFSMetaCtx s t vs = do   reportSDoc "tc.meta.new" 50 $ fsep     [ text "new ifs meta:"     , nest 2 $ prettyTCM vs <+> text "|-"@@ -203,11 +202,11 @@   reportSDoc "tc.meta.new" 50 $ fsep     [ nest 2 $ pretty x <+> text ":" <+> prettyTCM t     ]-  addConstraint $ FindInScope x Nothing cands+  addConstraint $ FindInScope x Nothing Nothing   etaExpandMetaSafe x   return $ MetaV x $ map Apply vs -+-- | Create a new value meta with specific dependencies. newNamedValueMeta :: RunMetaOccursCheck -> MetaNameSuggestion -> Type -> TCM Term newNamedValueMeta b s t = do   v <- newValueMeta b t
src/full/Agda/TypeChecking/MetaVars.hs-boot view
@@ -12,7 +12,7 @@ etaExpandMetaSafe :: MetaId -> TCM () assignV           :: CompareDirection -> MetaId -> Args -> Term -> TCM () assign            :: CompareDirection -> MetaId -> Args -> Term -> TCM ()-newIFSMeta        :: String -> Type -> Maybe [Candidate] -> TCM Term+newIFSMeta        :: String -> Type -> TCM Term newValueMeta      :: RunMetaOccursCheck -> Type -> TCM Term newNamedValueMeta :: RunMetaOccursCheck -> String -> Type -> TCM Term newTelMeta        :: Telescope -> TCM Args
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -713,8 +713,8 @@ type Constraints = [ProblemConstraint]  data ProblemConstraint = PConstr-  { constraintProblem :: ProblemId-  , theConstraint     :: Closure Constraint+  { constraintProblems :: [ProblemId]+  , theConstraint      :: Closure Constraint   }   deriving (Typeable, Show) 
src/full/Agda/TypeChecking/Monad/Constraints.hs view
@@ -16,6 +16,7 @@ import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Monad+import Agda.Utils.Except  #include "undefined.h" import Agda.Utils.Impossible@@ -30,21 +31,26 @@   current <- currentProblem   reportSLn "tc.constr.steal" 50 $ "problem " ++ show current ++ " is stealing problem " ++ show pid ++ "'s constraints!"   -- Rename @pid@ to @current@ in all constraints.-  let rename pc@(PConstr pid' c) | pid' == pid = PConstr current c-                                 | otherwise   = pc+  let rename pc@(PConstr pids c) | elem pid pids = PConstr (current : pids) c+                                 | otherwise     = pc   -- We should never steal from an active problem.   whenM (elem pid <$> asks envActiveProblems) __IMPOSSIBLE__   modifyAwakeConstraints    $ List.map rename   modifySleepingConstraints $ List.map rename  solvingProblem :: ProblemId -> TCM a -> TCM a-solvingProblem pid m = verboseBracket "tc.constr.solve" 50 ("working on problem " ++ show pid) $ do-  x <- local (\e -> e { envActiveProblems = pid : envActiveProblems e }) m-  ifNotM (isProblemSolved pid)-    (reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was not solved.")-    $ {- else -} do-      reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was solved!"-      wakeConstraints (return . blockedOn pid . clValue . theConstraint)+solvingProblem pid = solvingProblems [pid]++solvingProblems :: [ProblemId] -> TCM a -> TCM a+solvingProblems pids m = verboseBracket "tc.constr.solve" 50 ("working on problems " ++ show pids) $ do+  x <- local (\e -> e { envActiveProblems = pids ++ envActiveProblems e }) m+  sequence_+    [ ifNotM (isProblemSolved pid)+        (reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was not solved.")+      $ {- else -} do+        reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was solved!"+        wakeConstraints (return . blockedOn pid . clValue . theConstraint)+    | pid <- pids ]   return x   where     blockedOn pid (Guarded _ pid') = pid == pid'@@ -53,10 +59,10 @@ isProblemSolved :: ProblemId -> TCM Bool isProblemSolved pid =   and2M (notElem pid <$> asks envActiveProblems)-        (all ((/= pid) . constraintProblem) <$> getAllConstraints)+        (all (notElem pid . constraintProblems) <$> getAllConstraints)  getConstraintsForProblem :: ProblemId -> TCM Constraints-getConstraintsForProblem pid = List.filter ((== pid) . constraintProblem) <$> getAllConstraints+getConstraintsForProblem pid = List.filter (elem pid . constraintProblems) <$> getAllConstraints  -- | Get the awake constraints getAwakeConstraints :: TCM Constraints@@ -67,8 +73,8 @@   c <- use stSleepingConstraints   (wakeup, sleepin) <- partitionM wake c   reportSLn "tc.constr.wake" 50 $-    "waking up         " ++ show (List.map constraintProblem wakeup) ++ "\n" ++-    "  still sleeping: " ++ show (List.map constraintProblem sleepin)+    "waking up         " ++ show (List.map constraintProblems wakeup) ++ "\n" +++    "  still sleeping: " ++ show (List.map constraintProblems sleepin)   modifySleepingConstraints $ const sleepin   modifyAwakeConstraints (++ wakeup) @@ -92,6 +98,23 @@   modifySleepingConstraints $ (++ awakeOnes)   modifyAwakeConstraints    $ const [] +data ConstraintStatus = AwakeConstraint | SleepingConstraint+  deriving (Eq, Show)++-- | Suspend constraints matching the predicate during the execution of the+--   second argument. Caution: held sleeping constraints will not be woken up+--   by events that would normally trigger a wakeup call.+holdConstraints :: (ConstraintStatus -> ProblemConstraint -> Bool) -> TCM a -> TCM a+holdConstraints p m = do+  (holdAwake, stillAwake)   <- partition (p AwakeConstraint)    <$> use stAwakeConstraints+  (holdAsleep, stillAsleep) <- partition (p SleepingConstraint) <$> use stSleepingConstraints+  stAwakeConstraints    .= stillAwake+  stSleepingConstraints .= stillAsleep+  let restore = do+        stAwakeConstraints    %= (holdAwake ++)+        stSleepingConstraints %= (holdAsleep ++)+  catchError (m <* restore) (\ err -> restore *> throwError err)+ takeAwakeConstraint :: TCM (Maybe ProblemConstraint) takeAwakeConstraint = do   cs <- getAwakeConstraints@@ -105,15 +128,15 @@ getAllConstraints = gets $ \s -> s^.stAwakeConstraints ++ s^.stSleepingConstraints  withConstraint :: (Constraint -> TCM a) -> ProblemConstraint -> TCM a-withConstraint f (PConstr pid c) = do+withConstraint f (PConstr pids c) = do   -- We should preserve the problem stack and the isSolvingConstraint flag-  (pids, isSolving) <- asks $ envActiveProblems &&& envSolvingConstraints+  (pids', isSolving) <- asks $ envActiveProblems &&& envSolvingConstraints   enterClosure c $ \c ->-    local (\e -> e { envActiveProblems = pids, envSolvingConstraints = isSolving }) $-    solvingProblem pid (f c)+    local (\e -> e { envActiveProblems = pids', envSolvingConstraints = isSolving }) $+    solvingProblems pids (f c)  buildProblemConstraint :: ProblemId -> Constraint -> TCM ProblemConstraint-buildProblemConstraint pid c = PConstr pid <$> buildClosure c+buildProblemConstraint pid c = PConstr [pid] <$> buildClosure c  buildConstraint :: Constraint -> TCM ProblemConstraint buildConstraint c = flip buildProblemConstraint c =<< currentProblem
src/full/Agda/TypeChecking/Pretty.hs view
@@ -221,7 +221,7 @@   prettyTCM UnusedArg  = empty  instance PrettyTCM ProblemConstraint where-  prettyTCM (PConstr pid c) = brackets (prettyTCM pid) <+> prettyTCM c+  prettyTCM (PConstr pid c) = prettyList (map prettyTCM pid) <+> prettyTCM c  instance PrettyTCM Constraint where     prettyTCM c = case c of
src/full/Agda/TypeChecking/Rules/LHS/Unify.hs view
@@ -602,10 +602,10 @@             reportSDoc "tc.lhs.unify" 80 $ text "Type of constructor: " <+> prettyTCM ctype             withMetaInfo' mv $ do               let perm = mvPermutation mv-              tel <- permuteTel perm <$> getContextTelescope+              tel <- permuteTel perm <$> (instantiateFull =<< getContextTelescope)               reportSDoc "tc.lhs.unify" 100 $ text "Context tel (for new metas): " <+> prettyTCM tel               -- important: create the meta in the same environment as the original meta-              newArgsMetaCtx ctype tel (mvPermutation mv) us+              newArgsMetaCtx ctype tel perm us           reportSDoc "tc.lhs.unify" 80 $ text "Generated meta args: " <+> prettyTCM margs           noConstraints $ assignV DirEq m us (Con c margs)           return $ Just margs
src/full/Agda/TypeChecking/Serialise/Instances/Common.hs view
@@ -1,6 +1,8 @@ {-# LANGUAGE CPP                       #-}+{-# LANGUAGE DeriveDataTypeable        #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleInstances         #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE ScopedTypeVariables       #-}  #if __GLASGOW_HASKELL__ >= 710@@ -13,7 +15,7 @@  {-# OPTIONS_GHC -fno-warn-orphans #-} -module Agda.TypeChecking.Serialise.Instances.Common where+module Agda.TypeChecking.Serialise.Instances.Common () where  import Control.Applicative import Control.Monad.Reader@@ -33,6 +35,7 @@ import qualified Data.Set as Set import Data.Sequence (Seq) import qualified Data.Sequence as Seq+import Data.Typeable (Typeable) import Data.Void  import Agda.Syntax.Common@@ -224,10 +227,25 @@     valu [p, q] = valu2 P.Interval p q     valu _      = malformed +-- | Ranges are always deserialised as 'noRange'.+ instance EmbPrj Range where-  icod_ r = icode (P.rangeFile r, P.rangeIntervals r)-  value r = uncurry P.intervalsToRange `fmap` value r+  icod_ _ = icode0'+  value _ = return noRange +-- | Ranges that should be serialised properly.++newtype SerialisedRange = SerialisedRange { underlyingRange :: Range }+  deriving (Typeable)++instance EmbPrj SerialisedRange where+  icod_ (SerialisedRange r) =+    icode2' (P.rangeFile r) (P.rangeIntervals r)++  value = vcase valu where+    valu [a, b] = SerialisedRange <$> valu2 P.intervalsToRange a b+    valu _      = malformed+ instance EmbPrj C.Name where   icod_ (C.NoName a b) = icode2 0 a b   icod_ (C.Name r xs)  = icode2' r xs@@ -322,10 +340,12 @@   value n           = A.MName `fmap` value n  instance EmbPrj A.Name where-  icod_ (A.Name a b c d) = icodeMemo nameD nameC a $ icode4' a b c d+  icod_ (A.Name a b c d) = icodeMemo nameD nameC a $+    icode4' a b (SerialisedRange c) d    value = vcase valu where-    valu [a, b, c, d] = valu4 A.Name a b c d+    valu [a, b, c, d] = valu4 (\a b c -> A.Name a b (underlyingRange c))+                              a b c d     valu _            = malformed  instance EmbPrj a => EmbPrj (C.FieldAssignment' a) where