Edwin Brady has given a course on Dependently Typed Functional Programming in Idris at IT University, Copenhagen. Various course materials are now available:
- Lecture 1, Introduction, slides, video
- Lecture 2, Embedded DSLs, slides, video
- Lecture 3, Effect management, slides, video
- Lecture 4, Implementing Idris, slides, video
- Example code
- Exercises
A new version of Idris, 0.9.7, has been released on hackage. There are only a few user visible changes.
implicitkeyword, 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.
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
Typerather thanSet - Forward declarations of data now allowed
- supporting induction recursion and mutually recursive data
- Type inference of definitions in
whereclauses- Provided that the type can be completely determined from the first
application of the function (in the top level definition)
- Provided that the type can be completely determined from the first
-
mutualblocks added- effect is to elaborate all types of declarations in the block before elaborating their definitions
- allows inductive-recursive definitions
- Expression inspected by
withclause 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
usingdeclaration - Added documentation comments (Haddock style) and
:docREPL command - Pattern matching on strings, big integers and characters
- Added
System.Concurrencymodules - Added
postulatedeclarations - Allow type annotations on
lettactic - JavaScript generation, with
--target javascriptoption
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 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
codatadeclarations- as
datadeclarations, but constructor arguments are evaluated lazily - functions which return a
codatatype do not reduce at compile time
- as
- New termination checker supporting mutually recursive definitions.
- Added
parametersblocks - Allow local data definitions in where blocks
- Added
%defaultdirective to declare total-by-default or partial-by-default for functions, and a correspondingpartialreserved word to mark functions which are allowed to be partial. - Command line options
--totaland--partialto declare total or partial by default. - Command line option
--warnpartialfor flagging all undeclared partial functions, without error. - Added
:loadcommand to REPL, for loading a new file - Added
:modulecommand 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 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
--dumpcflag 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.
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` yis equivalent tofoo x y -
caseexpressions now allowed in type signatures - Library extensions in
prelude.vect,prelude.algebraandprelude.heap -
mallocandtrace_mallocadded tobuiltins, 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
totalkeyword - Auto implicit arguments, and default argument values
{auto n : T}and{default val n : T} - Overlapping type class instances disallowed
- Many extensions to
prelude.natandprelude.listlibraries (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).
A new tutorial is now available, describing the soon-to-be-released Idris version 0.9.