7.7 KiB
Changes since Idris 2 v0.2.1
Library changes:
- Added
Data.HVect
incontrib
, for heterogeneous vectors.
Command-line options changes:
- Added
--color
and--no-color
options for colored terminal output. Color is enabled by default. - Added
--console-width <auto|n>
option for printing margins. By default theauto
option is selected, the result is that the compiler detects the current terminal width and sets it as the option value, otherwise a user value can be provided. An explicit0
has the effect of simulating a terminal with unbounded width.
Compiler changes:
-
Added new syntax for named applications and the bind-all-explicits pattern:
f {x [= t], x [= t], ...}
f {x [= t], x [= t], ..., _}
f {}
-
Added new syntax for record updates:
{x := t, x $= t, ...}
-
Added primitives to the parsing library used in the compiler to get more precise boundaries to the AST nodes
FC
. -
New experimental
refc
code generator, which generates C with reference counting.
REPL/IDE mode changes:
- Added
:color (on|off)
option for colored terminal output. - Added
:consolewidth (auto|n)
option for printing margins. Mirrors the command line option.
Changes since Idris 2 v0.2.0
Language changes:
Bits8
,Bits16
,Bits32
andBits64
primitive types added, with:Num
,Eq
,Ord
andShow
implementations.- Casts from
Integer
, for literals - Casts to
Int
(exceptBits64
which might not fit),Integer
andString
- Passed to C FFI as
unsigned
- Primitives added in
Data.Buffer
- Elaborator reflection and quoting terms
- Requires extension
%language ElabReflection
- API defined in
Language.Reflection
, including functions for getting types of global names, constructors of data types, and adding new top level declarations - Implemented
%macro
function flag, to remove the syntactic noise of invoking elaborator scripts. This means the function must always be fully applied, and is run under%runElab
- Requires extension
- Add
import X as Y
- This imports the module
X
, adding aliases for the definitions in namespaceY
, so they can be referred to asY
.
- This imports the module
do
notation can now be qualified with a namespaceMyDo.do
opens ado
block where the>>=
operator used isMyDo.(>>=)
Library changes:
IO
operations in theprelude
andbase
libraries now use theHasIO
interface, rather than usingIO
directly.- Experimental
Data.Linear.Array
added tocontrib
, supporting mutable linear arrays with constant time read/write, convertible to immutable arrays with constant time read.- Anything in
Data.Linear
incontrib
, just like the rest ofcontrib
, should be considered experimental with the API able to change at any time! Further experiments inData.Linear
are welcome :).
- Anything in
- Experimental
Control.Linear.LIO
added tocontrib
, supporting computations which track the multiplicities of their return values, which allows linear resources to be tracked. - Added
Control.Monad.ST
, for update in-place viaSTRef
(which is likeIORef
, but can escape fromIO
). Also addedData.Ref
which provides an interface to bothIORef
andSTRef
. - Added
Control.ANSI
incontrib
, for usage of ANSI escape codes for text styling and cursor/screen control in terminals.
Command-line options changes:
- Removed
--ide-mode-socket-with
option.--ide-mode-socket
now accepts an optionalhost:port
argument. - Added options to override source directory, build directory and output
directory:
--source-dir
,--build-dir
,--output-dir
.- These options are also available as fields in the package description:
sourcedir
,builddir
,outputdir
.
- These options are also available as fields in the package description:
Compiler changes:
- It is now possible to create new backends with minimal overhead.
Idris.Driver
exposes the functionmainWithCodegens
that takes a list of codegens. The feature in documented here. - New code generators
node
andjavascript
.
REPL/IDE mode changes:
- Implemented
:module
command, to load a module during a REPL session. - Implemented
:doc
, which displays documentation for a name. - Implemented
:browse
, which lists the names exported by a namespace. - Added
:psnext
, which continues the previous proof search, looking for the next type correct expression- Correspondingly, added the IDE mode command
proof-search-next
(which takes no arguments)
- Correspondingly, added the IDE mode command
- Added
:gdnext
, which continues the previous program search, looking for the next type correct implementation- Correspondingly, added the IDE mode command
generate-def-next
(which takes no arguments)
- Correspondingly, added the IDE mode command
- Improved program search to allow deconstructing intermediate values, and in simple cases, the result of recursive calls.
Changes since Idris 2 v0.1.0
The implementation is now self-hosted. To initialise the build, either use
the bootstrapping version of Idris2
or build from the generated Scheme, using make bootstrap
.
Language changes:
total
,covering
andpartial
flags on functions now have an effect.%default <totality status>
has been implemented. By default, functions must be at leastcovering
- That is,
%default covering
is the default status.
- That is,
- Fields of records can be accessed (and updated) using the dot syntax,
such as
r.field1.field2
orrecord { field1.field2 = 42 }
. For details, see https://idris2.readthedocs.io/en/latest/reference/records.html - New function flag
%tcinline
which means that the function should be inlined for the purposes of totality checking (but otherwise not inlined). This can be used as a hint for totality checking, to make the checker look inside functions that it otherwise might not. - %transform directive, for declaring transformation rules on runtime expressions. Transformation rules are automatically added for top level implementations of interfaces.
- A %spec flag on functions which allows arguments to be marked for partial evaluation, following the rules from "Scrapping Your Inefficient Engine" (ICFP 2010, Brady & Hammond)
- To improve error messages, one can use
with NS.name <term>
orwith [NS.name1, NS.name2, ...] <term>
to disable disambiguation for the given names in<term>
. Example:with MyNS.(>>=) do ...
.
Library additions:
- Additional file management operations in
base
- New module in
base
for time (System.Clock
) - New modules in
contrib
for JSON (Language.JSON.*
); random numbers (System.Random
)
Compiler updates:
- Data types with a single constructor, with a single unerased arguments,
are translated to just that argument, to save repeated packing and unpacking.
(c.f.
newtype
in Haskell)- A data type can opt out of this behaviour by specifying
noNewtype
in its options list.noNewtype
allows code generators to apply special handling to the generated constructor/deconstructor, for a newtype-like data type, that would otherwise be optimised away.
- A data type can opt out of this behaviour by specifying
- 0-multiplicity constructor arguments are now properly erased, not just given a placeholder null value.
Other improvements:
- Various performance improvements in the typechecker:
- Noting which metavariables are blocking unification constraints, so that they only get retried if those metavariables make progress.
- Evaluating
fromInteger
at compile time.
- Extend Idris2's literate mode to support reading Markdown and OrgMode files. For more details see: https://idris2.readthedocs.io/en/latest/reference/literate.html
Changes since Idris 1
Everything :). For full details, see: https://idris2.readthedocs.io/en/latest/updates/updates.html