Skip to content

Tags: bryant/Idris-dev

Tags

v0.9.12

Toggle v0.9.12's commit message
New in 0.9.12:

--------------

* Proof search now works for metavariables in types, giving some interactive
  type inference.
* New 'Lazy' type, replacing laziness annotations.
* JavaScript and Node codegen now understand the %include directive.
* Concept of 'null' is now understood in the JavaScript and Node codegen.
* Lots of performance patches for generated JavaScript.
* New commands :eval (:e) and :type (:t) in the prover, which either normalise
  or show the type of expressions.
* Allow type providers to return postulates in addition to terms.
* Syntax for dealing with match failure in <- and pattern matching let.
* New syntax for inline documentation. Documentation starts with |||, and
  arguments are documented by preceding their name with @. Example:
  ||| Add two natural numbers
  ||| @ n the first number (examined by the function)
  ||| @ m the second number (not examined)
  plus (n, m : Nat) -> Nat
* Allow the auto-solve behaviour in the prover to be disabled, for easier
  debugging of proof automation. Use ":set autosolve" and ":unset autosolve".
* Updated 'effects' library
* New :apropos command at REPL to search documentation, names, and types
* Unification errors are now slightly more informative
* Support mixed induction/coinduction with 'Inf' type
* Add 'covering' function option, which checks whether a function and all
  descendants cover all possible inputs

v0.9.11

Toggle v0.9.11's commit message
Changes since previous version

------------------------------

* Agda-style equational reasoning (in Syntax.PreorderReasoning)
* 'case' construct now abstracts over the scrutinee in its type
* Added label type 'name (equivalent to the empty type).
  This is intended for field/effect disambiguation. "name" can be any
  valid identifier. Two labels are definitionally equal if they have the
  same name.
* General improvements in error messages, especially %error_reverse
  annotation, which allows a hint as to how to display a term in error
  messages
* --ideslave mode now transmits semantic information about many of the
  strings that it emits, which can be used by clients to implement
  semantic highlighting like that of the REPL. This has been implemented
  in the Emacs mode and the IRC bot, which can serve as examples.
* New expression form: with NAME EXPR privileges the namespace NAME
  when disambiguating overloaded names. For example, it is possible to
  write "with Vect [1,2,3]" at the REPL instead of "the (Vect _ _) [1,2,3]",
  because the Vect constructors are defined in a namespace called Vect.
* assert_smaller internal function, which marks an expression as smaller than
  a pattern for use in totality checking.
  e.g. "assert_smaller (x :: xs) (f xs)" asserts that "f xs" will always be
  structurally smaller than "(x :: xs)"
* assert_total internal function, which marks a subexpression as assumed to
  be total, e.g "assert_total (tail (x :: xs))".
* Terminal width is automatically detected if Idris is compiled with curses
  support. If curses is not available, automatic mode assumes 80 columns.
* Changed argument order for Prelude.Either.either.
* Experimental 'neweffects' library, intended to replace 'effects' in the
  next release.

Internal changes

* Faster elaboration
* Smaller .ibc files
* Pretty-printer now used for all term output

v0.9.10

Toggle v0.9.10's commit message
Hackage release 0.9.10

Changes since previous release:

* Type classes now implemented as dependent records, meaning that method
  types may now depend on earlier methods.
* More flexible class instance resolution, so that function types and lambda
  expressions can be made instances of a type class.
* Add !expr notation for implicit binding of intermediate results in
  monadic/do/etc expressions.
* Extend Effects package to cope with possibly failing operations, using
  "if_valid", "if_error", etc.
* At the REPL, "it" now refers to the previous expression.
* Semantic colouring at the REPL. Turn this off with --nocolour.
* Some prettifying of error messages.
* The contents of ~/.idris/repl/init are run at REPL start-up.
* The REPL stores a command history in ~/.idris/repl/history.
* The [a..b], [a,b..c], [a..], and [a,b..] syntax now pass the totality
  checker and can thus be used in types. The [x..] syntax now returns an
  actually infinite stream.
* Add '%reflection' option for functions, for compile-time operations on
  syntax.
* Add expression form 'quoteGoal x by p in e' which applies p to the expected
  expression type and binds the result to x in the scope e.
* Performance improvements in Strings library.
* Library reorganisation, separated into prelude/ and base/.

Internal changes

* New module/dependency tree checking.
* New parser implementation with more precise errors.
* Improved type class resolution.
* Compiling Nat via GMP integers.
* Performance improvements in elaboration.
* Improvements in termination checking.
* Various REPL commands to support interactive editing, and a client/server
  mode to allow external invocation of REPL commands.