Idris 0.9.7 released

A new version of Idris, 0.9.7, has been released on hackage. There are only a few user visible changes.

  • implicit keyword, for implicit type conversion
  • Added Effects package, accessed with -p effect
  • Primitives for 8,16,32 and 64 bit integers

There is a small number of internal changes, some of them very large:

  • Changed unification so that it keeps track of failed constraints in case later information helps to resolve them
  • Distinguishing parameters and indices in data types
  • Faster termination/coverage checking
  • Split ‘javascript’ target into ‘javascript’ and ‘node’

Thanks to everyone who has helped put this release together.

As always, please report any problems on the github issue tracker. Also, do let us know how you get on in general either via the mailing list or the #idris channel on irc.freenode.net.

Idris 0.9.6 released

A new version of Idris, 0.9.6, has been released on hackage. This release has many updates and improvements. User visible changes are:

  • The type of types is now Type rather than Set
  • Forward declarations of data now allowed
    • supporting induction recursion and mutually recursive data
  • Type inference of definitions in where clauses
    • Provided that the type can be completely determined from the first
      application of the function (in the top level definition)
  • mutual blocks added
    • effect is to elaborate all types of declarations in the block before elaborating their definitions
    • allows inductive-recursive definitions
  • Expression inspected by with clause now abstracted from the goal (i.e. “magic” with)
  • Implicit arguments will be added automatically only if their initial letter is lower case, or they are in a using declaration
  • Added documentation comments (Haddock style) and :doc REPL command
  • Pattern matching on strings, big integers and characters
  • Added System.Concurrency modules
  • Added postulate declarations
  • Allow type annotations on let tactic
  • JavaScript generation, with --target javascript option

Internal changes:

  • Separate inlining methods at compile-time and run-time
  • Fixed nested parameters blocks
  • Improve efficiency of elaborator by:
    • only normalising when necessary
    • reducing backtracking with resolving ambiguities
  • Better compilation of case trees

Thanks to everyone who has helped put this release together.

As always, please report any problems on the github issue tracker. Also, do let us know how you get on in general either via the mailing list or the #idris channel on irc.freenode.net.

Idris 0.9.5 released

Idris version 0.9.5 has been released on Hackage. To install, run cabal update and type cabal install idris. This release includes a new termination checker, coinduction, much improved compilation and code generation through more aggressive erasure and inlining, as well as several minor additions and fixes.

It includes the following user visible changes:

  • Added codata declarations
    • as data declarations, but constructor arguments are evaluated lazily
    • functions which return a codata type do not reduce at compile time
  • New termination checker supporting mutually recursive definitions.
  • Added parameters blocks
  • Allow local data definitions in where blocks
  • Added %default directive to declare total-by-default or partial-by-default for functions, and a corresponding partial reserved word to mark functions which are allowed to be partial.
  • Command line options --total and --partial to declare total or partial by default.
  • Command line option --warnpartial for flagging all undeclared partial functions, without error.
  • Added :load command to REPL, for loading a new file
  • Added :module command to REPL, for adding modules
  • Renamed library modules (now have initial capital)

The internal changes are:

  • Added collapsing optimisation and more aggressive erasure
  • Several improvements and fixes to unification

Thanks to everyone who has helped put this release together.

As always, please report any problems on the github issue tracker. Also, do let us know how you get on in general either via the mailing list or the #idris channel on irc.freenode.net.

Idris 0.9.4 released

Idris version 0.9.4 has been released on Hackage. To install, run cabal update and type cabal install idris. This is primarily a bug fix release, to correct some teething problems with the new compiler back end.

It includes the following user visible changes:

  • Simple packaging system (see documentation)
  • Added --dumpc flag for displaying generated code

Internal changes:

  • Improve overloading resolution (especially where this is a type error)
  • Various important bug fixes with evaluation and compilation
  • More aggressive compile-time evaluation

As always, please report any problems on the github issue tracker – I will catch up with what is on there eventually! Also, do let me know how you get on in general either via the mailing list or the #idris channel on irc.freenode.net.

Idris 0.9.3.1 released

A new version of Idris has been released on hackage. To install, run cabal update and type cabal install idris. To learn more, see the tutorial and FAQ. The user visible changes are:

  • Added binding forms to syntax rules
  • Named class instances
  • Added ‘:set’ command, with options ‘errorcontext’ for displaying local variables in scope when a unification error occurs, and ‘showimplicits’ for displaying elaborated terms in full
  • Added ‘–errorcontext’ command line switch
  • Added ‘:proofs’ and ‘:rmproofs’ commands
  • Various minor REPL improvements and fixes

The internal changes are:

  • Completely new run time system (not based on Epic or relying on Boehm GC)
  • Normalise before forcing to catch more forceable arguments
  • Types no longer exported in normal form
  • Try to resolve overloading by inspecting types, rather than full type checking

Enjoy! Please report any problems on the github issue tracker.

Idris 0.9.2 released

A new version of Idris has been released on hackage. To install, run cabal update and type cabal install idris. To learn more, see the tutorial and FAQ. The tutorial has also been updated.

This version is mostly a bug fix release, with some minor additions to the language. The user visible changes are:

  • backtick notation added: x `foo` y is equivalent to foo x y
  • case expressions now allowed in type signatures
  • Library extensions in prelude.vect, prelude.algebra and prelude.heap
  • malloc and trace_malloc added to builtins, for low level memory management

The internal changes are:

  • Some type class resolution fixes
  • Performance improvements in resolving overloading and type classes
  • Several minor bug fixes

There will no doubt be more bugs. As usual, if you find any, please do not hesitate to contact Edwin Brady (ecb10 at st-andrews dot ac dot uk).

Idris 0.9.1 released

A new version of Idris has been released on hackage. To install, run cabal update and type cabal install idris. To learn more, see the tutorial and FAQ. The tutorial has also been updated.

This version adds some new features, fixes several bugs and has a number of performance improvements. The user visible changes are:

  • DSL notation, for overloading lambda and let bindings
  • Dependent records, with projection and update
  • Totality checking, and total keyword
  • Auto implicit arguments, and default argument values {auto n : T} and {default val n : T}
  • Overlapping type class instances disallowed
  • Many extensions to prelude.nat and prelude.list libraries (mostly thanks to Dominic Mulligan)
  • New libraries: control.monad.identity, control.monad.state
  • Small improvements in error reporting

The internal changes are:

  • Faster compilation (only compiling names which are used)
  • Better type class resolution
  • Lots of minor bug fixes

There will no doubt be bugs. If you find any, please do not hesitate to contact Edwin Brady (ecb10 at st-andrews dot ac dot uk).

Idris 0.9.0 released

A new version of Idris has been released on hackage. To install, run cabal update and type cabal install idris. To learn more, see the tutorial and FAQ.

This version is a complete rewrite. The user visible changes are:

  • New proof/tactics syntax
  • New syntax for pairs/dependent pairs
  • Indentation-significant syntax
  • Added type classes
  • Added where clauses
  • Added case expressions, pattern matching let and lambda
  • Added monad comprehensions
  • Added cumulativity and universe checking
  • Ad-hoc name overloading, resolved by type or explicit namespace
  • Modules (Haskell-style)
  • public, abstract and private access to functions and types
  • Improved interactive environment
  • Replaced ‘do using’ with Monad class
  • Extended syntax macros

The internal changes are:

  • Everything :-). Most importantly, all definitions (functions, classes and instances) are now elaborated to a core language consisting of top level, fully explicit, data declarations and pattern matching definitions, which are verified by a minimal type checker.

This is the first release of a complete reimplementation. There will therefore, no doubt, be bugs. If you find any, please do not hesitate to contact Edwin Brady (ecb10 at st-andrews dot ac dot uk).