2019-06-24 15:05:19 +03:00
Idris 2
=======
This is a pre-alpha implementation of Idris 2, the successor to Idris.
2019-07-22 18:15:51 +03:00
*** Please note: To build, these requires Idris version 1.3.2 ** *
2019-07-17 12:46:28 +03:00
2019-06-24 15:05:19 +03:00
Idris 2 is mostly backwards compatible with Idris 1, with some minor
exceptions. The most notable user visible differences, which might cause Idris
1 programs to fail to type check, are:
+ Unbound implicit arguments are always erased, so it is a type error to
attempt to pattern match on one.
2019-06-24 21:31:11 +03:00
+ Simplified resolution of ambiguous names, which might mean you need to
explicitly disambiguate more often. As a general rule, Idris 2 will be able
to disambiguate between names which have different concrete return types
2019-07-09 01:05:01 +03:00
(such as data constructors), or which have different concrete argument
2019-07-01 14:43:02 +03:00
types (such as record projections). It may struggle to resolve ambiguities
if one name requires an interface to be resolved.
2019-06-24 15:05:19 +03:00
+ Minor differences in the meaning of export modifiers `private` , `export` ,
and `public export` , which now refer to visibility of names from other
*namespaces* rather than visibility from other *files* .
+ Module names must match the filename in which they are defined (unless
the module's name is "Main").
+ Anything which uses a `%language` pragma in Idris 1 is likely to be different.
Notably, elaborator reflection will exist, but most likely in a slightly
different form because the internal details of the elaborator are different.
+ The `Prelude` is much smaller (and easier to replace with an alternative).
Watch this space for more details and the rationale for the changes, as I
get around to writing it...
Summary of new features:
+ A core language based on "Quantitative Type Theory" which allows explicit
annotation of erased types, and linear types.
+ `let` bindings are now more expressive, and can be used to define pattern
matching functions locally.
+ Names which are in scope in a type are also always in scope in the body of
the corresponding definition.
+ Better inference. Holes are global to a source file, rather than local to
a definition, meaning that some holes can be left in function types to be
inferred by the type checker. This also gives better inference for the types
of `case` expressions, and means fewer annotations are needed in interface
declarations.
+ Better type checker implementation which minimises the need for compile
time evaluation.
+ New Chez Scheme based back end which both compiles and runs faster than the
default Idris 1 back end. (Also, optionally, Chicken Scheme and Racket can
be used as targets).
+ Everything works faster :).
A significant change in the implementation is that there is an intermediate
language `TTImp` , which is essentially a desugared Idris, and is cleanly
separated from the high level language which means it is potentially usable
as a core language for other high level syntaxes.
Installation
============
To build and install what exists of it so far:
+ Optionally, set the `PREFIX` in `Makefile`
+ `make idris2`
+ `make install`
You'll need to set your `PATH` to `$PREFIX/bin`
You may also want to set `IDRIS_CC` to `clang` , since this seems to build
the generated C significantly faster.
Note: If you edit `idris2.ipkg` to use the `opts` with optimisation set
(`--cg-opt -O2`) you'll find it runs about twice as fast, at the cost of
taking a couple of minutes to generate the `idris2` executable.
You can check that building succeeded by running
- `make test`
I make no promises how well this works yet, but you are welcome to have a
play. Good luck :).
Information about external dependencies are presented in [INSTALL.md ](INSTALL.md ).
Things still missing
====================
2019-07-12 10:32:36 +03:00
+ Some high level syntax, notably idiom brackets
2019-06-24 15:05:19 +03:00
+ 'using' blocks
2019-07-08 19:10:47 +03:00
+ Cumulativity (so we currently have Type : Type! Bear that in mind when you
think you've proved something :))
2019-06-24 15:05:19 +03:00
+ 'rewrite' doesn't yet work on dependent types
+ Some details of 'with' not yet done (notably recursive with call syntax)
+ Parts of the ide-mode, particularly syntax highlighting
+ Documentation strings and HTML documentation generation
+ ':search' and ':apropos' at the REPL
+ The rest of this "Things still missing" list
2019-07-18 22:06:42 +03:00
Talks
=====
2019-12-18 23:37:50 +03:00
[![Idris 2 - Type-driven Development of Idris (Curry On - London 2019) ](https://img.youtube.com/vi/DRq2NgeFcO0/0.jpg )](https://www.youtube.com/watch?v=DRq2NgeFcO0 "Idris 2 - Type-driven Development of Idris (Curry On - London 2019)")