Release notes for Agda version 2.6.0
====================================

Highlights
----------

* Added support for [Cubical
  Agda](https://agda.readthedocs.io/en/v2.6.0/language/cubical.html)
  which adds new features such as univalence and higher inductive
  types to Agda.

* Added support for ML-style [automatic generalization of
  variables](https://agda.readthedocs.io/en/v2.6.0/language/generalization-of-declared-variables.html).

* Added a new sort ``Prop`` of [definitionally proof-irrelevant
  propositions](https://agda.readthedocs.io/en/v2.6.0/language/prop.html).

* The implementation of [instance
  search](https://agda.readthedocs.io/en/v2.6.0/language/instance-arguments.html)
  got a major overhaul and no longer supports overlapping instances
  (unless enabled by a flag).

Installation and infrastructure
-------------------------------

* Added support for GHC 8.6.4.

* Interface files for all builtin and primitive files are now
  re-generated each time Agda is installed.

Syntax
------

* Agda now supports implicit generalization of declared
  variables. Variables to be generalized can declared with the new
  keyword `variable`.  For example:

  ```agda
    postulate
      Con : Set

    variable
      Γ Δ θ : Con
  ```

  Declared variables are automatically generalized in type signatures,
  module telescopes and data type and record parameters and indices:

  ```agda
    postulate
      Sub : Con → Con → Set

      id  : Sub Γ Γ
   -- -- equivalent to
   -- id  : {Γ : Con} → Sub Γ Γ

      _∘_ : Sub Θ Δ → Sub Γ Θ → Sub Γ Δ
   -- -- equivalent to
   -- _∘_ : {Γ Δ Θ : Con} → Sub Θ Δ → Sub Γ Θ → Sub Γ Δ
  ```

  See the [user manual](https://agda.readthedocs.io/en/v2.6.0/language/generalization-of-declared-variables.html)
  for more details.

* Data type and record definitions separated from their type signatures can no
  longer repeat the types of the parameters, but can bind implicit parameters
  by name [Issue [#1886](https://github.com/agda/agda/issues/1886)].

  This is now allowed
  ```agda
    data D {a b} (A : Set a) (B : Set b) : Set (a ⊔ lsuc b)
    data D {b = b} A B where
      mkD : (A → Set b) → D A B
  ```
  but this is not
  ```agda
    data I (A : Set) : Set
    data I (A : Set) where
  ```

* The label used for named implicit arguments can now be different from the
  name of the bound variable [Issue [#952](https://github.com/agda/agda/issues/952)].

  Example,
  ```agda
    id₁ : {A = X : Set} → X → X
    id₁ x = x

    id₂ : ∀ {B = X} → X → X
    id₂ {B = X} x = id₁ {A = X} x

    test : Nat
    test = id₁ {A = Nat} 5 + id₂ {B = Nat} 6
  ```
  Only implicit and instance arguments can have a label and either or both of
  the label and bound variable can be `_`. Labeled bindings with a type
  signature can only bind a single variable. For instance, the type `Set` has
  to be repeated here:
  ```agda
    const : {A = X : Set} {B = Y : Set} → X → Y → X
    const x _ = x
  ```

* The rules for parsing of patterns have changed slightly [Issue
  [#3400](https://github.com/agda/agda/issues/3400)].

  Now projections are treated similarly to constructors: In a pattern
  name parts coming from projections can only be used as part of
  projections, constructors or pattern synonyms. They cannot be used
  as variables, or as part of the name of the defined value.

  Examples:

  * The following code used to be syntactically ambiguous, but is now
    parsed, because A can no longer be used as a variable:
    ```agda
    record R : Set₂ where
      field
        _A : Set₁

    open R

    r : R
    r A = Set
    ```

  * On the other hand the following code is no longer parsed:
    ```agda
    record R : Set₁ where
      field
        ⟨_+_⟩ : Set

    open R

    + : Set → Set
    + A = A
    ```


Type checking
-------------

* Agda now supports a cubical mode which adds new features from
  [Cubical Type Theory](https://arxiv.org/abs/1611.02108), including
  univalence and higher inductive types. Option `--cubical` enables
  the cubical mode, and cubical primitives are defined in the module
  `Agda.Primitive.Cubical`.  See the [user
  manual](https://agda.readthedocs.io/en/v2.6.0/language/cubical.html)
  for more info.

* Agda now supports the new sort ``Prop`` of [definitionally
  proof-irrelevant propositions](https://hal.inria.fr/hal-01859964).
  Option `--prop` enables the `Prop` universe but is off by default.
  Option `--no-prop` disables the `Prop` universe.  See the [user
  manual](https://agda.readthedocs.io/en/v2.6.0/language/prop.html)
  for more details.

  In the absense of `Prop`, the sort `Set` is the lowest sort, thus,
  the sort annotation `: Set` can be ommitted if the sort is
  constrained to be weakly below `Set`.  For instance:

  ```agda
  {-# OPTIONS --no-prop #-}

  data Wrap A : Set where
    wrap : A → Wrap A
  ```

  In contrast, when `--prop` is enabled the sort of `A` could be
  either `Set` or `Prop` so this code no longer typechecks.

* Agda now allows omitting absurd clauses in case one of the pattern
  variable inhabits an obviously empty type
  [Issue [#1086](https://github.com/agda/agda/issues/1086)].
  For example:
  ```agda
  f : Fin 1 → Nat
  f zero = 0
  -- f (suc ())   -- this clause is no longer required
  ```
  Absurd clauses are still required in case deep pattern matching is
  needed to expose the absurd variable, or if there are no non-absurd
  clauses.

  Due to the changes to the coverage checker required for this new
  feature, Agda will now sometimes construct a different case tree when
  there are multiple valid splitting orders. In some cases this may
  impact the constraints that Agda is able to solve (for example, see
  [#673](https://github.com/agda/agda-stdlib/pull/673) on the
  standard library).

* Since Agda 2.5.3, the hiding is considered part of the name in the
  insertion of implicit arguments.  Until Agda 2.5.2, the following
  code was rejected:
  ```agda
    test : {{X : Set}} {X : Set} → Set
    test {X = X} = X
  ```
  The rationale was that named argument `X` is given with the wrong hiding.
  The new rationale is that the hiding is considered part of the name,
  distinguishing `{{X}}` from `{X}`.
  This language change was accidential and has not been documented in
  the 2.5.3 release notes.

* Agda no longer allows case splitting on irrelevant arguments of
  record types (see Issue
  [#3056](https://github.com/agda/agda/issues/3056)).

* Metavariables in module telescopes are now sometimes frozen later
  [Issue [#1063](https://github.com/agda/agda/issues/1063)].

  Metavariables created in the types of module parameters used to be
  frozen right after the module's first mutual block had been
  type-checked (unless, perhaps, if the module itself was contained in
  a mutual block). Now they are instead frozen at the end of the
  module (with a similar caveat regarding an outer mutual block).

* When `--without-K` is enabled, Agda no longer allows datatypes with
  large indices. For example, the following definition of equality is
  now forbidden when `--without-K` is enabled:
  ```agda
    data _≡₀_ {ℓ} {A : Set ℓ} (x : A) : A → Set where
      refl : x ≡₀ x
  ```

* The termination checker now also looks for recursive calls in the type of definitions.
  This fixes an issue where Agda allowed very dependent types
  [Issue [#1556](https://github.com/agda/agda/issues/1556)].

  This change affects induction-induction, e.g.
  ```agda
    mutual
      data Cxt : Set where
        ε    :  Cxt
        _,_  :  (Γ : Cxt) (A : Ty Γ) → Cxt

      data Ty : (Γ : Cxt) → Set where
        u  :  ∀ Γ → Ty Γ
        Π  :  ∀ Γ (A : Ty Γ) (B : Ty (Γ , A)) → Ty Γ

    mutual
      f : Cxt → Cxt
      f ε        =  ε
      f (Γ , T)  =  (f Γ , g Γ T)

      g : ∀ Γ → Ty Γ → Ty (f Γ)
      g Γ (u .Γ)      =  u (f Γ)
      g Γ (Π .Γ A B)  =  Π (f Γ) (g Γ A) (g (Γ , A) B)

  ```
  The type of `g` contains a call `g Γ _ --> f Γ` which is now taken
  into account during termination checking.

Instance search
---------------

* Instance argument resolution now also applies when there are
  unconstrained metavariables in the type of the argument. For
  example, if there is a single instance `eqBool : Eq Bool` in scope,
  then an instance argument `{{eq : Eq _}}` will be solved to
  `eqBool`, setting the value of the metavariable `_` to `Bool` in the
  process.

* By default, Agda no longer allows overlapping instances. Two
  instances are defined to overlap if they could both solve the
  instance goal when given appropriate solutions for their recursive
  (instance) arguments. Agda used to choose between undecidable
  instances based on the result of recursive instance search, but this
  lead to an exponential slowdown in instance resolution. Overlapping
  instances can be enabled with the flag `--overlapping-instances`.

* Explicit arguments are no longer automatically turned into instance
  arguments for the purpose of recursive instance search. Instead,
  explicit arguments are left unresolved and will thus never be used
  for instance search.

  If an instance is declared which has explicit arguments, Agda will
  raise a warning that this instance will never be considered by
  instance search.

* Instance arguments that are already solved by conversion checking
  are no longer ignored by instance search. Thus the constructor of
  the unit type must now be explicitly be declared as an instance in
  order to be considered by instance search:
  ```agda
    record ⊤ : Set where
      instance constructor tt
  ```

* Instances are now (correctly) required to be in scope to be eligible
  (see Issue [#1913](https://github.com/agda/agda/issues/1913)
   and Issue [#2489](https://github.com/agda/agda/issues/2489)
  ).
  This means that you can no longer import instances from parameterised modules by
  ```agda
    import Some.Module Arg₁ Arg2
  ```
  without opening or naming the module.

Reflection
----------

* New TC primitive `noConstraints` [Issue
  [#2351](https://github.com/agda/agda/issues/2351)]:

  ```agda
    noConstraints : ∀ {a} {A : Set a} → TC A → TC A
  ```

  The computation `noConstraints m` fails if `m` gives rise to new,
  unsolved
  ["blocking"](https://github.com/agda/agda/blob/4900ef5fc61776381f3a5e9c94ef776375e9e1f1/src/full/Agda/TypeChecking/Monad/Constraints.hs#L160-L174)
  constraints.

* New TC primitive `runSpeculative` [Issue
  [#3346](https://github.com/agda/agda/issues/3346)]:

  ```
    runSpeculative : ∀ {a} {A : Set a} → TC (Σ A λ _ → Bool) → TC A
  ```

  The computation `runSpeculative m` runs `m` and either keeps the new
  TC state (if the second component is `true`) or resets to the old TC
  state (if it is `false`).


Interaction and error reporting
-------------------------------

* A new command `agda2-elaborate-give` (C-c C-m) normalizes a goal input
  (it respects the C-u prefixes), type checks, and inserts the normalized
  term into the goal.

* 'Solve constraints' (C-c C-s) now turns unsolved metavariables into new
  interaction holes (see Issue [#2273](https://github.com/agda/agda/issues/2273)).

* Out-of-scope identifiers are no longer prefixed by a '.' dot [Issue
  [#3127](https://github.com/agda/agda/issues/3127)].  This notation
  could be confused with dot patterns, postfix projections, and
  irrelevance. Now Agda will do its best to make up fresh names for
  out-of-scope identifiers that do not conflict with any existing
  names. In addition, these names are marked as "(out of scope)" when
  printing the context.

  The change affects the printing of terms, e.g. in error messages and
  interaction, and the parsing of out-of-scope variables for
  case splitting (`C-c C-c` in emacs).

* Shadowed local variables are now assigned fresh names in error
  messages and interactive goals [Issue
  [#572](https://github.com/agda/agda/issues/572)]. For example,
  consider the following piece of code:
  ```agda
    postulate P : Set -> Set

    test : (B : Set) -> P B -> P B
    test = λ p p -> {!!}
  ```
  When asking for the goal type, Agda will now print the following:
  ```
    Goal: P p₁
    ————————————————————————————————————————————————————————————
    p      : P p₁
    p = p₁ : Set  (not in scope)
  ```
  Shadowed top-level identifiers are printed using the qualified name,
  for example in
  ```agda
    module M where

      postulate A : Set

      test : Set → A
      test A = {!!}
  ```
  Agda will now show the goal type as
  ```
    Goal: M.A
    ————————————————————————————————————————————————————————————
    A : Set
  ```

* When case splitting (`C-c C-c` in emacs), Agda will now filter out
  impossible cases (i.e. ones where at least one of the variables
  could be replaced by an absurd pattern `()`). If all the clauses
  produced by a case split are impossible, Agda will not filter out
  any of them.

Pragmas and options
-------------------

* Consistency checking of options used.

  Agda now checks that options used in imported modules are consistent
  with each other, e.g. a module using `--safe`, `--without-K`,
  `--no-universe-polymorphism` or `--no-sized-types` may only import
  modules with the same option, and modules using `--cubical` or
  `--prop` must in turn use the same option. If an interface file has
  been generated using different options compared to the current ones,
  Agda will now re-typecheck the file.
  [Issue [#2487](https://github.com/agda/agda/issues/2487)].

* New option `--cubical` to enable Cubical Agda.

* New option `--prop` to enable the ``Prop`` sort, and `--no-prop` to
  disable it (default).

* New options `--guardedness` and `--no-guardedness` [Issue
  [#1209](https://github.com/agda/agda/issues/1209)].

  Constructor-based guarded corecursion is now only (meant to be)
  allowed if the `--guardedness` option is active. This option is
  active by default. The combination of constructor-based guarded
  corecursion and sized types is not allowed if `--safe` is used,
  and activating `--safe` turns off both `--guardedness` and
  `--sized-types` (because this combination is known to be
  inconsistent in the current implementation). If you want to use
  either constructor-based guarded corecursion or sized types in
  safe mode, then you can use `--safe --guardedness` or `--safe
  --sized-types` respectively (in this order).

  The option `--no-guardedness` turns off constructor-based guarded
  corecursion.

* Option `--irrelevant-projections` is now off by default and
  not considered `--safe` any longer.
  Reason: There are consistency issues that may be systemic
  [Issue [#2170](https://github.com/agda/agda/issues/2170)].

* New option `--no-syntactic-equality` disables the syntactic equality
  shortcut used by the conversion checker. This will slow down
  typechecking in most cases, but makes the performance more
  predictable and stable under minor changes.

* New option `--overlapping-instances` enables overlapping instances
  by performing recursive instance search during pruning of instance
  candidates (this used to be the default behaviour). Overlapping
  instances can be disabled with `--no-overlapping-instances`
  (default).

* Option (and experimental feature)
  `--guardedness-preserving-type-constructors`
  has been removed.
  [Issue [#3180](https://github.com/agda/agda/issues/3180)].

* Deprecated options `--sharing` and `--no-sharing` now raise an error.

* New primitive `primErase`. It takes a proof of equality and returns a proof of
  the same equality. `primErase eq` reduces to `refl` on the diagonal. `trustMe`
  is not a primitive anymore, it is implemented using `primErase`.

  The primitive is declared in `Agda.Builtin.Equality.Erase`.

* The `REWRITE` builtin is now bound to the builtin equality type from
  `Agda.Builtin.Equality` in `Agda.Builtin.Equality.Rewrite` [Issue
  [#3318](https://github.com/agda/agda/issues/3318)].

* New primitives `primCharToNatInjective` and `primStringToListInjective`
  internalising the fact that `primCharToNat` and `primStringtoList` are
  injective functions. They are respectively bound in `Agda.Builtin.Char.Properties`
  and `Agda.Builtin.String.Properties`.

* The option `--only-scope-checking` is now allowed together with `--safe`.

* The option `--ignore-interfaces` no longer ignores the interfaces of
  builtin and primitive modules. For experts, there is the option
  `--ignore-all-interfaces` which also rechecks builtin and primitive
  files.

* The following deprecated compiler pragmas have been removed:

  ```
    {-# COMPILED f e #-}
    {-# COMPILED_TYPE A T #-}
    {-# COMPILED_DATA A D C1 .. CN #-}
    {-# COMPILED_DECLARE_DATA #-}
    {-# COMPILED_EXPORT f g #-}
    {-# IMPORT M #-}
    {-# HASKELL code #-}
    {-# COMPILED_UHC f e #-}
    {-# COMPILED_DATA_UHC A D C1 .. CN #-}
    {-# IMPORT_UHC M #-}
    {-# COMPILED_JS f e #-}
  ```

  See the [user manual](https://agda.readthedocs.io/en/v2.6.0/language/foreign-function-interface.html)
  for how to use the `COMPILE` and `FOREIGN` pragmas that replaced these in Agda 2.5.

### New warnings

* A declaration of the form `f : A` without an accompanying definition
  is no longer an error, but instead raises a warning.

* A clause that has both an absurd pattern and a right-hand side is no
  longer an error, but instead raises a warning.

* An import statement for `M` that mentions names not exported by `M`
  (in either `using`, `hiding`, or `renaming`) is no longer an
  error. Instead, Agda will raise a warning and ignore the names.

* Pragma, primitive, module or import statements in a mutual block
  are no longer errors. Instead, Agda will raise a warning and ignore
  these statements.

### Pragmas and options concerning universes

* New pragma `{-# NO_UNIVERSE_CHECK #-}`.

  The pragma `{-# NO_UNIVERSE_CHECK #-}` can be put in front of a data
  or record type to disable universe consistency checking locally.
  Example:
  ```agda
    {-# NO_UNIVERSE_CHECK #-}
    data U : Set where
      el : Set → U
  ```
  Like the similar pragmas for disabling termination and positivity
  checking, `{-# NO_UNIVERSE_CHECK #-}` cannot be used with `--safe`.

* New builtin `SETOMEGA`.

  Agda's top sort `Setω` is now defined as a builtin in `Agda.Primitive`
  and can be renamed when importing that module.

* New option `--omega-in-omega`.

  The option `--omega-in-omega` enables the typing rule `Setω : Setω`.
  Example:
  ```agda
  {-# OPTIONS --omega-in-omega #-}
  open import Agda.Primitive

  data Type : Setω where
    el : ∀ {ℓ} → Set ℓ → Type
  ```
  Like `--type-in-type`, this makes Agda inconsistent. However, code
  written using `--omega-in-omega` is still compatible with normal
  universe-polymorphic code and can be used in such files.

Emacs mode
----------

* Jump-to-definition now works for record field names in record expressions
  and patterns. [Issue [#3120](https://github.com/agda/agda/issues/3120)]
  ```agda
    record R : Set₂ where
      field f : Set₁

    exp : R
    exp = record { f = Set }

    pat : R → R
    pat r@record { f = X } = record r { f = X }
  ```
  Jump-to-definition (`M-.` or middle-click) on any of these `f`s
  now jumps to the field declaration.

* Commas "ʻ،⸲⸴⹁⹉、︐︑﹐﹑,、" and semi-colons "؛⁏፤꛶;︔﹔⍮⸵;" added
  to the input mode.

* It is now possible to customise the highlighting of more text in
  pragmas [Issue [#2452](https://github.com/agda/agda/issues/2452)].

  Some text was already highlighted. Now there is a specific face for
  the remaining text (`agda2-highlight-pragma-face`).

LaTeX backend
-------------

* The code environment has two new options, `inline` and `inline*`.

  These options are for typesetting inline code. The implementation of
  these options is a bit of a hack. Only use these options for
  typesetting a single line of code without multiple consecutive
  whitespace characters (except at the beginning of the line).

  When the option `inline*` is used space (`\AgdaSpace{}`) is added at
  the end of the code, and when `inline` is used space is not added.

* Now highlighting commands for things like "this is an unsolved
  meta-variable" are applied on the outside of highlighting commands
  for things like "this is a postulate" [Issue
  [#2474](https://github.com/agda/agda/issues/2474)].

  Example: Instead of generating
  `\AgdaPostulate{\AgdaUnsolvedMeta{F}}` Agda now generates
  `\AgdaUnsolvedMeta{\AgdaPostulate{F}}`.

* The package `agda.sty` no longer selects any fonts, and no longer
  changes the input or font encodings [Issue
  [#3224](https://github.com/agda/agda/issues/3224)].

  The new behaviour is the same as the old behaviour with the options
  `nofontsetup` and `noinputencodingsetup`. These options have been
  removed.

  One reason for this change is that several persons have received
  complaints from reviewers because they have unwittingly used
  non-standard fonts in submitted papers. Another is that the `utf8x`
  option to `inputenc` is now deprecated.

  Note that Agda code is now less likely to typeset properly out of
  the box. See the documentation for some hints about what to do if
  this affects you.

* Some text was by default typeset in math mode when LuaLaTeX or
  XeLaTeX were used, and in text mode when pdfLaTeX was used. Now text
  mode is the default for all of these engines.

* Typesetting of pragmas should now work better [Issue
  [#2452](https://github.com/agda/agda/issues/2452)].

  The `\AgdaOption` command and `AgdaOption` colour have been replaced
  by `\AgdaPragma` and `AgdaPragma`. The `\AgdaPragma` command is used
  where `\AgdaOption` used to be used (for certain options), but also
  in other cases (for other options and certain other text in
  pragmas).

* There is no longer any special treatment of the character `-` [Issue
  [#2452](https://github.com/agda/agda/issues/2452)].

  This might, depending on things like what font your are using, mean
  that the token `--` is typeset like an en dash (–). However, this is
  not the case for at least one common monospace font (in at least one
  setting).

* The default value of `\AgdaEmptySkip` has been changed from
  `\baselineskip` to `\abovedisplayskip`. This could mean that less
  vertical space is used to render empty lines in code blocks.

HTML backend
------------

* New option `--html-highlight=[code,all,auto]`.

  The option `--html-highlight=code` makes the HTML-backend generate
  files with:

  0. No HTML footer/header
  1. Agda codes highlighted
  2. Non-Agda code parts as-is
  3. Output file extension as-is (i.e. `.lagda.md` becomes `.md`)
  4. For ReStructuredText, a `.. raw:: html\n` will be inserted
     before every code blocks

  This makes it possible to use an ordinary Markdown/ReStructuredText
  processor to render the generated HTML.

  This will affect all the files involved in one compilation, making
  pure Agda code files rendered without HTML footer/header as well.
  To use `code` with literate Agda files and `all` with pure Agda
  files, use `--html-highlight=auto`, which means auto-detection.

  The old and default behaviour is still `--html-highlight=all`.

List of all closed issues
-------------------------

For 2.6.0, the following issues have been closed
(see [bug tracker](https://github.com/agda/agda/issues)):

  -  [#572](https://github.com/agda/agda/issues/572): Shadowed identifiers should be preceded by a dot when printed
  -  [#723](https://github.com/agda/agda/issues/723): Instance search needs to know whether a meta must be a function type
  -  [#758](https://github.com/agda/agda/issues/758): No highlighting for syntax declarations
  -  [#887](https://github.com/agda/agda/issues/887): Case-split causes problems for coverage checker
  -  [#952](https://github.com/agda/agda/issues/952): Parse named implicit pi {x = y : A} -> B
  -  [#1003](https://github.com/agda/agda/issues/1003): No highlighting for ambiguous instance argument
  -  [#1063](https://github.com/agda/agda/issues/1063): Freeze metas in module telescope after checking the module?
  -  [#1086](https://github.com/agda/agda/issues/1086): Make absurd patterns not needed at toplevel
  -  [#1209](https://github.com/agda/agda/issues/1209): Guardedness checker inconsistency with copatterns
  -  [#1581](https://github.com/agda/agda/issues/1581): Fields of opened records sometimes highlighted, sometimes not
  -  [#1602](https://github.com/agda/agda/issues/1602): NonStrict arguments should be allowed to occur relevantly in the type
  -  [#1706](https://github.com/agda/agda/issues/1706): Feature request: ML-style forall-generalization
  -  [#1764](https://github.com/agda/agda/issues/1764): Type in type and universe polymorphism
  -  [#1886](https://github.com/agda/agda/issues/1886): Second copies of telescopes not checked?
  -  [#1909](https://github.com/agda/agda/issues/1909): parameters are not dropped from reflected pattern lambda
  -  [#1913](https://github.com/agda/agda/issues/1913): Names that are not in scope can sometimes be candidates for instance resolution
  -  [#1995](https://github.com/agda/agda/issues/1995): Correct names in goal types after multiple renaming imports.
  -  [#2044](https://github.com/agda/agda/issues/2044): Better diagnosis for failed instance search
  -  [#2089](https://github.com/agda/agda/issues/2089): ''No such module'' is a rude error message for private modules
  -  [#2153](https://github.com/agda/agda/issues/2153): PDF version of Language Documentation on readthedocs lacks most Unicode characters
  -  [#2273](https://github.com/agda/agda/issues/2273): C-c C-s should put new goals instead of underscores for unknown subterms
  -  [#2351](https://github.com/agda/agda/issues/2351): expose noConstraints to reflection framework
  -  [#2452](https://github.com/agda/agda/issues/2452): The LaTeX backend does not handle options very well
  -  [#2473](https://github.com/agda/agda/issues/2473): Don't reread the source code without checking that it is unchanged
  -  [#2487](https://github.com/agda/agda/issues/2487): Options used for different modules must be consistent with each other, and options used when loading an interface must be consistent with those used when the interface was created
  -  [#2489](https://github.com/agda/agda/issues/2489): Where clauses in functions leak instances to global instance search
  -  [#2490](https://github.com/agda/agda/issues/2490): possible non-terminating inference of instance arguments?
  -  [#2513](https://github.com/agda/agda/issues/2513): Extensible syntax for function space annotations
  -  [#2548](https://github.com/agda/agda/issues/2548): Move the "Old Reference Manual" to the current documentation
  -  [#2563](https://github.com/agda/agda/issues/2563): Improve documentation and error reporting related to instance resolution (especially unconstrained metavariables)
  -  [#2579](https://github.com/agda/agda/issues/2579): Import statements with module instantiation should not trigger an error message
  -  [#2618](https://github.com/agda/agda/issues/2618): Reflection and pattern-matching lambdas
  -  [#2670](https://github.com/agda/agda/issues/2670): Instance arguments and multi-sorted algebras
  -  [#2757](https://github.com/agda/agda/issues/2757): Proposal: split non-strict relevance into shape-irrelevance, parametricity, and runtime-irrelevance
  -  [#2760](https://github.com/agda/agda/issues/2760): Relax instance search restriction on unconstrained metas
  -  [#2774](https://github.com/agda/agda/issues/2774): Internal error with sized types
  -  [#2783](https://github.com/agda/agda/issues/2783): Make more primitive/builtin modules safe?
  -  [#2789](https://github.com/agda/agda/issues/2789): Narrow and broad options
  -  [#2791](https://github.com/agda/agda/issues/2791): More illtyped meta solutions
  -  [#2797](https://github.com/agda/agda/issues/2797): Relevance check missed for overloaded projection
  -  [#2833](https://github.com/agda/agda/issues/2833): Coverage checker splits on result too eagerly
  -  [#2837](https://github.com/agda/agda/issues/2837): The Emacs mode only handles LaTeX-based literate Agda
  -  [#2872](https://github.com/agda/agda/issues/2872): Case splitting adds a dot in front of pattern matches on Chars
  -  [#2880](https://github.com/agda/agda/issues/2880): Disallow FFI binding for defined functions when --safe is used
  -  [#2892](https://github.com/agda/agda/issues/2892): 'With' should also abstract over the type of stripped dot patterns
  -  [#2893](https://github.com/agda/agda/issues/2893): Display warnings also when an error is encountered
  -  [#2899](https://github.com/agda/agda/issues/2899): Add a warning for infix notations without corresponding fixity declaration
  -  [#2929](https://github.com/agda/agda/issues/2929): Turn "missing definition" into a warning
  -  [#2936](https://github.com/agda/agda/issues/2936): Sort warning flags alphabetically in user manual
  -  [#2939](https://github.com/agda/agda/issues/2939): make install-bin on a Mac can fail to install text-icu
  -  [#2964](https://github.com/agda/agda/issues/2964): Mismatch between order of matching in clauses and case tree; subject reduction broken
  -  [#2969](https://github.com/agda/agda/issues/2969): Module parameter is erased from dot pattern
  -  [#2979](https://github.com/agda/agda/issues/2979): Rewriting matching does not respect eta rules
  -  [#2993](https://github.com/agda/agda/issues/2993): Quadratic (failing) instance search
  -  [#3010](https://github.com/agda/agda/issues/3010): Field of opened record does not get highlighted
  -  [#3032](https://github.com/agda/agda/issues/3032): spurious meta in dot pattern
  -  [#3056](https://github.com/agda/agda/issues/3056): Matching on irrelevant variable of dependent record type should not be allowed
  -  [#3057](https://github.com/agda/agda/issues/3057): A module can export two definitions with the same name
  -  [#3068](https://github.com/agda/agda/issues/3068): Add option to turn off syntactic equality check
  -  [#3095](https://github.com/agda/agda/issues/3095): Would like to make hidden variable visible but it is created ambiguous
  -  [#3102](https://github.com/agda/agda/issues/3102): Performance regression: very slow reduction in the presence of many module parameters
  -  [#3114](https://github.com/agda/agda/issues/3114): Missing alpha-renaming when printing constraints
  -  [#3120](https://github.com/agda/agda/issues/3120): No tooltips for record field names in record expressions
  -  [#3122](https://github.com/agda/agda/issues/3122): Hidden record fields are not picked up from module in record expression
  -  [#3124](https://github.com/agda/agda/issues/3124): De Bruijn index in lhs checking error message
  -  [#3125](https://github.com/agda/agda/issues/3125): Internal error in InstanceArguments.hs:292
  -  [#3127](https://github.com/agda/agda/issues/3127): Notation for out-of-scope variables conflicts with notation for irrelevance
  -  [#3128](https://github.com/agda/agda/issues/3128): Sigma builtin not added to setup, agdai file missing.
  -  [#3130](https://github.com/agda/agda/issues/3130): Conflict between dot pattern and postfix projection
  -  [#3137](https://github.com/agda/agda/issues/3137): Preserve Markdown as-is when outputting HTML
  -  [#3138](https://github.com/agda/agda/issues/3138): Result splitter introduces pattern variable that conflicts with constructor
  -  [#3139](https://github.com/agda/agda/issues/3139): Internal error in parser
  -  [#3147](https://github.com/agda/agda/issues/3147): Non-linear as-patterns
  -  [#3152](https://github.com/agda/agda/issues/3152): `give` in a do-block inserts spurious parentheses
  -  [#3153](https://github.com/agda/agda/issues/3153): Type checker fails to infer missing signature of module parameter.
  -  [#3161](https://github.com/agda/agda/issues/3161): Case splitter produces end-of-comment
  -  [#3169](https://github.com/agda/agda/issues/3169): Doc for rewriting
  -  [#3170](https://github.com/agda/agda/issues/3170): UnicodeDeclare fails with pdflatex from TeX Live 2018
  -  [#3175](https://github.com/agda/agda/issues/3175): Instance resolution fails with defined method
  -  [#3176](https://github.com/agda/agda/issues/3176): Empty lambdas are sometimes considered definitionally equal, other times not
  -  [#3180](https://github.com/agda/agda/issues/3180): Remove feature `--guardedness-preserving-type-constructors`
  -  [#3188](https://github.com/agda/agda/issues/3188): Warnings disappear when fatal error is encountered
  -  [#3195](https://github.com/agda/agda/issues/3195): Internal error at Auto/Typecheck.hs:373
  -  [#3196](https://github.com/agda/agda/issues/3196): Turning MissingDefinition into a warning
  -  [#3200](https://github.com/agda/agda/issues/3200): Function marked as irrelevant when it isn't
  -  [#3201](https://github.com/agda/agda/issues/3201): [ warning ] AbsurdPatternRequiresNoRHS
  -  [#3205](https://github.com/agda/agda/issues/3205): [ cleanup + warning ] ModuleDoesntExport can be recovered from
  -  [#3224](https://github.com/agda/agda/issues/3224): Switch from utf8x to utf8? Make agda.sty easier to maintain?
  -  [#3235](https://github.com/agda/agda/issues/3235): Cannot pass backend flags via emacs variable `agda2-program-args`
  -  [#3247](https://github.com/agda/agda/issues/3247): Support cabal-install >= 2.4.1.0 in the Makefile
  -  [#3248](https://github.com/agda/agda/issues/3248): Max of two sizes less than i
  -  [#3253](https://github.com/agda/agda/issues/3253): [ fix ] ignore duplicate declarations of libraries
  -  [#3254](https://github.com/agda/agda/issues/3254): `cpphs` doesn't build with GHC 8.6.*
  -  [#3256](https://github.com/agda/agda/issues/3256): Internal error at src/full/Agda/TypeChecking/Reduce.hs:148
  -  [#3257](https://github.com/agda/agda/issues/3257): Anonymous top-level modules can have names with multiple components
  -  [#3258](https://github.com/agda/agda/issues/3258): Ordering the constructor names at Definition.
  -  [#3262](https://github.com/agda/agda/issues/3262): Suboptimal placement of "missing with-clauses" error
  -  [#3264](https://github.com/agda/agda/issues/3264): When refine leads to a termination error it should say so rather than "cannot refine"
  -  [#3268](https://github.com/agda/agda/issues/3268): [ haddock ] Fix haddock formatting
  -  [#3285](https://github.com/agda/agda/issues/3285): Internal error for syntax declaration
  -  [#3302](https://github.com/agda/agda/issues/3302): Multiple definitions called _ are sometimes allowed, sometimes not
  -  [#3307](https://github.com/agda/agda/issues/3307): `--no-unicode` bug: case splitting inside a pattern matching lambda still produces unicode arrows
  -  [#3309](https://github.com/agda/agda/issues/3309): Use of irrelevant arguments with copatterns and irrelevant fields
  -  [#3313](https://github.com/agda/agda/issues/3313): Add --html-highlight support for the HTML backend
  -  [#3315](https://github.com/agda/agda/issues/3315): The primErase primitive is not safe
  -  [#3318](https://github.com/agda/agda/issues/3318): Lots of primitives and builtins are not declared in the primitive/builtin modules
  -  [#3320](https://github.com/agda/agda/issues/3320): Extra indentation when code is hidden
  -  [#3323](https://github.com/agda/agda/issues/3323): Internal error with inconsistent irrelevance info between declaration and definition of data type
  -  [#3338](https://github.com/agda/agda/issues/3338): Missing Definitions not recognised in instance search
  -  [#3342](https://github.com/agda/agda/issues/3342): GHC panic on stack and GHC 7.10.3
  -  [#3344](https://github.com/agda/agda/issues/3344): Disable compilation with GHC 8.6.1
  -  [#3356](https://github.com/agda/agda/issues/3356): C-c C-s prints postfix projections by default
  -  [#3363](https://github.com/agda/agda/issues/3363): The wiki should support HTTPS
  -  [#3364](https://github.com/agda/agda/issues/3364): Funny scope error when trying to import as qualified
  -  [#3366](https://github.com/agda/agda/issues/3366): Add a command line flag to change the extension of the files generated by the HTML backend
  -  [#3368](https://github.com/agda/agda/issues/3368): Support GHC 8.6.2
  -  [#3370](https://github.com/agda/agda/issues/3370): [ fix ] < and > need to be in math mode in latex
  -  [#3371](https://github.com/agda/agda/issues/3371): Document common LaTeX backend pitfalls
  -  [#3372](https://github.com/agda/agda/issues/3372): Provide some simple LaTeX backend templates
  -  [#3373](https://github.com/agda/agda/issues/3373): Wrap HTML in `raw` directive when working with ReStructuredText
  -  [#3379](https://github.com/agda/agda/issues/3379): Adding a tutorial set in the readthedocs frontpage
  -  [#3380](https://github.com/agda/agda/issues/3380): Too much erasure in strict backends
  -  [#3394](https://github.com/agda/agda/issues/3394): Internal error in mutual block with unsolved implicit argument in termination checker
  -  [#3400](https://github.com/agda/agda/issues/3400): Obscure parse error with copattern and infix field
  -  [#3403](https://github.com/agda/agda/issues/3403): Internal error in Agda.TypeChecking.Rules.Term
  -  [#3404](https://github.com/agda/agda/issues/3404): Positivity checker marks postulates as constant in mutual block
  -  [#3407](https://github.com/agda/agda/issues/3407): Internal error at "src/full/Agda/TypeChecking/Reduce/Fast.hs:1338"
  -  [#3409](https://github.com/agda/agda/issues/3409): No error if mapping the empty type to non-empty Haskell type
  -  [#3410](https://github.com/agda/agda/issues/3410): ghc backend generates program that segfaults
  -  [#3419](https://github.com/agda/agda/issues/3419): Allow unconstrained instances & disallow overlapping instances
  -  [#3420](https://github.com/agda/agda/issues/3420): Inductive definitions live in a larger set --without-K
  -  [#3425](https://github.com/agda/agda/issues/3425): Internal error at src/full/Agda/Termination/Monad.hs:177
  -  [#3426](https://github.com/agda/agda/issues/3426): Termination checking false positive when using "where"
  -  [#3428](https://github.com/agda/agda/issues/3428): Another interal error in Substitute:72 when filling a hole
  -  [#3431](https://github.com/agda/agda/issues/3431): Rewrite rule doesn't fire during conversion checking
  -  [#3434](https://github.com/agda/agda/issues/3434): Regression related to instance resolution
  -  [#3435](https://github.com/agda/agda/issues/3435): Performance regression
  -  [#3439](https://github.com/agda/agda/issues/3439): Setω doesn’t respect --type-in-type
  -  [#3441](https://github.com/agda/agda/issues/3441): Generate Level expressions with fewer parentheses
  -  [#3442](https://github.com/agda/agda/issues/3442): Support GHC 8.6.3
  -  [#3443](https://github.com/agda/agda/issues/3443): "internal error" in Agda of December 7, 2018
  -  [#3444](https://github.com/agda/agda/issues/3444): `Setup.hs` is not generating the interface files
  -  [#3445](https://github.com/agda/agda/issues/3445): case splitting attempts to shadow constructor
  -  [#3451](https://github.com/agda/agda/issues/3451): The --no-sized-types option is broken
  -  [#3452](https://github.com/agda/agda/issues/3452): Case split on irrelevant argument goes through but is later rejected
  -  [#3454](https://github.com/agda/agda/issues/3454): Highlighting for incomplete pattern matching should be above highliting for non-exact split
  -  [#3456](https://github.com/agda/agda/issues/3456): [ new ] Injectivity of prim(NatToChar/StringToList)
  -  [#3461](https://github.com/agda/agda/issues/3461): Macro loop
  -  [#3463](https://github.com/agda/agda/issues/3463): Impossible to give certain instance arguments by name?
  -  [#3466](https://github.com/agda/agda/issues/3466): two definitionally equal terms are not equal
  -  [#3471](https://github.com/agda/agda/issues/3471): Can't install via cabal-install on current Haskell Platform
  -  [#3480](https://github.com/agda/agda/issues/3480): Parse error at EOF should be reported before EOF (especially if there is a long comment before EOF)
  -  [#3483](https://github.com/agda/agda/issues/3483): Internal error at TypeChecking/Monad/Signature.hs:732
  -  [#3485](https://github.com/agda/agda/issues/3485): [ warnings ] for empty primitive blocks
  -  [#3491](https://github.com/agda/agda/issues/3491): Internal error src/full/Agda/TypeChecking/Rules/LHS.hs:294 after pattern matching
  -  [#3498](https://github.com/agda/agda/issues/3498): Internal error in activateLoadedFileCache
  -  [#3501](https://github.com/agda/agda/issues/3501): Case split in let clause causes internal error
  -  [#3503](https://github.com/agda/agda/issues/3503): Internal error in BasicOps
  -  [#3514](https://github.com/agda/agda/issues/3514): Accidential language change in 2.5.3: hiding is now part of name when resolving hidden argument insertion
  -  [#3517](https://github.com/agda/agda/issues/3517): Option consistency checking bug
  -  [#3518](https://github.com/agda/agda/issues/3518): Performance regression
  -  [#3521](https://github.com/agda/agda/issues/3521): Documentation: fixes a plural issue in copatterns
  -  [#3526](https://github.com/agda/agda/issues/3526): Do not generate trivially impossible clause when case-splitting
  -  [#3533](https://github.com/agda/agda/issues/3533): [ fix #3526 ] Remove trivially impossible clauses from case-split
  -  [#3534](https://github.com/agda/agda/issues/3534): Problem finding higher-order instances
  -  [#3536](https://github.com/agda/agda/issues/3536): Patternmatching on coinductive record fields breaks
  -  [#3544](https://github.com/agda/agda/issues/3544): internal error @ TypeChecking/Forcing.hs:227
  -  [#3548](https://github.com/agda/agda/issues/3548): [ new ] Add support for compiling literate Org documents
  -  [#3554](https://github.com/agda/agda/issues/3554): Type checker explosion
  -  [#3561](https://github.com/agda/agda/issues/3561): fix typo: "FreBSD" => "FreeBSD"
  -  [#3566](https://github.com/agda/agda/issues/3566): Missing name when printing type of definition of a record
  -  [#3578](https://github.com/agda/agda/issues/3578): Pattern matching unifier normalizes too much
  -  [#3586](https://github.com/agda/agda/issues/3586): Internal error in ConcreteToAbstract.hs:2217
  -  [#3590](https://github.com/agda/agda/issues/3590): Superlinear time required for simple code
  -  [#3597](https://github.com/agda/agda/issues/3597): Agda loops on simple code with a record and a hole
  -  [#3600](https://github.com/agda/agda/issues/3600): Size solver complains, explicit sizes work
  -  [#3610](https://github.com/agda/agda/issues/3610): Support GHC 8.6.4
  -  [#3621](https://github.com/agda/agda/issues/3621): performance problem
  -  [#3631](https://github.com/agda/agda/issues/3631): Performance with --no-universe-polymorphism
  -  [#3638](https://github.com/agda/agda/issues/3638): Rewrite rules do not fire in goal normalization in parametrized module
  -  [#3639](https://github.com/agda/agda/issues/3639): Argument to function created by tactic is lost
  -  [#3640](https://github.com/agda/agda/issues/3640): Polarity: Size index check crashes due to wrong parameter number calculation
  -  [#3641](https://github.com/agda/agda/issues/3641): Remove old compiler pragmas
  -  [#3648](https://github.com/agda/agda/issues/3648): Agda could fail to build if a .agda-lib file exists in a parent directory
  -  [#3651](https://github.com/agda/agda/issues/3651): internal error ghc backend
  -  [#3657](https://github.com/agda/agda/issues/3657): Disable compilation with Windows and GHC 8.6.3
  -  [#3678](https://github.com/agda/agda/issues/3678): Two out-of-scope variables are given the same name
  -  [#3687](https://github.com/agda/agda/issues/3687): Show module contents (C-c C-o) prints garbled names in clause