Repository navigation
v2.9.0-rc1
Pre-releaseRelease notes for Agda version 2.9.0
Highlights
- Option
-jto type check modules in parallel in batch mode (experimental; Amélia Liao). - Substantial performance improvements (András Kovács, Amélia Liao Reed Mullanix).
- Agda on WASM (Jonathan Coates, Andy Pam).
- Qualified
do(Amélia Liao). - Local rewrite rules (experimental; Nathaniel Burke, Jesper Cockx).
- Improved termination checker for copatterns (Nate Soares).
- Warning about unused imports (experimental; Andreas Abel).
- Emacs: Syntax highlighting in the Agda information buffer (Andreas Abel, Amélia Liao).
- Improvements to automatic term synthesis, "Mimer" (Andreas Abel, Jesper Cockx).
- Forester backend (Lîm Tsú-thuàn).
- Around 60 fixes of inconsistencies, internal errors, and regressions.
- Around 130 other issues fixed.
Installation
-
Dropped support for GHC 8.8, 8.10, and 9.0.
-
Agda supports GHC versions 9.2.8 to 9.14.1.
-
The new Cabal flag
version-with-git-hashcontrols whether version information
is suffixed with the Git commit hash. It is disabled by default for cabal
but enabled by default when using the Makefile.
Pragmas and options
-
New option
--parallel(-jfor short, as inmake) lets Agda
type-check imported modules in parallel. For large libraries, this can
result in a speedup of ~3x, at the cost of roughly doubling the
maximum memory usage.
This option does not yet work well with--interaction
(issue #8477). -
New option
--print-optionsto print a simple list of all options.
This list can e.g. be used to implement bash completion. -
The flavor of Cubical Agda can now be chosen by an argument to the
--cubicaloption:Old New --cubical--cubical, or--cubical=full--erased-cubical--erased-cubical, or--cubical=erased--cubical-compatible--cubical-compatible, or--cubical=compatible- --cubical=no-glueFor compatibility between modules using different variants of Cubical Agda, see
the documentation. -
New flag
--no-write-interfaces. -
New command-line option
--literate-markdown-only-agda-blocks(off by default).
When enabled, only code blocks explicitly marked with```agdaare treated as
Agda code in literate Markdown (.lagda.md) and Typst (.lagda.typ) files.
Unmarked code blocks (```) are treated as verbatim text and not type-checked.
This option must be set via command line since it affects parsing.
(See #7971.) -
The flag
--termination-depth=Nnow means maximum termination depth and
the termination checker now performs iterative deepening,
starting with depth1and increasing it up to the givenN, stopping early
as soon as the termination check succeeds.
IncreasingNcan thus slow down things only for failing termination checks.The default value of
Nhas been increased from1to3, yet not higher,
because cases requiring a termination depth> 1are already very rare in practice.There is also an internal change to the termination checker.
Dot patterns are now taken into account from the beginning and not only when
the termination check fails without taking them into account.
The overhead to also mine dot patterns for structural descent was already
negligible so it made sense to simplify the termination checking algorithm. -
The new flag
--no-occurrence-analysiscan be used to turn off the
automated occurrence analysis for functions.By default Agda analyses how functions use their arguments. For
instance, Agda can tell thatDin the following code is strictly
positive, becauseVecuses itsSetargument in a strictly
positive way:open import Agda.Builtin.Nat open import Agda.Builtin.Unit data _×_ (A B : Set) : Set where _,_ : A → B → A × B Vec : Set → Nat → Set Vec A zero = ⊤ Vec A (suc n) = A × Vec A n data D : Set where c : ∀ n → Vec D n → D
However, this analysis can be slow, especially for big mutual
blocks. Now it is possible to turn it off.The analysis is also used to detect unused function arguments. The
following code is by default accepted, but it is rejected if the
occurrence analysis is turned off:open import Agda.Builtin.Bool open import Agda.Builtin.Equality open import Agda.Builtin.Unit F : Bool → Set → Set F true _ = Bool F false _ = ⊤ _ : {b : Bool} → F b Bool ≡ F b ⊤ _ = refl
Note that an alternative to the analysis is to use polarities. The
following code is accepted:{-# OPTIONS --polarity --no-occurrence-analysis #-} open import Agda.Builtin.Bool open import Agda.Builtin.Equality open import Agda.Builtin.Nat open import Agda.Builtin.Unit data _×_ (@++ A B : Set) : Set where _,_ : A → B → A × B Vec : @++ Set → Nat → Set Vec A zero = ⊤ Vec A (suc n) = A × Vec A n data D : Set where c : ∀ n → Vec D n → D F : Bool → @unused Set → Set F true _ = Bool F false _ = ⊤ _ : {b : Bool} → F b Bool ≡ F b ⊤ _ = refl
-
Setting environment variable
NO_COLORnow turns off coloring in the default--color=automode.
It can be overwritten by--color=always.
See also https://no-color.org/ . -
New option
--quote-metasto allow forquoteTermconstraints to
be solved even when the quoted term contains unsolved metas.
This allows for elaborating macro applications with quoted arguments
that still have interactive holes in them.
See the quote metas documentation. -
{-# NO_POSITIVITY_CHECK #-}pragmas are now recognized inrecorddeclarations andwhereblocks,
and pertain to the followingdataorrecorddeclaration or mutual block. -
New option
--local-rewritingwhich enables parameterising over computation rules by annotating module parameters with@rewriteattributes. See the local rewriting documentation for more info. -
New
primRewriteNoMatchprimitive inAgda.Builtin.Equality.Rewritefor controlling rewrite rule matching. See the section in the rewriting documentation for more info. -
The
ETApragma has been removed. -
Eta-equality for record types is no longer inferred.
Previously Agda would switch off eta for a recursive record type automatically
if there was a risk that the type checker could loop due to infinite eta expansion.
Now, Agda will only flag it with anUnguardedEtaRecorderror, so one has to add
ano-eta-equalitydirective manually.
If one wants eta enabled nevertheless, one can use the newETA_EQUALITYpragma.
This pragma replaces the oldETApragma and can also be used to turn on eta for
coinductiverecord types.
See the documentation on
unguarded records
and theETA_EQUALITYpragma. -
New options
--irrelevance(default on) and--no-irrelevanceto allow or
disallow the irrelevance modality. -
(BREAKING.) Now
--erased-matchestakes an optional argument:-
--erased-matches=none: Do not enable any erased matches (this
can be overridden). -
--erased-matches=empty: Enable erased matches for empty types. -
--erased-matches=non-dependent: Enable erased matches for
non-indexed, single-constructor types. -
--erased-matches=restricted: Make it possible to import the
moduleAgda.Builtin.Erased.Box-cong, which contains an
implementation of[]-cong(the typeErasedcan be found in
Agda.Builtin.Erased.Erased):record Erased (@0 A : Set a) : Set a where no-eta-equality constructor [_] field @0 erased : A []-cong : @0 x ≡ y → [ x ] ≡ [ y ] []-cong refl = refl
In the future
--erased-matches=restrictedmight make it possible
to implement[]-congin user code, but that is currently not
allowed. -
--erased-matches=unrestricted: Enable unrestricted erased
matches for single-constructor types. If--safeis active, then
this option is not allowed together with--without-K.
One can also use comma-separated lists of options, for instance
--erased-matches=empty,restricted. This has the same effect as
giving the options separately (--erased-matches=empty --erased-matches=restricted). There is no way to turn off something
that has been enabled, so it does not matter in what order the
options are given. As an example,--erased-matches=empty,none
means the same thing as--erased-matches=empty.If none of these options are given, then Agda behaves
-
as if
--erased-matches=nonehad been used if--erasureis not
turned on (directly or indirectly), otherwise -
as if
--erased-matches=emptyhad been used if--without-Kis
active, and otherwise -
as if
--erased-matches=empty,unrestrictedhad been used.
Note that these defaults can be overridden by, for instance,
--erased-matches=none.The option
--erased-matchesmeans almost the same thing as
--erased-matches=empty,non-dependentif--without-Kis active,
and otherwise it means almost the same thing as
--erased-matches=empty,unrestricted. However, any use of
--erased-matcheswith explicit arguments takes precedence over
--erased-matcheswithout arguments. For instance,
--erased-matches=none --erased-matchesmeans the same thing as
--erased-matches=none.The option
--no-erased-matchesis now a synonym for
--erased-matches=none.All variants of
--erased-matchesexcept for
--erased-matches=noneenable--erasure.This change can lead to some breakage:
-
Previously
--no-erased-matches --erased-matchesmeant the same
thing as--erased-matches, now it means the same thing as
--erased-matches=none. -
Before
--with-Koverrode a previously given
--no-erased-matchesand turned on erased matches. That is no
longer the case.
Note that the new optional argument to
--erased-matchesis
experimental: the design might change in the future. -
-
The new (experimental and possibly unstable) options
--erased-funext,--erased-propextand--erased-quotients
enable use ofAgda.Builtin.Erased.Funext,
Agda.Builtin.Erased.PropextandAgda.Builtin.Erased.Quotient,
respectively.All options imply
--erasure, and--erased-quotientsimplies
--erased-funext.These modules contain erased postulates. The idea is that it should
be safe to use these postulates (under--safeand in the absence
of any Agda bugs):-
If
--erased-matches=Xis not used, whereXis one ofempty,
non-dependent,restrictedandunrestricted, then canonicity
should hold for non-erased terms (if all opaque definitions are
made transparent and the context only contains erased
assumptions). -
If
--erased-matches=emptyis used, then canonicity should still
hold if the context plus the postulates are jointly consistent. -
If
--erased-matches=Xis used, whereXis one of
non-dependent,restrictedandunrestricted, then reduction
might get stuck, but compiled programs should still run correctly.
Agda.Builtin.Erased.Funextpostulates function extensionality,
Agda.Builtin.Erased.Propextpostulates propositional
extensionality, andAgda.Builtin.Erased.Quotientgives access to
an implementation of set quotients with an eliminator that computes
for the point constructor. -
Errors
-
Error
ClashingDefinitionnow gives the lineage of the previous definition of the same name.
This helps when it is unclear how this name was imported. Example:error: [ClashingDefinition] Multiple definitions of A. Previous definition A is in scope as * a postulate Imports.A.A brought into scope by - the opening of Imports.A at ... - its definition at ... -
Errors
GenericErrorandGenericDocErrorhave been replaced by more specific errors.
(Issue #7225.) -
New error
NamedWhereModuleUnderWithfor namedwhere-modules in clauses
using with-abstraction; see the entry under Language.
(Issue #8698.) -
Generalisation failures due to unresolvable dependencies between a
generalized variable and unsolved metavariables have new, specific
errors.
Warnings
-
New warning
UnusedImportswhenopenbrings identifiers or modules into scope
that are definitely not used subsequently.
A module counts as used if it is referred to,
e.g. in a qualified nameM.x, inopen M, or inmodule N = M.If
usingorrenamingdirectives are given, or in flavor-WUnusedImports=all,
Agda warns about each name and module that is unused,
except for modules of data and record types that are not mentioned
explicitly in the directive.
If no directive or only ahidingdirective is given,
and unless the flavor isall,
Agda only warns if none of the imported names are used.Agda also warns about instances brought into scope
unless--no-qualified-instancesis on
(which requires bringing instances into scope if they should be found by instance search). -
UselessImportwarning instead of parse error when an module is instantiated
but not opened duringimport, for instance:import Structures.IsMonoid Carrier Eq
This does not bring module
Structures.IsMonoidinto scope and
neither any of its exports.
It either needs anopenor anas-clause such asas MyMonoid. -
UselessPragmawarning instead of hard errorNeedOptionRewritingwhen a
REWRITEorBUILTIN REWRITEpragma is encountered but--rewritingis off. -
Error warning
IllegalDeclarationInDataDefinitioninstead of hard error
whendatadefinition contains declarations other than type signatures of
constructors. -
Error
RecursiveRecordNeedsInductivityturned into a error warning. -
New warning
DivergentModalityInClausewhen modality of a clause diverges
from that of the function. Example:A : Set₁ @0 A = Set
-
New warning
InvalidDataOrRecDefParameterfor information (e.g. type, attributes)
attached to parameters in adataorrecorddefinition (that is separate of its
data or record signature).
This replaces errors:UnexpectedModalityAnnotationInParameterUnexpectedTypeSignatureForParameter
-
New warning
InvalidTacticAttributefor misplaced@(tactic ...)attributes.
This was silently accepted up to Agda 2.8.0 but raises now the new warning:postulate @(tactic not-in-scope) _ : Set
-
New warning
RewriteVariablesBoundInSingletonfor rewrite rules which bind
at least one variable exclusively in patterns which might become of singleton
type after a substitution. Rewrite rules of this form endanger subject
reduction.- Unlike the other warnings about problematic rewrite rules, Agda will still
try its best to apply rewrites which trigger this warning.
This is because some very useful rewrite rules unfortunately do not preserve
subject reduction in the presence of definitional singletons.
- Unlike the other warnings about problematic rewrite rules, Agda will still
-
UnknownNamesInFixityDeclandUnknownNamesInPolarityPragmasare now error warnings. -
The new warning
DefinitionBeforeDeclarationis emitted if in a classic
mutualblock a data/record signature appears after the respective
definition. This can happen since the nicifier bubbles signatures up.
(See issue #8435.) -
New warning
ShouldBeEtaRecordPattern, raised for
matches on record constructors in binders (λ,let, parameter telescopes etc.)
when the respective record does not have eta.
For example, this module parameter match triggers the warning:record Wrap (A : Set) : Set where constructor wrap; no-eta-equality; pattern field unwrap : A module _ {A} (w@(wrap a) : Wrap A) where
Reason for the warning:
Such a binding is interpreted here asa = unwrap w.
The user expectation thatwis definitionally equal towrap ais only met ifWrapadmitseta-equality.Pattern matching on left hand sides of function definitions does not trigger the warning.
-
New warning
FixityDeclarationForNonOperatorwhen a fixity declaration is attached to a name
that is neither a pre-, post-, nor infix operator and neither has a pre-, post- or infixsyntax
attached to it.infixl 10 plus -- warning plus : ℕ → ℕ → ℕ plus = ... infix 42 [_] -- warning [_] : A → List A [_] = ... infix 255 abs syntax abs x = | x | -- warning infix 314 neg -- no warning syntax neg x = ¬ x open import Agda.Builtin.Nat renaming (_+_ to infixl 10 add) -- warning
Syntax
Changes to the Agda syntax.
-
Breaking: The parser will reject ASCII opening delimiters which
are closed by a Unicode delimiter, and vice-versa. Concretely, this
means the mismatched pairs⦃ ... }}/{{ ... ⦄and
⦇ … |)/(| … ⦈are now parse errors. -
Modality annotations in aliases and let-bindings are now supported
(PR #7990).
Example:split : {A B C : Set} (@0 p : A × B) (k : @0 A → @0 B → C) → C split p k = let @0 (x , y) = q in k x y where @0 q = p
-
Postfix projections cannot be surrounded by parentheses anymore.
E.g. these postfix projection applications are now illegal in expressions:r (.proj) r .(proj)
-
Idiom brackets and
donotation may now appear qualified, as in
M.doorM.(| f x y z |), in which case the functions needed for
desugaring these are looked up inMrather than in the surrounding
scope (PR #8280).
Language
Changes to type checker and other components defining the Agda language.
-
(BREAKING) Named
where-modules (module M where) are no longer
allowed in clauses that use with-abstraction, i.e. clauses withwith,
rewrite, orwith p ← e. Such a clause is now rejected with the new
errorNamedWhereModuleUnderWith:f : Bool → Bool f x with x ... | true = local module M where -- rejected local = false ... | false = true
With-abstraction can change the types of the module parameters that
M
inherits from its parent module, so the telescope ofMlies about them.
SinceMis visible outside of the clause, it could then be instantiated
with ill-typed arguments, which allowed a proof of⊥.Ordinary anonymous
where-blocks are unaffected, and so is
using p ← e, which does not with-abstract but introduces a let-binding.
(Issue #8698.) -
(BREAKING) The pseudo-name
R.constructor, which refers to the
constructor of recordR, is now resolved by the ordinary scope lookup:
constructoris a name bound in the record moduleR.
(It can never be written unqualified, sinceconstructoris a keyword;
in particular,open Rdoes not bring it into scope, and a module
applicationmodule M = Rdoes not provideM.constructor.)Consequently, the qualification
RinR.constructoris now interpreted
as the name of the record module rather than the name of the record
type. Thus, this now succeeds:module M where record R : Set where open M using (module R) t = R.constructor -- used to fail
while this now fails:
module M where record R : Set where open M using (R) hiding (module R) t = R.constructor -- used to succeed
This also fixes Issue #8625:
an internal error when referring toR.constructorfrom the interaction
top level. -
(BREAKING): In the presence of
--erasure, types of lambdas expressions
are not inferred unless every lambda-bound variable has been given its erasure
status (@0or@ω) explicitely.
The reason is that otherwise Agda might infer the wrong erasure status, see, e.g.,
Issue #7001.Now we have the following behavior:
fails = λ x → x + x succeeds = λ (@ω x) → x + x alsoOK = λ (@ω A : Set) (@0 B : Set) → A
With that change
--erasuregets more akin to Cubical Agda that categorically
refuses to infer lambdas (since they could construct either functions or paths). -
(BREAKING): Instance search will no longer eta-expand non-instance
(visible and hidden) variables of record type in the context to find
instance fields (PR #8367).This change means that instance search can now happen even when the types of
non-instance arguments are yet-unsolved metavariables. Specifically, instance
search now works in functions with a type signature of the form∀ x → ...,
where previously it would require the type ofxto be annotated.It also means that instance search no longer requires head-normalising the
types of non-instance function arguments, which may have a positive effect on
type checking performance.Due to this change, code that relied on eta-expanding visible argument (like
r : Rin the example below) to find the instance field will no longer work.postulate T : Set use : ⦃ t : T ⦄ → Set record R : Set where field ⦃ inst ⦄ : T fails : R → Set fails r = use
In this case the code can be repaired by explicitly eta-expanding the record
pattern:succeeds : R → Set succeeds r@record{} = use -- or just record{}, if r is unused
In other cases more substantial changes might be required. For example, in the
code below the record valuesAaandBbare parameters so they cannot be
eta-expanded directly:record IsPointed (A : Set) : Set where field point : A open IsPointed {{...}} record PointedSet : Set1 where field Carrier : Set {{IsPointed[Carrier]}} : IsPointed Carrier open PointedSet record PointedFunction (Aa Bb : PointedSet) : Set where field run : Aa .Carrier -> Bb .Carrier preserves-point : run point ≡ point
Here it is possible to work around the problem by marking the projection
IsPointed[Carrier]as aninstanceand then applying the record module
PointedSetto the respective valuesAaandBb:record PointedSet : Set1 where field Carrier : Set instance {{IsPointed[Carrier]}} : IsPointed Carrier open PointedSet record PointedFunction (Aa Bb : PointedSet) : Set where open PointedSet Aa renaming (Carrier to AA) open PointedSet Bb renaming (Carrier to BB) field run : AA -> BB preserves-point : run point ≡ point
In general, instance search is intended to work well with unbundled structures
such asIsPointed, while using it with bundled structures such as
PointedSetmight require some more creative workarounds such as the one
above. -
Instance search now finds instance fields in functions that produce
eta records (Issue #8337), as
long as these functions are in the context with instance visibility.In effect, this means that a family of instances of a "subclass" also
provides a family of instances for the "superclass". For example, the
following code is now accepted:record Eq (A : Set) : Set where field _==_ : A → A → Bool record Ord (A : Set) : Set where field ⦃ eq ⦄ : Eq A _<=_ : A → A → Bool open Ord ⦃ ... ⦄ open Eq ⦃ ... ⦄ test : {I : Set} {F : I → Set} ⦃ ordi : ∀ {i} → Ord (F i) ⦄ → (i : I) → F i → F i → Bool test i x y = x == y
-
Functions defined using with-abstraction equality (
with … in eq) can now be
reasoned about using the same with-abstraction equality: the equality proof
is correctly generalised over. This should make most (if not all) uses of the
old-styleinspectidioms for the built-in equality type unnecessary. -
Added support for Cubical Agda without Glue Types
by using the flag--cubical=no-glue,
a variant of Cubical Agda which disables the Glue types.
For compatibility with modules using--cubical[=full]and--cubical=erased, see
variants. -
Added the Sharp modality,
which adds a right adjoint to the existing flat modality enabled via the
--cohesionflag. This also enables the use of attributes in record
fields for any cohesion modality which has a left adjoint (currently
just sharp and continuous).
Builtins
- (BREAKING): The fixity declarations for
Agda.Builtin.Int.posand for
primINeg,primIMin, andprimIMax, inAgda.Primitive.Cubicalhave been removed.
Reason: they trigger the new warningFixityDeclarationForNonOperator.
If you want to use these builtins as operators, supply a fixity in therenamingdirective, e.g.:open import Agda.Builtin.Int renaming (pos to infix 8 +_) open import Agda.Primitive.Cubical renaming ( primINeg to infix 30 ~_ ; primIMin to infixr 20 _∧_ ; primIMax to infixr 20 _∨_ )
Reflection
-
tcTypeErrornow throwsUserErrorinstead ofGenericDocError. -
Tactic arguments (
@tactic) are now supported in module telescopes.
Library management
- Suppport for version-specific
defaultsfiles: a file whose name is
of the formdefaults-X.Y.Zwill take precedence over the standard
defaultsone for theX.Y.Zversion of the compiler. This can be
used to have default libraries that are only compatible with a given
version of the compiler.
Interaction and emacs mode
-
The JSON interaction protocol (
--interaction-json) no longer loses
information that the Emacs frontend displays:-
GoalAndHaveresponses now include aboundaryfield with the
boundary faces of the checked expression
("Boundary (actual)" in the Emacs mode). -
NormalFormandInferredTyperesponses now pretty-print the
expression in the command state captured when the command ran, as
the Emacs frontend does, instead of in the current state
(fixes Issue #5665). -
Mimerresponses now include theinteractionPointthe solution
refers to.
-
-
Proof search (Mimer,
C-c C-ain Emacs) now also uses functions
defined in the samemutualblock as the function being defined,
without having to give them as hints.
As for recursive calls to the function itself, they are only applied
to structurally smaller arguments
(Issue #8783). -
Syntax highlighting and go-to-definition now also works in the Agda
information and debug buffers in Emacs where goals etc. are displayed.
This fixes long-standing Issue #706. -
By temporarily turning on printing of hidden arguments
(OPTION --show-implicit,C-c C-x C-hin Emacs)
and then splitting on result in a hole
(C-c C-c RETin Emacs, the whole sequence beingC-c C-x C-h C-c C-c RET),
hidden arguments can be introduced in the left hand side of a clause.
In the presence of generalized variables, this used to introduce unparsable names.
For instance:variable l : Level A : Set l id : A → A id = {!!}
Here,
id {A.l} {A} x = ?was produced, triggering an error.
Now, the correctid {A = A} x = ?is produced
(Issue #8153). -
The implicit (hidden and instance) fields of a record pattern are
no longer printed by default.
They are only printed with option--show-implicit
(C-c C-x C-hin Emacs), or if the user wrote them in the first place.
For instance, case splitting onxinrecord R : Set where field {n} : Nat rf : n ≡ n f : R → Set f x = {!x!} -- C-c C-c x
now produces
f record { rf = rf } = ?instead of
f record { n = n ; rf = rf } = ?.
This conforms the treatment of record patterns to the
situation where the record type has a constructor, in which case the
hidden arguments were already omitted
(Issue #8787). -
Catch-all copattern clauses are now tolerated as unreachable clauses
rather than being outright rejected with aCosplitCatchallerror.
They can be used as jumpboard for further result splitting.
(A scenario is a record type that got extended with new fields,
and definitions producing record values need to be extended as well.)
Example:test : Σ A B test .fst = a test = {!!} -- C-c C-c RET
This split produces the clause
test .snd = ?.
(Issue #8139). -
A normalization level can now also passed to command
Cmd_constraints
("show constraints",C-c C-=in Emacs).
In Emacs, the normalization level is given as usual byC-uprefixes.This interface change is breaking for frontends to
agda --interaction
such as the VSCodeagda-mode, which need updating. -
Fixed an internal error in
Cmd_helper_function(C-c C-hin Emacs)
(Issue #8103).
Changed the type ofGoal_HelperFunctionwhich might be breaking
3rd-party interaction frontends. -
NON_TERMINATINGfunctions now only reduce inIgnoreAbstractmode of
commandsCmd_compute(_toplevel)(C-u C-c C-nin Emacs)
regardless of whether invoked at toplevel or in a hole
(Issue #2410). -
Go-to-definition (
M-.) is now implemented using Emacs' built-in
Xref. Basic usage stays the same (M-.or using the mouse), but
now also includes searching for definitions by exact (C-u M-.) or
approximate names (C-M-.) and listing references (M-?) in loaded
files.
Backends
-
agda --html --html-highlight=code example.lagda.treenow produces
html/example.tree, which Forester can consume directly;
no external tools needed. -
New option
--ghc-tracefor GHC Backend to instrument code
such that the Agda name of the function is printed tostderr
whenever a function is entered. -
The JS backend now explicitly lists all primitives that should compile
toundefined. Primitives not in this list or the RTS trigger a new
UnknownJSPrimitivewarning
(see #8352). -
The JS backend's CJS & AMD module styles are now deprecated.
Please use ES6 module style instead (--js-es6). -
The JS backend now compiles constructors to string-tagged arrays.
This change is breaking for hand-written JS code relying on the previous Scott-Encoding.
Constructors for types withCOMPILE JSpragmas are not affected.
(see #8720)
Issues closed
For 2.9.0, the following issues were
closed
(see bug tracker):
Consistency issues
- Issue #7892: The telescope of a projection need not be the telescope of the record type
- Issue #8341: Postulates in safe mode (regression in 2.8.0)
- Issue #8453: False because the
SIGMAbuiltin accepts types that are not Σ-types - Issue #8557: Proof of global choice and of false
- Issue #8564: Function call tricks positivity checker
- Issue #8565: Positivity bug with builtins
- Issue #8587: Endpoints of paths are not checked without
--cubical - Issue #8683: Cubical primitive side conditions are not checked when an application is inferred
- Issue #8686: Projection-likeness drops arguments the principal argument's type does not determine
- Issue #8687: The coverage checker infers missing clauses under the wrong module-parameter substitution
- Issue #8688: Occurrence analysis ignores sorts: a Level argument used only in Set l is Nonvariant, giving universe resizing
- Issue #8694: The unifier's cycle check looks inside irrelevant and Prop-typed constructor arguments
- Issue #8695: The unifier's cycle rule checks only the head constructor for higher inductive types
- Issue #8696: Data/record types copied by a module application inside a block get their arguments marked unused
- Issue #8697: Interface serialiser conflates the Float literals 0.0 and -0.0
- Issue #8698: Inconsistency with named
wheremodules underwith(regression in 2.5.2) - Issue #8699: Termination checker descends into irrelevant constructor arguments of dot patterns
- Issue #8700: Clause-based matcher treats a MissingClauses-stuck argument as a definite mismatch (regression in 2.6.3)
- Issue #8703: Clause-based reduction skips underapplied clauses, reducing differently than after compilation to case-trees
- Issue #8704: Clause-based reduction falls through on a stuck lazy (forced) match, disagreeing with the case tree (regression in 2.7.0)
- Issue #8834: Escape from sharp modality / negativity
Internal errors
- Issue #3123: Malformed projection definition
- Issue #6173: Internal error at Agda/Syntax/Abstract/Name.hs:150:44 (regression in 2.6.2)
- Issue #6770: Incorrect substitution when opening parameterised module with a generalised variable.
- Issue #7564: Internal error when giving the unit type in a function on HITs
- Issue #7629: Internal error with src/full/Agda/TypeChecking/Substitute.hs:140:33 using Cubical Agda
- Issue #7964: Synthesis fails when given hint from a module opened as an instance
- Issue #8068:
__IMPOSSIBLE__on dependent pattern match + unrelated holes - Issue #8097: Internal error when trying Automatic Proof Search (regression in 2.8.0)
- Issue #8103: Internal error when trying C-c C-h (helper function)
- Issue #8215: Internal error triggered by instance declaration within record (regression in 2.8.0)
- Issue #8263: Internal error in ProjectionLike.hs (regression in 2.6.4)
- Issue #8298:
__IMPOSSIBLE__for incomplete mixfix copattern definition in let binding (regression in 2.8.0) - Issue #8325: An internal error during refining (src/full/Agda/TypeChecking/Monad/Context.hs:672:26) (regression in 2.8.0)
- Issue #8336: Internal error in double checker with projection-like functions (Non-exhaustive patterns in Just n) (regression in 2.6.4)
- Issue #8365: Crash with
--rewritingflag - Issue #8514:
__IMPOSSIBLE__involving local rewrite rule and a with abstraction - Issue #8521:
__IMPOSSIBLE__when pattern matching against irrelevant instance argument? (regression in 2.6.2) - Issue #8532: Missing in reduce in anti-unification causes
__IMPOSSIBLE__inTypeChecking/Reduce/Fast.hs:1417:43(regression in 2.5.3) - Issue #8545: Internal error with instance and open-public in record (regression in 2.5.2)
- Issue #8554:
__IMPOSSIBLE__in Agda.TypeChecking.MetaVars triggered interactively - Issue #8577: IMPOSSIBLE during pattern matching in the presence of a local rewrite rule
- Issue #8580: Unused implicit parameter in pattern synonym
__IMPOSSIBLE__ - Issue #8581: Internal error in TypeChecking/Monad/Context.hs when trying to load/type-check a malformed lambda parameter pattern inside an interaction hole
- Issue #8621: Internal error (maybe related to instance arguments?) (regression in 2.8.0)
- Issue #8625: agda2-infer-type-maybe-toplevel on anonymous record constructor causes an internal error
- Issue #8626:
__IMPOSSIBLE__atAgda/TypeChecking/CompiledClause/Compile.hs:180:20 - Issue #8634: In Emacs, unknown
.agda-libfield triggers__IMPOSSIBLE__atAgda.TypeChecking.Serialise.Instances.Common:101:34 (regression in 2.8.0) - Issue #8636: Internal error when an instance value is used as an index
- Issue #8649: Internal error in confluence checker with rewrite rule for coinductive record projection
- Issue #8680: Impossible state when unused pattern argument is also a variable declaration
- Issue #8777: Crash due to unsound call to
canonicalName - Issue #8808: Internal error during cubical boundary recovery
Other regressions
- Issue #3054: Reduction missing during LHS checking (regression in 2.6.0)
- Issue #4150: Not in scope error instead of missing type signature error (regression in 2.5.4)
- Issue #7595:
withcompiles 40x slower thancase_of_(regression in 2.6.4.2) - Issue #8094: Backends that are enabled by default can no longer print help (regression in 2.8.0)
- Issue #8096: Performance regression for test/Succeed/Issue6097-5 (regression in 2.6.4)
- Issue #8150: Generate helper function reorders arguments (regression in 2.6.1, regression in 2.6.4)
- Issue #8168: Mimer triggers a ParseError (regression in 2.8.0)
- Issue #8300: Instanceness of principal argument dropped by postfix projection (regression in 2.6.0)
- Issue #8435: In
mutualblocksdata/recordsignatures can be given after their definition (regression in 2.6.0) - Issue #8559: Copattern definition gives UnequalTerms for equal terms (regression in 2.6.0)
- Issue #8771: Regression in 2.6.4 with
--projection-like(regression in 2.6.4) - Issue #8811: Can't give:
metaOccurscheck too strict with--prop,--polarity, or--experimental-irrelevance(regression in 2.6.2)
Other issues
- Issue #706: syntax highlighting and definition location etc. for definitions in goal/error buffer
- Issue #1120: Improve operator parsing performance
- Issue #1680: Simple termination checking fails with --without-K
- Issue #2369: “Module cannot be imported since it has open interaction points” should always point to module
- Issue #2410:
C-c C-nunfolds non-terminating functions - Issue #2503: On warning about redundant imports
- Issue #2591: Operator parse error should be scope error
- Issue #2636: The positivity checker complains when a new definition is added in the same where clause
- Issue #3218: termination checking failure in copattern-style definition
- Issue #3355: NO_POSITIVITY_CHECK pragma ignored in local
whereblock - Issue #3677: Operator parse error should include "nullary operators"
- Issue #4228: Wrong context for solved interaction point in generalized type
- Issue #4271: Make module names into links in error messages
- Issue #4339: Qualified
do(Resolving the monad instance fordonotation) - Issue #5305: Generalisation fails with --no-syntactic-equality
- Issue #5411:
openin module telescope goes wrong with generalization - Issue #5524: duplicate identifiers ignored in fixity declarations
- Issue #5618: More precise wording of warning "Instance applies only to declarations that introduce new identifiers"
- Issue #5665: agda --interaction-json gives unnecessarily qualified names after opening modules
- Issue #5670: OperatorsExpr parsing blows up on large file
- Issue #5791: Error message only mentions .agda and .lagda
- Issue #5808: --interaction-json: interaction points with empty ranges after refine
- Issue #5836: JSON interaction doesn't give ranges for newly refined goals
- Issue #5839: Incorrect usage of underscore in names breaks parsing
- Issue #6198: Canonicity failure with --cubical (?)
- Issue #6240: Weird type generated for record field opened in telescope with generalized variable
- Issue #6425: Not-in-scope constructors make patterns parse-failed
- Issue #6825: Irrefutable matching in binders does not deliver expected results for non-eta patterns
- Issue #6847: On dropping GHC versions 9.0 and lower
- Issue #6861: Parallelize build
- Issue #6939: Non-dependent tactic argument fails to run tactic
- Issue #6940: Add flag to direct output of GHC backend
- Issue #7001: Agda treats lambdas that are not annotated with
@ωas non-erased - Issue #7139: Mangled trX/Con clause for indexed type with green slime
- Issue #7225: Named errors instead of Generic[Doc]Error
- Issue #7562: The script
install_agda_user.batfor Windows uses the dangeroussetxcommand - Issue #7664: Agda ignores constructor parameters but only if they're copied under a parameterised module
- Issue #7691: Custom treeless pipeline is ignored for "recursive" calls
- Issue #7805: Inscrutable error with
record where+ implicit arguments - Issue #7829: Fields with signature not highlighted in
record where - Issue #7836:
record wheresilently ignores postulated field values - Issue #7837:
record wherehandles duplicate names in open directive in non-standard way - Issue #7838:
record where's interpretation ofopenis very syntactic - Issue #7876: Internal error with
--rewritingand dependent identity type - Issue #7893: Confluence check misses critical pair
- Issue #7906: Manually eta-expanding clause makes termination checking fail
- Issue #7941: Denial of case split in the presence of known values
- Issue #7968: Undefined
Char-related primitives when compiled to JS - Issue #7972: Mimer has problems instantiating predicates
- Issue #7976: Soft error for
{-# REWRITE ... #-}without--rewriting - Issue #7987: Allow erased
lets - Issue #7988: Declarations before top-level module in a library give wrong error message
- Issue #7989: Weird error for irrelevant clause
- Issue #7994:
tacticattributes at declarations are parsed, then silently dropped - Issue #7998:
instancesilently dropped fromprimitiveandvariableblocks - Issue #8016: Nix build fails on aarch64-darwin
- Issue #8033: Coloring lost in warnings
- Issue #8035: Optimising module copying
- Issue #8037: checkParameters is defeated by not copying the record
- Issue #8048: Guarded Cubical: Using instance arguments for tick variables enables proving join
- Issue #8074: GHC 9.14
- Issue #8078: piSort case of documentation
- Issue #8080: std-lib-test spends ~5% of runtime rendering warnings that are never displayed
- Issue #8092: COMPILE pragmas on declared-but-not-yet-defined symbols are discarded
- Issue #8098: Agda deletes read-only interface files
- Issue #8100: Non-normalized level printed for interactive "show constraints" and "solve"
- Issue #8105: For ClashingDefinition also highlight the first definition
- Issue #8112: Can not eliminate [type blocked on meta] forces very silly extended lambdas
- Issue #8126: Generalizable
variables presented as projections in error message - Issue #8128: Poor error for duplicate definition in mutual block
- Issue #8132: Error SolvedButOpenHoles should provide means to jump to module with open goals
- Issue #8134: Caching is broken
- Issue #8139: Fail soft on catch-all for copatterns
- Issue #8144: Improve error message when trying to open record in a mutual block
- Issue #8153: Result splitting should not introduce indirectly generalized variables
- Issue #8157: Case split makes instance clause vanish
- Issue #8170: Increase
--termination-depthto 2 or infinity - Issue #8171: "Failed to give" with
--polarity - Issue #8191: [ question/bug ] are infix names allowed for parametrised modules?
- Issue #8206:
interleaved mutualdoes not check consistency of parameters (hiding / typing) - Issue #8218: Unequal terms despite rewrite rule (across modules)
- Issue #8228: Parse Error with Display Pragma and Mixfix Operator
- Issue #8231: Rewrite rule matching does not respect irrelevance
- Issue #8249: Literate Markdown: Option to only treat
agda-code blocks as agda code - Issue #8256:
M-.does not work in the information buffer - Issue #8269: Documentation: Is ETA for Colists Safe?
- Issue #8273: Confluence Checking Error After Reloading File/Importing
- Issue #8281: Literate programming Forester potential improvement
- Issue #8308: Support turning off colored output via
NO_COLORenvironment variable - Issue #8312:
with … infunctions cannot reason about themselves - Issue #8326: Importing file with --cubical reports error about --two-level
- Issue #8327: Splitting on a prop in between record fields fails with
SplitInProperror - Issue #8337: Agda instance search cannot find nested instances
- Issue #8344: C-c C-, shows a binding that is not there
- Issue #8352: JS backend: unknown primitives silently compiled to Undefined
- Issue #8370: Putting a
patternrecordin an index kills canonicity for cubical - Issue #8374: Allow fixity decls for anonymous modules outside module
- Issue #8380: Weird behavior with comment parsing
- Issue #8388:
insuggests to use no longer used {-# BUILTIN REFL name #-} - Issue #8398: JS backend: use tagged arrays instead of Scott encoding for data types
- Issue #8400: No error highlighting for InstanceWithExplicitArg
- Issue #8402: LaTeX backend uses unknown command
\AgdaDeadcode - Issue #8420: Direct support for
[]-cong - Issue #8431: Error RecursiveRecordNeedsInductivity switched off by NO_POSITIVITY_CHECK
- Issue #8440: Cubical Agda prints
IsOne (A ∨ ~ A)in an error whereA : Set - Issue #8478: Lines/second in profiling output
- Issue #8479: Agda.Interaction.InteractionTop highlights the fatal import in the wrong buffer
- Issue #8494: Emacs mode gets confused on goal position with certain strings
- Issue #8495: Emacs goals are non-interactive in literate forester files
- Issue #8519: Rewrite rule does not apply after doing a path abstraction on LHS
- Issue #8526: ETA pragma silently does nothing for imported (coinductive) records
- Issue #8529: Bug (cut-and-paste error) allows NO_UNIVERSE_CHECK to attach to mutual blocks
- Issue #8570: Meta-variable instantiated with ill-resourced type
- Issue #8583: (Co)InfectiveImport error should provide jumpable link to imported module
- Issue #8591: Quotient types, erased function and propositional extensionality
- Issue #8596: Termination checker rejects program when field takes 2 or 4 (but not 0, 1, 3, 5, or 6) trivial ⊤ arguments
- Issue #8599: [ with ] nested irrefutable
withs cause a parse error!? - Issue #8638: GHC backend erases patterns on datatypes indexed by erased datatypes
- Issue #8639: JS backend mis-compiles list cons (
_∷_) - Issue #8647: FOREIGN GHC pragma changes lost by caching
- Issue #8666: Make
--irrelevanceinfective - Issue #8710: The second imported rewriting relation is ignored
- Issue #8759: Crashes due to missing cases in strict bindings
- Issue #8767: The strict GHC backend generates slow code
- Issue #8783: Mimer (C-c C-a) does not automatically use mutually defined functions
- Issue #8787: Case splitting producing
recordpatterns does not omit the implicit fields - Issue #8815: Mimer rejects candidate if it generates constraints it would solve in the next step
- Issue #8828: Meta solutions leak from abstract and opaque blocks
- Issue #8830: Instance resolution should not ignore available instances
- Issue #8839: Incorrect warning location detection
- Issue #8841: Support Emacs 31
Pull requests merged for 2.9.0
- PR #6911: Reopen PR "Add
record wheresyntax sugar (#6603)" - PR #7861: Implement a --cubical=no-glue option
- PR #7877:
record where, again, again (again?) - PR #7881: [ fix #7876 ] Check meta instantiation in constraintMetas
- PR #7908: Drop GHC 9.0 and below and bump dependencies to LTS 20.26
- PR #7909: Fix #7906: use compiled clause reducer in termination checker
- PR #7922: Mimer refactor
- PR #7951: Improve module checkpointing performance
- PR #7974: [workflows] run agda after building it (cabal & stack)
- PR #7985: Fix #7976: warning on REWRITE pragmas when --rewriting is off
- PR #7986: New option --ghc-trace to instrument code with call trace
- PR #7990: Modalities in aliases and let-bindings
- PR #7995: Fix #7994: warn about @TactiC attributes ignored in declarations
- PR #8000: Fix #7998:
instancesilently dropped inprimitive/variableblocks - PR #8003: hotfix: support 'record where' in contexts
- PR #8004: Re #7954: disallow postfix projections in parentheses
- PR #8008: flake: fix overlay
- PR #8009: New option --print-options and --bash-complete
- PR #8014: doc: use the correct format for short options
- PR #8017: nix: fix build on aarch64-darwin
- PR #8020: record where: Fix impossible with named module copy
- PR #8022: fixup: eta for cubical primitives against neutrals
- PR #8025: Re #1499 #5277 better formatting for error AmbiguousFunClauses
- PR #8027: Fix #5524: report (with range) duplicate name in fixity declaration
- PR #8028: [ opt ] Optimize free variable sets
- PR #8029: Benchmarking and profiling for module application
- PR #8030: fixup: range of InlineNoExactSplit warning
- PR #8038: Only generate copies for used names
- PR #8040: Fix #8033: color warnings by keeping Doc over rendering to String
- PR #8041: deepseq-1.5.2.0 no longer derives NFData with embedded functions
- PR #8044: Hyperlink warning names on OSC 8 terminals
- PR #8047: Highlighting in Emacs Agda information buffer
- PR #8049: Fix #8048 by generating lock constraints also for implicit arguments
- PR #8050: MAlonzo: avoid emitting duplicate import statements
- PR #8052: Re #8024: alert user that --build-library does not accept backends
- PR #8055: Fix issue #7001: no longer infer lambdas that have no erasure status on their arguments
- PR #8056: Fix #6939: warn when parser drops misplaced tactic in
Fun - PR #8057: Emacs mode: clean
agda2-forget-all-goals - PR #8058: Structured output of
--help: options sorted into topics - PR #8063: fixup: caching with copy trimming
- PR #8065: Medium-sized serialization optimizations
- PR #8069: Bubble transpSysTel' failures upwards
- PR #8071: Go-to-definition in information buffer
- PR #8073: globally cache small Term variables
- PR #8079: Fix operator parsing asymptotics
- PR #8081: [ fix #8078 ] Fix documentation for piSort
- PR #8084: Inverse scope optimization
- PR #8085: containers 0.8
- PR #8089: Simplify "Installation" documentation
- PR #8093: [ fix #8092 ] Preserve compiler pragmas when overwriting a definition
- PR #8095: Fix #8094: run getInteractor after executing
--help(regression in 2.8.0) - PR #8099: Fix #8098: don't delete readonly .agdai files
- PR #8101: [ fix #8096 ] Redo implementation of LevelUniv infrastructure
- PR #8102: Normalization level for Cmd_constraints (C-c C-=)
- PR #8104: Fix #8103 by removing the parsing hack in BasicOps.metaHelperType
- PR #8107: Fix #2410: only reduce NON_TERMINATING functions with C-u prefix to C-c C-n
- PR #8108: Fix #8105: highlight thing shadowed by a clashing definition
- PR #8110: Remove unnecessary LHS.Unify.LeftInverse computation
- PR #8115: Implement
{Char, Nat}primitives for JS backend and add related tests - PR #8121: Fix #8119: Dotted expression not impossible
- PR #8127: Fix #8126: don't error-report generalized variables as projections
- PR #8129: Fix #8128: point to previous definition in DuplicateDefinition error
- PR #8135: Fix #8132 by adding SourceFile to SolvedButOpenHoles error
- PR #8137: Fix #7941: allow splitting on a refined variable
- PR #8141: Fix for issue #8097
- PR #8146: Fix #8144: NoSuchModule X gives hint if there is a data/record X
- PR #8147: Fix #4271: print filenames with modules in errors
- PR #8149: Print lineage (
WhyInScope) inClashingDefinitionerror - PR #8151: Add Datatypes of Datatypes to tutorial list
- PR #8155: Serialize Range in WhyInScope for lineage
- PR #8156: Fix #8139: tolerate catch-all copatterns
- PR #8158: Fix #7646 by synching goal command range with interaction range
- PR #8159: Fix issue #5791: list all possible file extensions in FileNotFound error
- PR #8160: Re #7225: remove some GenericDocErrors
- PR #8162: Rename GenericDocErrors in Generalize.hs
- PR #8169: Fix #8168 by catching ParseErrors in expressions Mimer produces
- PR #8173: Do not set default input method to "Agda" globally
- PR #8174: Add .agdai files to 'completion-ignored-extensions'
- PR #8175: Remove usages of deprecated 'window-system' variable
- PR #8176: Add custom setter to 'agda2-mode-abbrevs-use-defaults'
- PR #8177: Allow disabling resizing of minibuffer due to input method
- PR #8178: Check responses of commands issued by Agda to Emacs
- PR #8179: Add support for 'repeat-mode'
- PR #8181: Xref support for Agda2-mode
- PR #8184: Reinterpret --termination-depth as max depth and do iterative deepening
- PR #8194: UselessImport warning instead of ParseError for
import M x y - PR #8195: Close #7225: remove Generic[Doc]Error for good
- PR #8198: PR #8194 ctd.: move desugaring of
open import M argsinto scope checker - PR #8200: Fix #8197: correct Range for "refine"
- PR #8204: Fix #3123: instantiation of projection-like functions
- PR #8205: Running Agda on WASM (resolving merge conflicts of #7561)
- PR #8207: Fix #8206; refactor scope checker for RecDef a bit
- PR #8210: Fix #8037 by copying record type along with its projection in module app
- PR #8217: App range fix for operator application
- PR #8220: Fix #8218: Update signature for imported rewrite rules
- PR #8221: Treeless: don't mix up pipelines (#7691)
- PR #8222: Optimize rewrite rule matching
- PR #8226: New warning UnusedImports
- PR #8232: Fix 8228: Parse Error with Display Pragma and Mixfix Operator
- PR #8234: Fix #8231: Check relevance in
PTermmatching - PR #8235: new feature: quote metas
- PR #8238: New Warning to Fix #5929
- PR #8239: [ fix #5315 ] Compile erased types to () in the GHC backend
- PR #8243: [ fix #2691 ] Add basic documentation for simplification
- PR #8250: Add --literate-markdown-only-agda-blocks option
- PR #8267: Fix #8263: turn
__IMPOSSIBLE__intopatternViolation(regression in 2.6.4) - PR #8270: Fix #8269: doc: remove claim that ETA is safe for colists
- PR #8274: Fix #8273: Consider interface to merge imported whilst checking confluence
- PR #8278: Improve caching for (large) opaque blocks
- PR #8279: Library management: support
defaults-X.Y.Zfiles - PR #8280: Qualified
doand qualified idiom brackets - PR #8292: Separately benchmark Polarity from Positivity; restore forcing of argOccurrences
- PR #8293: Fix #3677: print names clashing with operators when parsing failed
- PR #8295: Made it possible to turn off the occurrence analysis for functions
- PR #8297: Doc on polarities: Cite the associated abstract.
- PR #8303: GHC 9.14 compatibility
- PR #8306: Re #8161: Split GeneralizePrepruneError into its three variants
- PR #8309: Turn off colored terminal output when
NO_COLORis set. - PR #8310: Fix #8300: appViewM produces correct hiding for postfix projection
- PR #8313: nix: bump nixpkgs
- PR #8314: doc/user-manual: render maths as SVG instead of PNG
- PR #8315: Reify an amount of backtrace when conversion checking fails
- PR #8317: fix #8242: don't copy records to within themselves
- PR #8318: #5833: make
with … ingeneralise overrefl - PR #8328: Fix #8327: check early for record constructor in let-pattern
- PR #8329: Fix #8325 by changing an
__IMPOSSIBLE__to afail(regression in 2.8.0) - PR #8330: Fix #8326: handle the implication two-level <= cubical in isTwoLevelEnabled
- PR #8332: Type check in parallel
- PR #8333: Add link to "Let's play Agda" to user manual
- PR #8338: #8337: Look for instance fields in eta records under binders
- PR #8340: don't allow postulates in --safe lets
- PR #8342: fix #8215: reduce candidate in its own state
- PR #8345: Fix #8344: remember whether a LetBinding came from a LetAxiom
- PR #8348: Erased levels [cubical]
- PR #8353: Fix #8352: explicitly list JS primitives that should compile to Undefined
- PR #8364: Support
@tacticModule Parameters - PR #8369: Fix #8365: reduce in wrong context
- PR #8376: Fix #7139: LeftInverse: reorder context in Solution steps
- PR #8378: nix: enable cluster counting
- PR #8381: Fix #8380: move line comment rule above block comment rule in lexer
- PR #8382: Stop eta-expanding module applications
- PR #8383: Free variable computation optimization
- PR #8392: Progress reporting when checking in parallel
- PR #8394: Fix --help claiming --type-in-type is the default
- PR #8397: Make UnknownNamesIn{FixityDecl,PolarityPragmas} error warnings
- PR #8401: Fix #8400 by remembering the range of the instance keyword
- PR #8405: [ fix #8393 ] Normalise codomain of piSort when needed
- PR #8406: Fix #8402: missing OtherAspects in agda.sty
- PR #8407: JSONTop: avoid needless parentheses around types
- PR #8409: Adding Sharp modality
- PR #8410: Fix #7988: smarter figureOutTopLevelModule, prioritizes qualified module
- PR #8413: Fix #5618: better wording of UselessInstance warning
- PR #8414: Fix #5839 by adding conPartNotations to the OperatorInformation
- PR #8416: Retain lineage (
AbstractName) inAmbiguousQNamefor error reporting - PR #8433: Fix #3355: NO_POSITIVITY_CHECK pragmas in where and record
- PR #8437: Fix #8435 by new warning DeclarationBeforeDefinition
- PR #8438: Fix #4150 by sorting lone definitions up in a
mutualblock - PR #8439: Fix #6173 by inserting missing checkModuleName
- PR #8444: fixup: traverse telescope properly in checkFibrantSplit
- PR #8445: Remove transitive closure from positivity checking
- PR #8447: Deprecate non-ES6 JS module styles
- PR #8450: Mark all non-delimiter characters as word constituents in
agda2-mode-syntax-table - PR #8451: [ #8283 ] Fix highlighting race condition in agda2-mode
- PR #8458: [ #8452 ] Make agda2-maybe-goto jump across files
- PR #8460: re. #8457: only ask if meta is an IP if cubical
- PR #8462: Fix #8454
- PR #8463: New
primRewriteNoMatchprimitive for controlling rewrite rule matching - PR #8466: Fix #8564: take definition site into account when serializing (Q)Name
- PR #8469: Bump TeX-Live/setup-texlive-action from 3 to 4
- PR #8471: Reverted two commits that made certain level arguments erased
- PR #8473: Make Agda go faster
- PR #8486: [ fix #7964 ] Properly handle projection-likeness in Mimer
- PR #8488: Fix #8453: check field types of BUILTIN SIGMA
- PR #8491: Add lines-per-second information to --profile=modules
- PR #8498: [ emacs ] Overhaul goal lexer in agda2-goals-action
- PR #8501: Bump GHC 9.12.2 to 9.12.4
- PR #8502: Highlighting and go-to-definition in the debug buffer
- PR #8503: Restrict pattern matching in binding position to eta-equality records (#6845 reopened)
- PR #8506: [ emacs ] Only jump to an error in the selected window
- PR #8508: User-manual: versionadded info for warnings
- PR #8509: Dependencies: allow pqueue-1.7
- PR #8512: Docs: why is --injective-type-constructors anti-classical & anti-univalent
- PR #8515:
stripWithClausePatternsin the right context - PR #8518: Serialize fewer generalization records
- PR #8520: Update context in checkIApplyConfluence
- PR #8522: Fix #8521 by remembering PossiblyProjectionPattern in DotP parsing
- PR #8523: Remove inaccurate claim in two-level.lagda.rst
- PR #8527: Update inaccurate Agda example in record-types.lagda.rst
- PR #8528: [ emacs ] Fix goal detection in pattern lambdas
- PR #8530: Fix #8529
- PR #8533: No longer infer eta for records
- PR #8541: Fix #6670 #5411 #6240 generalizeTel with open
- PR #8542: Fix #7629 by correction countPatternVars for HITs
- PR #8547: Fix #2877: doc: literal overloading is not allowed in patterns
- PR #8555: Add mathematical bold fraktur to agda-input
- PR #8556: Fix #4228: also prune genTel from solved interaction metas
- PR #8560: Fix #3054 by introducing MatchPrio for constructor patterns (regression in 2.6.0)
- PR #8567: Simplify fix of #6770: remove section updating
- PR #8569: Fix occurrences in over-applied args, primitives and postulates
- PR #8575: Add flag for irrelevance
- PR #8576: [ fix #8557 ] Only resurrect irrelevant variables once
- PR #8578: Fix #8577: Normalise under varTel in Unify.hs
- PR #8584: Fix #8583: (Co)InfectiveError: report imported module with range
- PR #8585: Fix #8580: internal error with _ in pattern synonym definition
- PR #8588: [ re #8552 ] Add workaround to the release notes + test suite
- PR #8593: Added
--erased-funext,--erased-propextand--erased-quotients - PR #8594: Added a missing option to a list in the documentation
- PR #8601: Fix #8596: termination checker respects copatterns
- PR #8602: Fix #1680: Stratify termination masks by copattern
- PR #8604: Bump actions/checkout from 6 to 7
- PR #8606: Bump actions/cache from 5 to 6
- PR #8612: Fix #8610
- PR #8615: Fix #8587
- PR #8617: Place -WShouldBeEtaRecordPattern under --exact-split.
- PR #8628: Fixes #8626: treat lazy split pattern as dot pattern when there is nothing left to split in
compile - PR #8632: Remove case-of-case optimization in compiler
- PR #8635: Repair
nix build - PR #8637: Bump actions/setup-python from 6 to 7
- PR #8640: Allow aeson-2.3
- PR #8643: Allow deepseq-1.5.2.0 (warns about rnf for functions)
- PR #8646: Fix
COMPILE JS _∷_ - PR #8648: Fix #8647: for the sake of caching handle FOREIGN pragmas in the tc
- PR #8652: Fix for #8636
- PR #8657: [ fix #8649 ] Don't eta-expand no-eta records in confluence checker
- PR #8658: Fix #8634: internal error with --interaction when .agda-lib file contains bogus fields
- PR #8661: Upstream emacs mode fixes
- PR #8662: Highlight ShouldBeEtaRecordPattern the same way as exactSplitWarnings
- PR #8663: [wasm] nix: Bump nix pkgs for ghc-wasm to include critical bug fix for ghc/ghc#27447
- PR #8667: Add missing flags to builtin modules
- PR #8669: Fix #8638
- PR #8671: Fix #8627: make --build-library on builtin library work
- PR #8675: Dead code elimination: don't traverse meta judgement types
- PR #8677: Fix #8599: classifyPattern: projection patterns only in LHSs
- PR #8678: [ fix #5665 ] Close information gaps in the JSON interaction protocol
- PR #8679: Fix #7564: Do not crash when trying eta-contraction on over-applied constructor.
- PR #8681: Change R.constructor so that R is the record module rather than the type
- PR #8682: Fix #8680 (pattern syn) by removing spurious
__IMPOSSIBLE__ - PR #8685: Fix #8683: check cubical side conditions also in inference mode
- PR #8690: Fix #8686: False via projection-like due to non-injective type of principal argument
- PR #8691: Fix #8688: positivity checker now also descends into Sort
- PR #8701: Alternative fix of #8687
- PR #8702: [ fix #8694 ] Take relevance into account for cycle rule in LHS unifier
- PR #8706: Fix for #8700
- PR #8707: Fix #8699 by masking irrelevant/Prop-sorted subterms in dot patterns in the termination checker
- PR #8708: Fix #8697 by indexing the memo map for Double by their Word64 representation
- PR #8709: Fix #8696 by eta-expanding data/recClauses before positivity checking
- PR #8711: [ fix #8710 ] merge builtin rewrites when adding import
- PR #8719: Small bugfix for Cubical Glue/HCompU (fixes #6198)
- PR #8720: Compile constructors to string-tagged JS arrays
- PR #8723: Add Agda Web to the manual
- PR #8729: Fix #8532 by ensuring projectTyped gets a reduced type in antiUnify (regression in 2.5.3)
- PR #8732: Fix #8698 by disallowing named where modules under with
- PR #8736: [ #8591 ] Added a test case
- PR #8738: Fix #1438: new warning FixityDeclarationForNonOperator
- PR #8740: Fix issue 8336 by turning projection-like functions back into Defs (regression in 2.6.4)
- PR #8743: Tried to fix a bug related to PR #8593
- PR #8745: Support for
[]-cong - PR #8768: Strict lets
- PR #8770: Build with GHC 10.0.0
- PR #8772: Fix #8771 by unspining also the transformed term in checkInternal (regression in 2.6.4)
- PR #8774: Fix #8545 by storing data/recClause as just Term
- PR #8778: Fix #8777: replace call to canonicalName by reduce
- PR #8779: Fix #7664 checkParameters (revisit #8722)
- PR #8789: Fix issue #8788
- PR #8790: [ fix #8703 ] Treat underapplied functions as stuck
- PR #8791: Fix #8787: drop hidden fields in record pattern when introduced by case-split
- PR #8802: Makefile: new goal
fast-forward-ecosystem; update submodules [ecosystem] - PR #8804: Fix #8783: Mimer: use functions from mutual block as default hints
- PR #8806: Fix #8171 by creating metas at the unitPolarity (@++)
- PR #8810: Fix #8808 by removing shortcut creating unbound de Bruijn indices
- PR #8812: Fix #8811 by relaxing the modallity in the occurs check of sort annotations
- PR #8816: Fix #8815 and #7972 by postponing constraints in Mimer
- PR #8817: [ fix #8695 ] Treat occurrences in constructors of HITs as weakly rigid
- PR #8822: Safer fix of #7181 (regression in 2.7.0)
- PR #8833: [ fix #8765 ] Add separate response for errors in other files
- PR #8837: [ fix #8828 ] Don't solve metas from outside current abstract block
- PR #8840: [ #8839 ] Improved the detection of error/warning locations
- PR #8843: Fix #8834 by checking cohesion and polarity when abstracting telescopes
What's Changed (auto-generated release notes)
- Drop GHC 9.0 and below and bump dependencies to LTS 20.26 by @andreasabel in #7908
- Mimer refactor by @UlfNorell in #7922
- Improve module checkpointing performance by @TOTBWF in #7951
- Fix #7906: use compiled clause reducer in termination checker by @andreasabel in #7909
- New option --ghc-trace to instrument code with call trace by @andreasabel in #7986
- Fix #7976: warning on REWRITE pragmas when --rewriting is off by @andreasabel in #7985
- Fix #7994: warn about @TactiC attributes ignored in declarations by @andreasabel in #7995
- Fix #7998:
instancesilently dropped inprimitive/variableblocks by @andreasabel in #8000 - Redo: Fix #7508: remove unused-arg optimization from the JS backend (#7509) by @andreasabel in https://github.com/agda/agda/pull/8002
record where, again, again (again?) by @plt-amy in #7877- Modalities in aliases and let-bindings by @andreasabel in #7990
- hotfix: support 'record where' in contexts by @plt-amy in #8003
- Re #7954: disallow postfix projections in parentheses by @andreasabel in #8004
- flake: fix overlay by @ncfavier in #8008
- nix: fix build on aarch64-darwin by @ncfavier in #8017
- doc: use the correct format for short options by @ncfavier in #8014
- record where: Fix impossible with named module copy by @plt-amy in #8020
- fixup: eta for cubical primitives against neutrals by @plt-amy in #8022
- Re #1499 #5277 better formatting for error AmbiguousFunClauses by @andreasabel in #8025
- Fix #5524: report (with range) duplicate name in fixity declaration by @andreasabel in #8027
- Benchmarking and profiling for module application by @plt-amy in #8029
- fixup: range of InlineNoExactSplit warning by @plt-amy in #8030
- New option --print-options and --bash-complete by @andreasabel in #8009
- deepseq-1.5.2.0 no longer derives NFData with embedded functions by @andreasabel in #8041
- Only generate copies for used names by @plt-amy in #8038
- [ opt ] Optimize free variable sets by @TOTBWF in #8028
- Fix #8033: color warnings by keeping Doc over rendering to String by @andreasabel in #8040
- Hyperlink warning names on OSC 8 terminals by @andreasabel in #8044
- Highlighting in Emacs Agda information buffer by @andreasabel in #8047
- Fix #8048 by generating lock constraints also for implicit arguments by @andreasabel in #8049
- MAlonzo: avoid emitting duplicate import statements by @andreasabel in #8050
- Re #8024: alert user that --build-library does not accept backends by @andreasabel in #8052
- Small refactorings around options by @andreasabel in https://github.com/agda/agda/pull/8054
- Fix #6939: warn when parser drops misplaced tactic in
Funby @andreasabel in #8056 - Structured output of
--help: options sorted into topics by @andreasabel in #8058 - Bubble transpSysTel' failures upwards by @plt-amy in #8069
- fixup: caching with copy trimming by @plt-amy in #8063
- Medium-sized serialization optimizations by @AndrasKovacs in #8065
- globally cache small Term variables by @AndrasKovacs in #8073
- containers 0.8 by @andreasabel in #8085
- [ fix #8078 ] Fix documentation for piSort by @jespercockx in #8081
- Go-to-definition in information buffer by @plt-amy in #8071
- [ fix #8092 ] Preserve compiler pragmas when overwriting a definition by @jespercockx in #8093
- Fix #8094: run getInteractor after executing
--helpby @andreasabel in #8095 - Fix #8098: don't delete readonly .agdai files by @andreasabel in #8099
- Normalization level for Cmd_constraints (C-c C-=) by @andreasabel in #8102
- Fix #8103 by removing the parsing hack in BasicOps.metaHelperType by @andreasabel in #8104
- Fix #2410: only reduce NON_TERMINATING functions with C-u prefix to C-c C-n by @andreasabel in #8107
- Fix operator parsing asymptotics by @AndrasKovacs in #8079
- [ fix #8096 ] Redo implementation of LevelUniv infrastructure by @jespercockx in #8101
- Inverse scope optimization by @AndrasKovacs in #8084
- Bump actions/setup-python from 5 to 6 by @dependabot[bot] in https://github.com/agda/agda/pull/8114
- Remove unnecessary LHS.Unify.LeftInverse computation by @AndrasKovacs in #8110
- Fix #8119: Dotted expression not impossible by @szumixie in #8121
- Implement
{Char, Nat}primitives for JS backend and add related tests by @TheVeryDarkness in #8115 - Fix #8126: don't error-report generalized variables as projections by @andreasabel in #8127
- Fix #8128: point to previous definition in DuplicateDefinition error by @andreasabel in #8129
- Fix #8132 by adding SourceFile to SolvedButOpenHoles error by @andreasabel in #8135
- Fix #7941: allow splitting on a refined variable by @andreasabel in #8137
- Fix #8105: highlight thing shadowed by a clashing definition by @andreasabel in #8108
- Emacs mode: clean
agda2-forget-all-goalsby @jyp in #8057 - Implement a --cubical=no-glue option by @yeejian-tan in #7861
- Fix issue #7001: no longer infer lambdas that have no erasure status on their arguments by @andreasabel in #8055
- Fix #8144: NoSuchModule X gives hint if there is a data/record X by @andreasabel in #8146
- Fix for issue #8097 by @jespercockx in #8141
- #8112: Add CannotEliminateWithPattern to the errors that can be deferred by @plt-amy in https://github.com/agda/agda/pull/8140
- Fix #4271: print filenames with modules in errors by @andreasabel in #8147
- Print lineage (
WhyInScope) inClashingDefinitionerror by @andreasabel in #8149 - Fix #8150 part 1: arguments in helper function in wrong order by @andreasabel in https://github.com/agda/agda/pull/8152
- Add Datatypes of Datatypes to tutorial list by @noughtmare in #8151
- Serialize Range in WhyInScope for lineage by @andreasabel in #8155
- Fix #8139: tolerate catch-all copatterns by @andreasabel in #8156
- Fix #7646 by synching goal command range with interaction range by @andreasabel in #8158
- Fix issue #5791: list all possible file extensions in FileNotFound error by @andreasabel in #8159
- Re #7225: remove some GenericDocErrors by @andreasabel in #8160
- Rename GenericDocErrors in Generalize.hs by @andreasabel in #8162
- Fix #8168 by catching ParseErrors in expressions Mimer produces by @andreasabel in #8169
- Reinterpret --termination-depth as max depth and do iterative deepening by @andreasabel in #8184
- UselessImport warning instead of ParseError for
import M x yby @andreasabel in #8194 - Close #7225: remove Generic[Doc]Error for good by @andreasabel in #8195
- PR #8194 ctd.: move desugaring of
open import M argsinto scope checker by @andreasabel in #8198 - Fix #8197: correct Range for "refine" by @andreasabel in #8200
- Add .agdai files to 'completion-ignored-extensions' by @phikal in #8174
- remove copy trimming by @plt-amy in https://github.com/agda/agda/pull/8203
- Fix #3123: instantiation of projection-like functions by @andreasabel in #8204
- Remove usages of deprecated 'window-system' variable by @phikal in #8175
- Fix #8206; refactor scope checker for RecDef a bit by @andreasabel in #8207
- Fix #8037 by copying record type along with its projection in module app by @andreasabel in #8210
- Do not set default input method to "Agda" globally by @phikal in #8173
- Add custom setter to 'agda2-mode-abbrevs-use-defaults' by @phikal in #8176
- Check responses of commands issued by Agda to Emacs by @phikal in #8178
- Add support for 'repeat-mode' by @phikal in #8179
- App range fix for operator application by @marcinjangrzybowski in #8217
- Treeless: don't mix up pipelines (#7691) by @hsyl20 in #8221
- Allow disabling resizing of minibuffer due to input method by @phikal in #8177
- Optimize rewrite rule matching by @AndrasKovacs in #8222
- Fix 8228: Parse Error with Display Pragma and Mixfix Operator by @NathanielB123 in #8232
- Fix #8218: Update signature for imported rewrite rules by @NathanielB123 in #8220
- [ fix #5315 ] Compile erased types to () in the GHC backend by @jespercockx in #8239
- [ fix #2691 ] Add basic documentation for simplification by @jespercockx in #8243
- More refactorings for unused imports warning by @andreasabel in https://github.com/agda/agda/pull/8246
- Fix #8231: Check relevance in
PTermmatching by @NathanielB123 in #8234 - New warning UnusedImports by @andreasabel in #8226
- Add --literate-markdown-only-agda-blocks option by @andreasabel with @Copilot in #8250
- Fix #8263: turn
__IMPOSSIBLE__intopatternViolationby @andreasabel in #8267 - Running Agda on WASM (resolving merge conflicts of #7561) by @andy0130tw in #8205
- Fix #8269: doc: remove claim that ETA is safe for colists by @andreasabel in #8270
- Simplify "Installation" documentation by @lawcho in #8089
- Separately benchmark Polarity from Positivity; restore forcing of argOccurrences by @andreasabel in #8292
- Fix #3677: print names clashing with operators when parsing failed by @andreasabel in #8293
- Doc on polarities: Cite the associated abstract. by @anuyts in #8297
- Fix #8298: copatterns in let bindings not impossible by @szumixie in https://github.com/agda/agda/pull/8299
- Qualified
doand qualified idiom brackets by @plt-amy in #8280 - GHC 9.14 compatibility by @andreasabel in #8303
- Re #8161: Split GeneralizePrepruneError into its three variants by @andreasabel in #8306
- Turn off colored terminal output when
NO_COLORis set. by @andreasabel in #8309 - Fix #8300: appViewM produces correct hiding for postfix projection by @andreasabel in #8310
- nix: bump nixpkgs by @ncfavier in #8313
- doc/user-manual: render maths as SVG instead of PNG by @ncfavier in #8314
- Library management: support
defaults-X.Y.Zfiles by @gallais in #8279 - fix #8242: don't copy records to within themselves by @plt-amy in #8317
- test: finish renaming succeed to Succeed by @ncfavier in https://github.com/agda/agda/pull/8319
- Made it possible to turn off the occurrence analysis for functions by @nad in #8295
- #5833: make
with … ingeneralise overreflby @ncfavier in #8318 - Fix #8327: check early for record constructor in let-pattern by @andreasabel in #8328
- Fix #8325 by changing an
__IMPOSSIBLE__to afailby @andreasabel in #8329 - [workflows] Bump styfle/cancel-workflow-action by @andreasabel in https://github.com/agda/agda/pull/8331
- Fix #8326: handle the implication two-level <= cubical in isTwoLevelEnabled by @andreasabel in #8330
- Improve caching for (large) opaque blocks by @andreasabel in #8278
- Literate forester without external tool by @dannypsnl in https://github.com/agda/agda/pull/8290
- Add link to "Let's play Agda" to user manual by @jespercockx in #8333
- new feature: quote metas by @rybla in #8235
- Type check in parallel by @plt-amy in #8332
- Reify an amount of backtrace when conversion checking fails by @plt-amy in #8315
- don't allow postulates in --safe lets by @plt-amy in #8340
- #8337: Look for instance fields in eta records under binders by @Soares in #8338
- Xref support for Agda2-mode by @phikal in #8181
- New Warning to Fix #5929 by @NathanielB123 in #8238
- Fix #8344: remember whether a LetBinding came from a LetAxiom by @andreasabel in #8345
- fix #8215: reduce candidate in its own state by @plt-amy in #8342
- Fix #8273: Consider interface to merge imported whilst checking confluence by @NathanielB123 in #8274
- Fix #8365: reduce in wrong context by @andreasabel in #8369
- Fix #8352: explicitly list JS primitives that should compile to Undefined by @comonoid in #8353
- Support
@tacticModule Parameters by @NathanielB123 in #8364 - nix: enable cluster counting by @ncfavier in #8378
- Fix #8388: do not mention deprecated BUILTIN REFL in error message by @andreasabel in https://github.com/agda/agda/pull/8391
- Fix #8380: move line comment rule above block comment rule in lexer by @szumixie in #8381
- Only look up instance fields in instance variables by @plt-amy in #8367
- Stop eta-expanding module applications by @NathanielB123 in #8382
- Fix --help claiming --type-in-type is the default by @meithecatte in #8394
- Make UnknownNamesIn{FixityDecl,PolarityPragmas} error warnings by @andreasabel in #8397
- Fix #8400 by remembering the range of the instance keyword by @andreasabel in #8401
- Fix #8402: missing OtherAspects in agda.sty by @andreasabel in #8406
- JSONTop: avoid needless parentheses around types by @meithecatte in #8407
- Fix #7139: LeftInverse: reorder context in Solution steps by @ncfavier in #8376
- Fix #7988: smarter figureOutTopLevelModule, prioritizes qualified module by @andreasabel in #8410
- Fix #5618: better wording of UselessInstance warning by @andreasabel in #8413
- Fix #5839 by adding conPartNotations to the OperatorInformation by @andreasabel in #8414
- [ fix #8393 ] Normalise codomain of piSort when needed by @jespercockx in #8405
- Retain lineage (
AbstractName) inAmbiguousQNamefor error reporting by @andreasabel in #8416 - fix #8361: Synchronise session state by @plt-amy in https://github.com/agda/agda/pull/8387
- Free variable computation optimization by @AndrasKovacs in #8383
- [ fix #8423 ] Only forceNoAbs if piSort arguments are not blocked by @jespercockx in https://github.com/agda/agda/pull/8426
- Erased levels [cubical] by @nad in #8348
- Fix ReduceM scoping in PR #8383 by @AndrasKovacs in https://github.com/agda/agda/pull/8428
- Adding Sharp modality by @samtoth in #8409
- Fix #3355: NO_POSITIVITY_CHECK pragmas in where and record by @andreasabel in #8433
- Fix #8431: RecursiveRecordNeedsInductionDeclaration turned into warning by @andreasabel in https://github.com/agda/agda/pull/8434
- Fix #8435 by new warning DeclarationBeforeDefinition by @andreasabel in #8437
- Fix #4150 by sorting lone definitions up in a
mutualblock by @andreasabel in #8438 - Fix #6173 by inserting missing checkModuleName by @andreasabel in #8439
- fixup: traverse telescope properly in checkFibrantSplit by @plt-amy in #8444
- Remove transitive closure from positivity checking by @AndrasKovacs in #8445
- [ #8283 ] Fix highlighting race condition in agda2-mode by @TOTBWF in #8451
- Fix #8454 by @AndrasKovacs in #8462
- Fix #8564: take definition site into account when serializing (Q)Name by @andreasabel in #8466
- Reverted two commits that made certain level arguments erased by @nad in #8471
- [ doc ] Add course to “Courses using Agda” by @vicgeentor in https://github.com/agda/agda/pull/8480
- Add flag for ignoring
build-tool-dependscabal stanza by @TOTBWF in https://github.com/agda/agda/pull/8481 - [ fix #7964 ] Properly handle projection-likeness in Mimer by @jespercockx in #8486
- Local Rewrite Rules by @NathanielB123 in https://github.com/agda/agda/pull/8385
- Progress reporting when checking in parallel by @plt-amy in #8392
- [ #8452 ] Make agda2-maybe-goto jump across files by @TOTBWF in #8458
- re. #8457: only ask if meta is an IP if cubical by @plt-amy in #8460
- Mark all non-delimiter characters as word constituents in
agda2-mode-syntax-tableby @TOTBWF in #8450 - Fix #8453: check field types of BUILTIN SIGMA by @andreasabel in #8488
- Make Agda go faster by @AndrasKovacs in #8473
- Deprecate non-ES6 JS module styles by @lawcho in #8447
- Re #8100: some quickchecking levelLub by @andreasabel in https://github.com/agda/agda/pull/8496
- Bump GHC 9.12.2 to 9.12.4 by @andreasabel in #8501
- [ emacs ] Overhaul goal lexer in agda2-goals-action by @TOTBWF in #8498
- Restrict pattern matching in binding position to eta-equality records (#6845 reopened) by @andreasabel in #8503
- Dependencies: allow pqueue-1.7 by @andreasabel in #8509
- Docs: why is --injective-type-constructors anti-classical & anti-univalent by @anuyts in #8512
- User-manual: versionadded info for warnings by @andreasabel in #8508
- Highlighting and go-to-definition in the debug buffer by @VojtechStep in #8502
stripWithClausePatternsin the right context by @NathanielB123 in #8515- Bump TeX-Live/setup-texlive-action from 3 to 4 by @dependabot[bot] in #8469
- New
primRewriteNoMatchprimitive for controlling rewrite rule matching by @NathanielB123 in #8463 - Serialize fewer generalization records by @AndrasKovacs in #8518
- Fix #8521 by remembering PossiblyProjectionPattern in DotP parsing by @andreasabel in #8522
- Update context in checkIApplyConfluence by @NathanielB123 in #8520
- Remove inaccurate claim in two-level.lagda.rst by @jasoncarr0 in #8523
- Fix #8529 by @andreasabel in #8530
- Update inaccurate Agda example in record-types.lagda.rst by @beren-evans-oguz in #8527
- [ emacs ] Fix goal detection in pattern lambdas by @TOTBWF in #8528
- [ emacs ] Only jump to an error in the selected window by @TOTBWF in #8506
- No longer infer eta for records by @andreasabel in #8533
- Fix #6670 #5411 #6240 generalizeTel with open by @andreasabel in #8541
- Fix #7629 by correction countPatternVars for HITs by @andreasabel in #8542
- Fix #2877: doc: literal overloading is not allowed in patterns by @andreasabel in #8547
- Add mathematical bold fraktur to agda-input by @fredrik-bakke in https://github.com/agda/agda/pull/8555
- Fix #4228: also prune genTel from solved interaction metas by @andreasabel in https://github.com/agda/agda/pull/8556
- Fix #3054 by introducing MatchPrio for constructor patterns by @andreasabel in https://github.com/agda/agda/pull/8560
- Simplify fix of #6770: remove section updating by @andreasabel in https://github.com/agda/agda/pull/8567
- Add lines-per-second information to --profile=modules by @dancewithheart in #8491
- Fix occurrences in over-applied args, primitives and postulates by @AndrasKovacs in https://github.com/agda/agda/pull/8569
- Fix #8577: Normalise under varTel in Unify.hs by @NathanielB123 in https://github.com/agda/agda/pull/8578
- Fix #8583: (Co)InfectiveError: report imported module with range by @andreasabel in https://github.com/agda/agda/pull/8584
- Fix #8580: internal error with _ in pattern synonym definition by @andreasabel in https://github.com/agda/agda/pull/8585
- Fall back to hole range when refine input has no range by @dancewithheart in https://github.com/agda/agda/pull/8493
- Add flag for irrelevance by @jespercockx in https://github.com/agda/agda/pull/8575
- Fixed weird sentence in cubical docs #8579 by @Brian-ED in https://github.com/agda/agda/pull/8590
- Fix #8610 by @AndrasKovacs in https://github.com/agda/agda/pull/8612
- Bump actions/cache from 5 to 6 by @dependabot[bot] in https://github.com/agda/agda/pull/8606
- Bump actions/checkout from 6 to 7 by @dependabot[bot] in https://github.com/agda/agda/pull/8604
- Added a missing option to a list in the documentation by @nad in https://github.com/agda/agda/pull/8594
- Fix #8587 by @AndrasKovacs in https://github.com/agda/agda/pull/8615
- Place -WShouldBeEtaRecordPattern under --exact-split. by @andreasabel in https://github.com/agda/agda/pull/8617
- [ fix #8557 ] Only resurrect irrelevant variables once by @jespercockx in https://github.com/agda/agda/pull/8576
- Add CONTRIBUTING.md by @jespercockx in https://github.com/agda/agda/pull/8507
- Allow aeson-2.3 by @andreasabel in https://github.com/agda/agda/pull/8640
- Repair
nix buildby @lawcho in https://github.com/agda/agda/pull/8635 - Bump actions/setup-python from 6 to 7 by @dependabot[bot] in https://github.com/agda/agda/pull/8637
- Remove case-of-case optimization in compiler by @fredins in https://github.com/agda/agda/pull/8632
- Allow deepseq-1.5.2.0 (warns about rnf for functions) by @andreasabel in https://github.com/agda/agda/pull/8643
- Fixes #8626: treat lazy split pattern as dot pattern when there is nothing left to split in
compileby @shhyou in https://github.com/agda/agda/pull/8628 - [ re #8552 ] Add workaround to the release notes + test suite by @jespercockx in https://github.com/agda/agda/pull/8588
- Fix #8596: termination checker respects copatterns by @Soares in https://github.com/agda/agda/pull/8601
- Fix #1680: Stratify termination masks by copattern by @Soares in https://github.com/agda/agda/pull/8602
- Fix
COMPILE JS _∷_by @lawcho in https://github.com/agda/agda/pull/8646 - Fix #8647: for the sake of caching handle FOREIGN pragmas in the tc by @andreasabel in https://github.com/agda/agda/pull/8648
- Fix for #8636 by @jespercockx in https://github.com/agda/agda/pull/8652
- [ fix #8649 ] Don't eta-expand no-eta records in confluence checker by @jespercockx in https://github.com/agda/agda/pull/8657
- Fix #8634: internal error with --interaction when .agda-lib file contains bogus fields by @andreasabel in https://github.com/agda/agda/pull/8658
- Highlight ShouldBeEtaRecordPattern the same way as exactSplitWarnings by @shhyou in https://github.com/agda/agda/pull/8662
- Add missing flags to builtin modules by @jespercockx in https://github.com/agda/agda/pull/8667
- [wasm] nix: Bump nix pkgs for ghc-wasm to include critical bug fix for ghc/ghc#27447 by @andy0130tw in https://github.com/agda/agda/pull/8663
- syntactic equality optimization by @AndrasKovacs in https://github.com/agda/agda/pull/8665
- Added
--erased-funext,--erased-propextand--erased-quotientsby @nad in https://github.com/agda/agda/pull/8593 - Upstream emacs mode fixes by @andreasabel in https://github.com/agda/agda/pull/8661
- Fix #8627: make --build-library on builtin library work by @AndrasKovacs in https://github.com/agda/agda/pull/8671
- Fix #8638 by @jespercockx in https://github.com/agda/agda/pull/8669
- Dead code elimination: don't traverse meta judgement types by @olympichek in https://github.com/agda/agda/pull/8675
- Fix #8599: classifyPattern: projection patterns only in LHSs by @andreasabel in https://github.com/agda/agda/pull/8677
- Fix #7564: Do not crash when trying eta-contraction on over-applied constructor. by @andreasabel in https://github.com/agda/agda/pull/8679
- [ fix #5665 ] Close information gaps in the JSON interaction protocol by @willtunnels in https://github.com/agda/agda/pull/8678
- Fix #8680 (pattern syn) by removing spurious
__IMPOSSIBLE__by @andreasabel in https://github.com/agda/agda/pull/8682 - Fix #8683: check cubical side conditions also in inference mode by @andreasabel in https://github.com/agda/agda/pull/8685
- Change R.constructor so that R is the record module rather than the type by @andreasabel in https://github.com/agda/agda/pull/8681
- Fix #8686: False via projection-like due to non-injective type of principal argument by @andreasabel in https://github.com/agda/agda/pull/8690
- Alternative fix of #8687 by @jespercockx in https://github.com/agda/agda/pull/8701
- Fix #8688: positivity checker now also descends into Sort by @andreasabel in https://github.com/agda/agda/pull/8691
- [ fix #8694 ] Take relevance into account for cycle rule in LHS unifier by @jespercockx in https://github.com/agda/agda/pull/8702
- Fix for #8700 by @jespercockx in https://github.com/agda/agda/pull/8706
- Fix #8697 by indexing the memo map for Double by their Word64 representation by @andreasabel in https://github.com/agda/agda/pull/8708
- Fix #8699 by masking irrelevant/Prop-sorted subterms in dot patterns in the termination checker by @andreasabel in https://github.com/agda/agda/pull/8707
- [ fix #8710 ] merge builtin rewrites when adding import by @szumixie in https://github.com/agda/agda/pull/8711
- Fix #8696 by eta-expanding data/recClauses before positivity checking by @andreasabel in https://github.com/agda/agda/pull/8709
- Add Agda Web to the manual by @L-TChen in https://github.com/agda/agda/pull/8723
- Fix #8532 by ensuring projectTyped gets a reduced type in antiUnify by @andreasabel in https://github.com/agda/agda/pull/8729
- Small bugfix for Cubical Glue/HCompU (fixes #6198) by @tomjack in https://github.com/agda/agda/pull/8719
- Fix #8698 by disallowing named where modules under with by @andreasabel in https://github.com/agda/agda/pull/8732
- [ #8591 ] Added a test case by @nad in https://github.com/agda/agda/pull/8736
- Fix issue 8336 by turning projection-like functions back into Defs by @jespercockx in https://github.com/agda/agda/pull/8740
- Tried to fix a bug related to PR #8593 by @nad in https://github.com/agda/agda/pull/8743
- Fix #8733: Add
--constraint='zlib +bundled-c-zlibby @L-TChen in https://github.com/agda/agda/pull/8746 - Fix #8716: Add a flag
version-with-git-hashby @L-TChen in https://github.com/agda/agda/pull/8724 - Support for
[]-congby @nad in https://github.com/agda/agda/pull/8745 - Fix #1438: new warning FixityDeclarationForNonOperator by @andreasabel in https://github.com/agda/agda/pull/8738
- Build with GHC 10.0.0 by @andreasabel in https://github.com/agda/agda/pull/8770
- Fix #8545 by storing data/recClause as just Term by @andreasabel in https://github.com/agda/agda/pull/8774
- Fix #8777: replace call to canonicalName by reduce by @andreasabel in https://github.com/agda/agda/pull/8778
- Compile constructors to string-tagged JS arrays by @lawcho in #8720
- [ fix #8703 ] Treat underapplied functions as stuck by @jespercockx in https://github.com/agda/agda/pull/8790
- Fix #8771 by unspining also the transformed term in checkInternal by @andreasabel in https://github.com/agda/agda/pull/8772
- Fix #8787: drop hidden fields in record pattern when introduced by case-split by @andreasabel in https://github.com/agda/agda/pull/8791
- Fix #7664 checkParameters (revisit #8722) by @andreasabel in https://github.com/agda/agda/pull/8779
- Makefile: new goal
fast-forward-ecosystem; update submodules [ecosystem] by @andreasabel in https://github.com/agda/agda/pull/8802 - Fix #8783: Mimer: use functions from mutual block as default hints by @andreasabel in https://github.com/agda/agda/pull/8804
- Fix #8808 by removing shortcut creating unbound de Bruijn indices by @andreasabel in https://github.com/agda/agda/pull/8810
- Fix #8811 by relaxing the modallity in the occurs check of sort annotations by @andreasabel in https://github.com/agda/agda/pull/8812
- Safer fix of #7181 by @jespercockx in https://github.com/agda/agda/pull/8822
- Fix issue #8788 by @nad in https://github.com/agda/agda/pull/8789
- Strict lets by @nad in https://github.com/agda/agda/pull/8768
- [ fix #8695 ] Treat occurrences in constructors of HITs as weakly rigid by @jespercockx in https://github.com/agda/agda/pull/8817
- Fix #8815 and #7972 by postponing constraints in Mimer by @andreasabel in https://github.com/agda/agda/pull/8816
- Fix #8171 by creating metas at the unitPolarity (@++) by @andreasabel in https://github.com/agda/agda/pull/8806
- [ #8839 ] Improved the detection of error/warning locations by @nad in https://github.com/agda/agda/pull/8840
- Fix #8834 by checking cohesion and polarity when abstracting telescopes by @andreasabel in https://github.com/agda/agda/pull/8843
- [ fix #8828 ] Don't solve metas from outside current abstract block by @jespercockx in https://github.com/agda/agda/pull/8837
- [ fix #8765 ] Add separate response for errors in other files by @jespercockx in https://github.com/agda/agda/pull/8833
New Contributors
- @TOTBWF made their first contribution in #7951
- @TheVeryDarkness made their first contribution in #8115
- @jyp made their first contribution in #8057
- @noughtmare made their first contribution in #8151
- @sjakobi made their first contribution in https://github.com/agda/agda/pull/8186
- @hsyl20 made their first contribution in #8221
- @carlostome made their first contribution in https://github.com/agda/agda/pull/8225
- @NathanielB123 made their first contribution in #8232
- @andy0130tw made their first contribution in #8205
- @3fbaea00 made their first contribution in https://github.com/agda/agda/pull/8296
- @rybla made their first contribution in #8235
- @comonoid made their first contribution in #8353
- @meithecatte made their first contribution in #8394
- @samtoth made their first contribution in #8409
- @vicgeentor made their first contribution in https://github.com/agda/agda/pull/8480
- @VojtechStep made their first contribution in #8502
- @jasoncarr0 made their first contribution in #8523
- @beren-evans-oguz made their first contribution in #8527
- @josetorrs made their first contribution in https://github.com/agda/agda/pull/8568
- @dancewithheart made their first contribution in #8491
- @Brian-ED made their first contribution in https://github.com/agda/agda/pull/8590
- @shhyou made their first contribution in https://github.com/agda/agda/pull/8628
- @olympichek made their first contribution in https://github.com/agda/agda/pull/8675
- @willtunnels made their first contribution in https://github.com/agda/agda/pull/8678
- @tomjack made their first contribution in https://github.com/agda/agda/pull/8719
- @UlrikBuchholtz made their first contribution in https://github.com/agda/agda/pull/8785
Full Changelog: v2.8.0...v2.9.0-rc1