on master help sign in
Harmonisation of formatting for CHANGELOG.

The CHANGELOG used inconsistent formatting. CommonMark (aka markdown) has been increasingly used in recent CHANGELOG comments, so the CHANGELOG formatting has been harmonised around its use.

commit3e0b8add25de911ba2fd148610d0c3dc954c338d authorJan de Muijnck-Hughes <jfdm@st-andrews.ac.uk> dateWed 30 Mar 2016, 21:36 (11 years ago) parentbb4a84b
3 files changed+781−777
CHANGELOG−776 CHANGELOG.md+780 idris.cabal+1−1
CHANGELOGdeleted−776
@@ -1,776 +0,0 @@
1−New in 0.12:
2−============
3−
4−* Improved startup performance by reducing the processing of an already imported
5− module that has changed accessibility.
6−
7−* A limited set of command line options can be used to override
8− package declared options. Overridable options are currently,
9− logging level and categories, default totality check, warn reach,
10− IBC output folder, and idris path.
11−
12−* Remove deprecated options `--ideslave` and `--ideslave-socket`. These options
13− were replaced with `--ide-mode` and `--ide-mode-socket` in 0.9.17
14−
15−New in 0.11:
16−============
17−
18−Updated export rules
19−--------------------
20−
21−* The export rules are:
22− - 'private' means that the definition is not exported at all
23− - 'export' means that the top level type is exported, but not the
24− definition. In the case of 'data', this means the type constructor is
25− exported but not the data constructors.
26− - 'public export' means that the entire definition is exported.
27−* By default, names are 'private'. This can be altered with an %access
28− directive as before.
29−* Exported types can only refer to other exported names
30−* Publicly exported definitions can only refer to publicly exported names
31−
32−Improved C FFI
33−--------------
34−
35−* Idris functions can now be passed as callbacks to C functions or wrapped
36−in a C function pointer.
37−* C function pointers can be called.
38−* Idris can access pointers to C globals.
39−
40−Effects
41−-------
42−
43−* Effects can now be given in any order in effect lists (there is no need
44−for the ordering to be preserved in sub lists of effects)
45−
46−Elaborator reflection updates
47−-----------------------------
48−
49−* Datatypes can now be defined from elaborator reflection:
50− - declareDatatype adds the type constructor declaration to the context
51− - defineDatatype adds the constructors to the datatype
52− - To declare an inductive-recursive family, declare the types of the
53− function and the type constructor before defining the pattern-match
54− cases and constructors.
55−
56−Minor language changes
57−----------------------
58−
59−* The '[static]' annotation is changed to '%static' to be consistent with the
60− other annotations.
61−* Added '%auto_implicits' directive. The default is '%auto_implicits on'.
62− Placing '%auto_implicits off' in a source file means that after that
63− point, any implicit arguments must be bound, e.g.:
64− append : {n,m,a:_} -> Vect n a -> Vect m a -> Vect (n + m) a
65−
66− Only names which are used explicitly in the type need to be bound, e.g.:
67− Here : {x, xs : _} -> Elem x (x :: xs)
68−
69− In 'Here', there is no need to bind any of the variables in the type of
70− 'xs' (it could be e.g. List a or Vect n a; 'a' and 'n' will still be
71− implicitly bound).
72−
73− You can still implicitly bind with 'using':
74−
75− using (xs : Vect _ _)
76− data Elem : {a, n : _} -> a -> Vect n a -> Type where
77− Here : {x : _} -> Elem x (x :: xs)
78− There : {x, y : _} -> Elem x xs -> Elem x (y :: xs)
79−
80− However, note that *only* names which appear in *both* the using block
81− *and* the type being defined will be implicitly bound. The following will
82− therefore fail because 'n' isn't implicitly bound:
83−
84− using (xs : Vect n a)
85− bad : Elem x xs -> Elem x (y :: xs)
86−* `Sigma` has been renamed to `DPair`.
87−* Accessor functions for dependent pairs have been renamed to bring them into
88− line with standard accessor functions for pairs. The function `getWitness`
89− is now `fst`, and `getProof` is `snd`.
90−* File Modes expanded: Append, ReadWriteTruncate, and ReadAppend added,
91− Write is deprecated and renamed to WriteTruncate.
92−* C11 Extended Mode variations added to File Modes.
93−* More flexible holes.
94− Holes can now depend on other holes in a term (such as implicit arguments
95− which may be inferred from the definition of the hole).
96−* Programs with holes can now be compiled.
97− Attempting to evaluate an expression with a hole results in a run time error.
98−* Dependent pairs now can be specified using a telescope-style syntax, without
99− requirement of nesting, e.g. it is possible to now write the following:
100− (a : Type ** n : Nat ** Vect n a)
101−* Idris will give a warning if an implicit is bound automatically, but would
102− otherwise be a valid expressio if the name was used as a global
103−
104−External Dependencies
105−---------------------
106−
107−* Curses has been removed as an external dependancy.
108−
109−New in 0.10:
110−============
111−
112−* 'class' and 'instance' are now deprecated keywords. They have been
113− replaced by 'interface' and 'implementation' respectively. This is to
114− properly reflect their purpose.
115−* (/) operator moved into new Fractional interface.
116−* Idris' logging infrastructure has been categorised. Command line and repl
117− are available. For command line the option `--logging-categories CATS`
118− is used to pass in the categories. Here `CATS` is a colon separated quoted
119− string containing the categories to log. The REPL command is `logcats CATS`.
120− Where `CATS` is a whitespace separated list of categoriese. Default is for
121− all categories to be logged.
122−* New flag `--listlogcats` to list logging categories.`
123−
124−New in 0.9.20:
125−==============
126−
127−Language updates
128−----------------
129−
130−* Improved unification by implementing a pattern unification rule
131−* The syntax `{{n}} quotes n without resolving it, allowing short syntax
132− for defining new names. `{n} still quotes n to an existing name in scope.
133−* A new primitive operator prim__strSubstr for more efficient extraction of
134− substrings. External code generators should implement this.
135−* The previous syntax for tactic proofs and the previous interactive prover
136− are now deprecated in favour of reflected elaboration. They will be removed
137− at some point in the future.
138−* Changed scoping rules for unbound implicits: any name which would be a
139− valid unbound implicit is now *always* an unbound implicit. This is much
140− more resilient to changes in inputs, but does require that function names
141− be explicitly qualified when in argument position.
142−* Name binding in patterns follows the same rule as name binding for implicits
143− in types: names which begin with lower case letters, not applied to any
144− arguments, are treated as bound pattern variables.
145−* Added %deprecate directive, which gives a warning and a message when a
146− deprecated name is referenced.
147−
148−Library updates
149−---------------
150−
151−* The 'Neg' class now represents numeric types which can be negative. As
152− such, the (-) operator and 'abs' have been moved there from 'Num'.
153−* A special version of (-) on 'Nat' requires that the second argument is
154− smaller than or equal to the first. 'minus' retains the old behaviour,
155− returning Z if there is an underflow.
156−* The (+), (-), and (*) operations on Fin have been removed.
157−* New Logging Effects have been added to facilitate logging of effectful
158− programmes.
159−* Elaborator reflection is now a part of the prelude. It is no longer
160− necessary to import Language.Reflection.Elab.
161−* The `PERF` effect allows for simple performance metrics to be collected
162− from Effectful programs.
163−* Some constructors that never actually occurred have been removed from
164− the TT and Raw reflection datatypes in Language.Reflection.
165−* File IO operations (for example openFile/fread/fwrite) now return
166− 'Either FileError ty' where the return type was previously 'ty' to indicate
167− that they may fail.
168−
169−Tool updates
170−------------
171−* Records are now shown as records in :doc, rather than as the underlying
172− datatype
173−* iPKG files have a new option `pkgs` which takes a comma-separated list
174− of package names that the idris project depends on. This reduces bloat
175− in the `opts` option with multiple package declarations.
176−* iPKG files now allow `executable = "your filename here"` in addition to
177− the existing `executable = yourFilenameHere` style. While the unquoted
178− version is limited to filenames that look like namespaced Idris identifiers
179− (`your.filename.here`), the quoted version accepts any valid filename.
180−* Add definition command (\d in Vim, Ctrl-Alt-A in Atom, C-c C-s in Emacs) now
181− adds missing clauses if there is already a definition.
182−
183−Miscellaneous updates
184−---------------------
185−* Disable the deprecation warnings for %elim and old-style tactic scripts
186− with the --no-elim-deprecation-warnings and --no-tactic-deprecation-warnings
187− flags.
188−
189−
190−New in 0.9.19:
191−--------------
192−* The Idris Reference manual has been fleshed out with content originally found
193− on the GitHub wiki.
194−* The Show class has been moved into Prelude.Show and augmented with the method
195− showPrec, which allows correct parenthesization of showed terms. This comes
196− with the type Prec of precedences and a few helper functions.
197−* New REPL command :printerdepth that sets the pretty-printer to only descend to
198− some particular depth when printing. The default is set to a high number to
199− make it less dangerous to experiment with infinite structures. Infinite depth
200− can be set by calling :printerdepth with no argument.
201−* Compiler output shows applications of >>= in do-notation
202−* fromInteger i where i is an integer constant is now shown just as i in
203− compiler output
204−* An interactive shell, similar to the prover, for running reflected elaborator
205− actions. Access it with :elab from the REPL.
206−* New command-line option --highlight that causes Idris to save highlighting
207− information when successfully type checking. The information is in the same
208− format sent by the IDE mode, and is saved in a file with the extension ".idh".
209−* Highlighting information is saved by the parser as well, allowing it to highlight
210− keywords like "case", "of", "let", and "do"
211−* Use predicates instead of boolean equality proofs as preconditions
212− on List functions
213−* More flexible 'case' construct, allowing each branch to target different
214− types, provided that the case analysis does not affect the form of any
215− variable used in the right hand side of the case.
216−* Some improvements in interactive editing, particularly in lifting out
217− definitions and proof search.
218−* Moved System.Interactive, along with getArgs to the Prelude.
219−* Major improvements to reflected elaboration scripts, including the ability to run
220− them in a declaration context and many bug fixes.
221−* "decl syntax" rules to allow syntax extensions at the declaration level
222−* Experimental Windows support for console colours
223−
224−New in 0.9.18:
225−--------------
226−* GHC 7.10 compatibility
227−* Add support for bundled toolchains.
228−* Strings are now UTF8 encoded in the default back end
229−* Idris source files are now assumed to be in UTF8, regardless of locale
230− settings.
231−* Some reorganisation of primitives:
232− + Buffer and BitVector primitives have been removed (they were not
233− tested sufficiently, and lack a maintainer)
234− + Float has been renamed 'Double' (Float is defined in the Prelude for
235− compatibility)
236− + Externally defined primitives and operations now supported with
237− '%extern' directive, allowing back ends to define their own special
238− purpose primitives
239− + Ptr and ManagedPtr have been removed and replaced with external primitives
240−* Add %hint function annotation, which allows functions to be used as
241− hints in proof search for 'auto' arguments. Only functions which return
242− an instance of a data or record type are allowed as hints.
243−* Syntax rules no longer perform variable capture. Users of effects will
244− need to explicitly name results in dependent effect signatures instead
245− of using the default name "result".
246−* Pattern-matching lambdas are allowed to be impossible. For example,
247− Dec (2 = 3) can now be constructed with No $ \(Refl) impossible, instead of
248− requiring a separate lemma.
249−* Case alternatives are allowed to be impossible:
250− case Vect.Nil {a=Nat} of { (x::xs) impossible ; [] => True }
251−* The default Semigroup and Monoid instances for Maybe are now prioritised
252− choice, keeping the first success as Alternative does. The version that
253− collects successes is now a named instance.
254−* :exec REPL command now takes an optional expression to compile and run/show
255−* The return types of `Vect.findIndex`, `Vect.elemIndex` and
256− `Vect.elemIndexBy` were changed from `Maybe Nat` to `Maybe (Fin n)`
257−* A new :browse command shows the contents of a namespace
258−* `{n} is syntax for a quotation of the reflected representation of the name
259− "n". If "n" is lexically bound, then the resulting quotation will be for it,
260− whereas if it is not, then it will succeed with a quotation of the unique
261− global name that matches.
262−* New syntax for records that closely matches our other record-like structures:
263− type classes. See the updated tutorial for details.
264−* Records can be coinductive. Define coinductive records with the "corecord"
265− keyword.
266−* Type class constructors can be assigned user-accessible names. This is done
267− using the same syntax as record constructors.
268−* if ... then ... else ... is now built-in syntax instead of being defined in
269− a library. It is shown in REPL output and error messages, rather than its
270− desugaring.
271−* The desugaring of if ... then ... else ... has been renamed to ifThenElse from
272− boolElim. This is for consistency with GHC Haskell and scala-virtualized, and
273− to reflect that if-notation makes sense with non-Bool datatypes.
274−* Agda-style semantic highlighting is supported over the IDE protocol.
275−* Experimental support for elaborator reflection. Users can now script the
276− elaborator, for use in code generation and proof automation. This feature is
277− still under rapid development and is subject to change without notice. See
278− Language.Reflection.Elab and the %runElab constructs
279−
280−
281−New in 0.9.17:
282−--------------
283−* The --ideslave command line option has been replaced with a --ide-mode
284− command line option with the same semantics.
285−* A new tactic "claim N TY" that introduces a new hole named N with type TY
286−* A new tactic "unfocus" that moves the current hole to the bottom of the
287− hole stack
288−* Quasiquotation supports the generation of Language.Reflection.Raw terms
289− in addition to Language.Reflection.TT. Types are used for disambiguation,
290− defaulting to TT at the REPL.
291−* Language.Reflection.Quotable now takes an extra type parameter which
292− determines the type to be quoted to. Instances are provided to quote
293− common types to both TT and Raw.
294−* Library operators have been renamed for consistency with Haskell. In
295− particular, Applicative.(<$>) is now Applicative.(<*>) and (<$>) is
296− now an alias for Functor.map. Correspondingly, ($>) and (<$) have
297− been renamed to (<*) and (*>). The cascading effects of this rename
298− are that Algebra.(<*>) has been renamed to Algebra.(<.>) and
299− Matrix.(<.>) is now Matrix.(<:>).
300−* Binding forms in DSL notation are now given an extra argument: a
301− reflected representation of the name that the user chose.
302− Specifically, the rewritten lambda, pi, and let binders will now get
303− an extra argument of type TTName. This allows more understandable
304− dynamic errors in DSL code and more readable code generation results.
305−* DSL notation can now be applied with $
306−* Added FFI_Export type which allows Idris functions to be exportoed and
307− called from foreign code
308−* Instances can now have documentation strings.
309−* Type providers can have documentation strings.
310−* Unification errors now (where possible) contain information about provenance
311− of a type
312−* New REPL command ":core TM" that shows the elaborated form of TM along with
313− its elaborated type using the syntax of TT. IDE mode has a corresponding
314− command :elaborate-term for serialized terms.
315−* Effectful and IO function names for sending data to STDOUT have been
316− aligned, semantically.
317− + `print` is now for putting showable things to STDOUT.
318− + `printLn` is for putting showable things to STDOUT with a new line
319− + `putCharLn` for putting a single character to STDOUT, with a new line.
320−* Classes can now be annotated with 'determining parameters' to say which
321− must be available before resolving instances. Only determining parameters
322− are checked when checking for overlapping instances.
323−* New package 'contrib' containing things that are less mature or less used
324− than the contents of 'base'. 'contrib' is not available by default, so you
325− may need to add '-p contrib' to your .ipkg file or Idris command line.
326−* Arguments to class instances are now checked for injectivity.
327− Unification assumes this, so we need to check when instances are defined.
328−
329−New in 0.9.16:
330−--------------
331−* Inductive-inductive definitions are now supported (i.e. simultaneously
332− defined types where one is indexed by the other.)
333−* Implicits and type class constraints can now appear in scopes other than
334− the top level.
335−* Importing a module no longer means it is automatically reexported. A new
336− "public" modifier has been added to import statements, which will reexport
337− the names exported from that module.
338−* Implemented @-patterns. A pattern of the form x@p on the left hand side
339− matches p, with x in scope on the right hand side with value p.
340−* A new tactic sourceLocation that fills the current hole with the current
341− source code span, if this information is available. If not, it raises an
342− error.
343−* Better Unicode support for the JavaScript/Node codegen
344−* ':search' and ':apropos' commands can now be given optional package lists
345− to search.
346−* Vect, Fin and So moved out of prelude into base, in modules Data.Vect,
347− Data.Fin and Data.So respectively.
348−* Several long-standing issues resolved, particularly with pattern matching
349− and coverage checking.
350−* Modules can now have API documentation strings.
351−
352−New in 0.9.15:
353−--------------
354−* Two new tactics: skip and fail. Skip does nothing, and fail takes a string
355− as an argument and produces it as an error.
356−* Corresponding reflected tactics Skip and Fail. Reflected Fail takes a list
357− of ErrorReportParts as an argument, like error handlers produce, allowing
358− access to the pretty-printer.
359−* Stop showing irrelevant and inaccessible internal names in the interactive
360− prover.
361−* The proof arguments in the List library functions are now implicit and
362− solved automatically.
363−* More efficient representation of proof state, leading to faster elaboration
364− of large expressions.
365−* EXPERIMENTAL Implementation of uniqueness types
366−* Unary negation now desugars to "negate", which is a method of the Neg type class.
367− This allows instances of Num that can't be negative, like Nat, and it makes correct
368− IEEE Float operations easier to encode. Additionally, unary negation is now available
369− to DSL authors.
370−* The Java and LLVM backends have been factored out for separate maintenance. Now, the
371− compiler distribution only ships with the C and JavaScript backends.
372−* New REPL command :printdef displays the internal definition of a name
373−* New REPL command :pprint pretty-prints a definition or term with LaTeX or
374− HTML highlighting
375−* Naming of data and type constructors is made consistent across the standard
376− library (see #1516)
377−* Terms in `code blocks` inside of documentation strings are now parsed and
378− type checked. If this succeeds, they are rendered in full color in
379− documentation lookups, and with semantic highlighting for IDEs.
380−* Fenced code blocks in docs defined with the "example" attribute are rendered
381− as code examples.
382−* Fenced code blocks declared to be Idris code that fail to parse or type check now
383− provide error messages to IDE clients.
384−* EXPERIMENTAL support for partial evaluation (Scrapping your Inefficient
385− Engine style)
386−
387−New in 0.9.14:
388−--------------
389−* Tactic for case analysis in proofs
390−* Induction and case tactic now work on expressions
391−* Support for running tests for a package with the tests section of .ipkg files and the
392− --testpkg command-line option
393−* Clearly distinguish between type providers and postulate providers at the use site
394−* Allow dependent function syntax to be overridden in dsl blocks, similarly to
395− functions and let. The keyword for this is "pi".
396−* Updated 'effects' library, with simplified API
397−* All new JavaScript backend (avoids callstack overflows)
398−* Add support for %lib directive for NodeJS
399−* Quasiquotes and quasiquote patterns allow easier work with reflected terms.
400− `(EXPR) quasiquotes EXPR, causing the elaborator to be used to produce a reflected
401− version of it. Subterms prefixed with ~ are unquoted - on the RHS, they are reflected
402− terms to splice in, while on the LHS they are patterns.
403− A quasiquote expression can be given a goal type for the elaborator, which helps with
404− disambiguation. For instance, `(() : ()) quotes the unit constructor, while `(() : Type)
405− quotes the unit type.
406− Both goal types and quasiquote are typechecked in the global environment.
407−* Better inference of unbound implicits
408−
409−New in 0.9.13:
410−--------------
411−* IDE support for retrieving structured information about metavariables
412−* Experimental Bits support for JavaScript
413−* IdrisDoc: a Haddock- and JavaDoc-like HTML documentation generator
414−* Command line option -e (or --eval) to evaluate expressions without loading the
415− REPL. This is useful for writing more portable tests.
416−* Many more of the basic functions and datatypes are documented.
417−* Primitive types such as Int and String are documented
418−* Removed javascript lib in favor of idris-hackers/iQuery
419−* Specify codegen for :compile REPL command (e.g. :compile javascript program.js)
420−* Remove :info REPL command, subsume and enhance its functionality in the :doc command
421−* New (first class) nested record update/access syntax:
422− record { a->b->c = val } x -- sets field accessed by c (b (a x)) to val
423− record { a->b->c } x -- accesses field, equivalent to c (b (a x))
424−* The banner at startup can be suppressed by adding :set nobanner to the initialisation script.
425−* :apropos now accepts space-delimited lists of query items, and searches for the conjunction
426− of its inputs. It also accepts binder syntax as search strings - for instance, -> finds
427− functions.
428−* Totality errors are now treated as warnings until code generation time, when they become
429− errors again. This allows users to use the interactive editing features to fix totality
430− issues, but no programs that violate the stated assumptions will actually run.
431−* Added :makelemma command, which adds a new top level definition to solve
432− a metavariable.
433−* Extend :addclause to add instance bodies as well as definitions
434−* Reverse parameters to BoundedList -- now matches Vect, and is easier to instantiate classes.
435−* Move foldl into Foldable so it can be overridden.
436−* Experimental :search REPL command for finding functions by type
437−
438−Internal changes
439−
440−* New implementation of erasure
441−
442−New in 0.9.12:
443−--------------
444−
445−* Proof search now works for metavariables in types, giving some interactive
446− type inference.
447−* New 'Lazy' type, replacing laziness annotations.
448−* JavaScript and Node codegen now understand the %include directive.
449−* Concept of 'null' is now understood in the JavaScript and Node codegen.
450−* Lots of performance patches for generated JavaScript.
451−* New commands :eval (:e) and :type (:t) in the prover, which either normalise
452− or show the type of expressions.
453−* Allow type providers to return postulates in addition to terms.
454−* Syntax for dealing with match failure in <- and pattern matching let.
455−* New syntax for inline documentation. Documentation starts with |||, and
456− arguments are documented by preceding their name with @. Example:
457− ||| Add two natural numbers
458− ||| @ n the first number (examined by the function)
459− ||| @ m the second number (not examined)
460− plus (n, m : Nat) -> Nat
461−* Allow the auto-solve behaviour in the prover to be disabled, for easier
462− debugging of proof automation. Use ":set autosolve" and ":unset autosolve".
463−* Updated 'effects' library
464−* New :apropos command at REPL to search documentation, names, and types
465−* Unification errors are now slightly more informative
466−* Support mixed induction/coinduction with 'Inf' type
467−* Add 'covering' function option, which checks whether a function and all
468− descendants cover all possible inputs
469−
470−New in 0.9.11:
471−--------------
472−
473−* Agda-style equational reasoning (in Syntax.PreorderReasoning)
474−* 'case' construct now abstracts over the scrutinee in its type
475−* Added label type 'name (equivalent to the empty type).
476− This is intended for field/effect disambiguation. "name" can be any
477− valid identifier. Two labels are definitionally equal if they have the
478− same name.
479−* General improvements in error messages, especially %error_reverse
480− annotation, which allows a hint as to how to display a term in error
481− messages
482−* --ideslave mode now transmits semantic information about many of the
483− strings that it emits, which can be used by clients to implement
484− semantic highlighting like that of the REPL. This has been implemented
485− in the Emacs mode and the IRC bot, which can serve as examples.
486−* New expression form: with NAME EXPR privileges the namespace NAME
487− when disambiguating overloaded names. For example, it is possible to
488− write "with Vect [1,2,3]" at the REPL instead of "the (Vect _ _) [1,2,3]",
489− because the Vect constructors are defined in a namespace called Vect.
490−* assert_smaller internal function, which marks an expression as smaller than
491− a pattern for use in totality checking.
492− e.g. "assert_smaller (x :: xs) (f xs)" asserts that "f xs" will always be
493− structurally smaller than "(x :: xs)"
494−* assert_total internal function, which marks a subexpression as assumed to
495− be total, e.g "assert_total (tail (x :: xs))".
496−* Terminal width is automatically detected if Idris is compiled with curses
497− support. If curses is not available, automatic mode assumes 80 columns.
498−* Changed argument order for Prelude.Either.either.
499−* Experimental 'neweffects' library, intended to replace 'effects' in the
500− next release.
501−
502−Internal changes
503−
504−* Faster elaboration
505−* Smaller .ibc files
506−* Pretty-printer now used for all term output
507−
508−
509−New in 0.9.10:
510−--------------
511−
512−* Type classes now implemented as dependent records, meaning that method
513− types may now depend on earlier methods.
514−* More flexible class instance resolution, so that function types and lambda
515− expressions can be made instances of a type class.
516−* Add !expr notation for implicit binding of intermediate results in
517− monadic/do/etc expressions.
518−* Extend Effects package to cope with possibly failing operations, using
519− "if_valid", "if_error", etc.
520−* At the REPL, "it" now refers to the previous expression.
521−* Semantic colouring at the REPL. Turn this off with --nocolour.
522−* Some prettifying of error messages.
523−* The contents of ~/.idris/repl/init are run at REPL start-up.
524−* The REPL stores a command history in ~/.idris/repl/history.
525−* The [a..b], [a,b..c], [a..], and [a,b..] syntax now pass the totality
526− checker and can thus be used in types. The [x..] syntax now returns an
527− actually infinite stream.
528−* Add '%reflection' option for functions, for compile-time operations on
529− syntax.
530−* Add expression form 'quoteGoal x by p in e' which applies p to the expected
531− expression type and binds the result to x in the scope e.
532−* Performance improvements in Strings library.
533−* Library reorganisation, separated into prelude/ and base/.
534−
535−Internal changes
536−
537−* New module/dependency tree checking.
538−* New parser implementation with more precise errors.
539−* Improved type class resolution.
540−* Compiling Nat via GMP integers.
541−* Performance improvements in elaboration.
542−* Improvements in termination checking.
543−* Various REPL commands to support interactive editing, and a client/server
544− mode to allow external invocation of REPL commands.
545−
546−New in 0.9.9:
547−-------------
548−
549−* Apply functions by return type, rather than with arguments:
550− "t <== f" means "apply f with arguments such that it returns a value
551− of type t"
552−* Allow the result type of a rewrite to be specified
553−* Allow names to be attached to provisional definitions
554− lhs ?= {name} rhs -- generates a lemma called 'name' which makes the
555− types of the lhs and rhs match. {name} is optional - a unique name is
556− generated if it is absent.
557−* Experimental LLVM backend
558−* Added Data.HVect module
559−* Fix fromInteger to take an Integer, rather than an Int
560−* Integer literals for Fin
561−* Renamed O to Z, and fO to fZ
562−* Swapped Vect arguments, now Vect : Nat -> Type -> Type
563−* Added DecEq instances
564−* Add 'equiv' tactic, which rewrites a goal to an equivalent (convertible) goal
565−
566−Internal changes
567−
568−* Add annotation for unification traces
569−* Add 'mrefine' tactic for refining by matching against a type
570−* Type class resolution fixes
571−* Much faster coverage checking
572−
573−New in 0.9.8:
574−-------------
575−
576−User visible changes:
577−
578−* Added "rewrite ... in ..." construct
579−* Allow type class constraints in 'using' clauses
580−* Renamed EFF to EFFECT in Effect package
581−* Experimental Java backend
582−* Tab completion in REPL
583−* Dynamic loading of C libraries in the interpreter
584−* Testing IO actions at the REPL with :x command
585−* Improve rendering of :t
586−* Fixed some INTERNAL ERROR messages
587−
588−Internal changes:
589−
590−* Fix non-linear pattern checking
591−* Improved name disambiguation
592−* More flexible unification and elaboration of lambdas
593−* Various unification and totality checking bug fixes
594−
595−New in 0.9.7:
596−-------------
597−
598−User visible changes:
599−
600−* 'implicit' keyword, for implicit type conversion
601−* Added Effects package
602−* Primitives for 8,16,32 and 64 bit integers
603−
604−Internal changes:
605−
606−* Change unification so that it keeps track of failed constraints in case
607− later information helps to resolve them
608−* Distinguishing parameters and indices in data types
609−* Faster termination/coverage checking
610−* Split 'javascript' target into 'javascript' and 'node'
611−
612−New in 0.9.6:
613−-------------
614−
615−User visible changes:
616−
617−* The type of types is now 'Type' rather than 'Set'
618−* Forward declarations of data allowed
619− - supporting induction recursion and mutually recursive data
620−* Type inference of definitions in 'where' clauses
621− - Provided that the type can be completely determined from the first
622− application of the function (in the top level definition)
623−* 'mutual' blocks added
624− - effect is to elaborate all types of declarations in the block before
625− elaborating their definitions
626− - allows inductive-recursive definitions
627−* Expression inspected by 'with' clause now abstracted from the goal
628− - i.e. "magic" with
629−* Implicit arguments will be added automatically only if their initial
630− letter is lower case, or they are in a using declaration
631−* Added documentation comments (Haddock style) and ':doc' REPL command
632−* Pattern matching on strings, big integers and characters
633−* Added System.Concurrency modules
634−* Added 'postulate' declarations
635−* Allow type annotations on 'let' tactic
636−* EXPERIMENTAL JavaScript generation, with '--target javascript' option
637−
638−Internal changes:
639−
640−* Separate inlining methods at compile-time and run-time
641−* Fixed nested parameters blocks
642−* Improve efficiency of elaborator by:
643− - only normalising when necessary
644− - reducing backtracking with resolving ambiguities
645−* Better compilation of case trees
646−
647−New in 0.9.5:
648−-------------
649−
650−User visible changes:
651−
652−* Added codata
653− - as data declarations, but constructor arguments are evaluated lazily
654− - functions which return a codata type do not reduce at compile time
655−* Added 'parameters' blocks
656−* Allow local data definitions in where blocks
657−* Added '%default' directive to declare total-by-default or partial-by-default
658− for functions, and a corresponding "partial" reserved words to mark functions
659− as allowed to be partial. Also "--total" and "--partial" added as command
660− line options.
661−* Command line option "--warnpartial" for flagging all undeclared
662− partial functions, without error.
663−* New termination checker supporting mutually recursive definitions.
664−* Added ':load' command to REPL, for loading a new file
665−* Added ':module' command to REPL, for adding modules
666−* Renamed library modules (now have initial capital)
667−
668−Internal changes:
669−
670−* Several improvements and fixes to unification
671−* Added collapsing optimisation and more aggressive erasure
672−
673−New in 0.9.4:
674−-------------
675−
676−User visible changes:
677−
678−* Simple packaging system
679−* Added --dumpc flag for displaying generated code
680−
681−Internal changes:
682−
683−* Improve overloading resolution (especially where this is a type error)
684−* Various important bug fixes with evaluation and compilation
685−* More aggressive compile-time evaluation
686−
687−New in 0.9.3:
688−-------------
689−
690−User visible changes:
691−
692−* Added binding forms to syntax rules
693−* Named class instances
694−* Added ':set' command, with options 'errorcontext' for displaying local
695− variables in scope when a unification error occurs, and 'showimplicits'
696− for displaying elaborated terms in full
697−* Added '--errorcontext' command line switch
698−* Added ':proofs' and ':rmproofs' commands
699−* Various minor REPL improvements and fixes
700−
701−Internal changes:
702−
703−* Completely new run time system (not based on Epic or relying on Boehm GC)
704−* Normalise before forcing to catch more forceable arguments
705−* Types no longer exported in normal form
706−* Try to resolve overloading by inspecting types, rather than full type
707− checking
708−
709−New in 0.9.2:
710−-------------
711−
712−User visible changes:
713−
714−* backtick notation added: x `foo` y ==> foo x y
715−* case expressions allowed in type signatures
716−* Library extensions in prelude.vect and prelude.algebra
717−* malloc/trace_malloc added to builtins.idr
718−
719−Internal changes:
720−
721−* Some type class resolution fixes
722−* Several minor bug fixes
723−* Performance improvements in resolving overloading and type classes
724−
725−New in 0.9.1:
726−-------------
727−
728−User visible changes:
729−
730−* DSL notation, for overloading lambda and let bindings
731−* Dependent records, with projection and update
732−* Totality checking and 'total' keyword
733−* Auto implicits and default argument values {auto n : T}, {default val n : T}
734−* Overlapping type class instances disallowed
735−* Many extensions to prelude.nat and prelude.list libraries (mostly thanks to
736− Dominic Mulligan)
737−* New libraries: control.monad.identity, control.monad.state
738−* Small improvements in error reporting
739−
740−Internal changes:
741−
742−* Faster compilation (only compiling names which are used)
743−* Better type class resolution
744−* Lots of minor bug fixes
745−
746−0.1.x to 0.9.0:
747−
748−Complete rewrite. User visible changes:
749−
750−* New proof/tactics syntax
751−* New syntax for pairs/dependent pairs
752−* Indentation-significant syntax
753−* Added type classes
754−* Added where clauses
755−* Added case expressions, pattern matching let and lambda
756−* Added monad comprehensions
757−* Added cumulativity and universe checking
758−* Ad-hoc name overloading
759− - Resolved by type or explicit namespace
760−* Modules (Haskell-style)
761−* public, abstract and private access to functions and types
762−* Separate type-checking
763−* Improved interactive environment
764−* Replaced 'do using' with Monad class
765−* Extended syntax macros
766−
767−Internal changes:
768−
769−* Everything :-)
770−* All definitions (functions, classes and instances) are elaborated to top
771− level, fully explicit, data declarations and pattern matching definitions,
772− which are verified by a minimal type checker.
773−
774−This is the first release of a complete reimplementation. There will be bugs.
775−If you find any, please do not hesitate to contact Edwin Brady
776−(ecb10@st-andrews.ac.uk).
CHANGELOG.mdnew file+780
@@ -0,0 +1,780 @@
1+# New in 0.12:
2+
3+* Improved startup performance by reducing the processing of an already imported
4+ module that has changed accessibility.
5+
6+* A limited set of command line options can be used to override package declared
7+ options. Overridable options are currently, logging level and categories,
8+ default totality check, warn reach, IBC output folder, and idris path.
9+
10+* Remove deprecated options `--ideslave` and `--ideslave-socket`. These options
11+ were replaced with `--ide-mode` and `--ide-mode-socket` in 0.9.17
12+
13+# New in 0.11
14+
15+## Updated export rules
16+
17+* The export rules are:
18+ - 'private' means that the definition is not exported at all
19+ - 'export' means that the top level type is exported, but not the
20+ definition. In the case of 'data', this means the type constructor is
21+ exported but not the data constructors.
22+ - 'public export' means that the entire definition is exported.
23+* By default, names are 'private'. This can be altered with an %access directive
24+ as before.
25+* Exported types can only refer to other exported names
26+* Publicly exported definitions can only refer to publicly exported names
27+
28+## Improved C FFI
29+
30+* Idris functions can now be passed as callbacks to C functions or wrapped in a
31+ C function pointer.
32+* C function pointers can be called.
33+* Idris can access pointers to C globals.
34+
35+## Effects
36+
37+* Effects can now be given in any order in effect lists (there is no need for
38+ the ordering to be preserved in sub lists of effects)
39+
40+## Elaborator reflection updates
41+
42+* Datatypes can now be defined from elaborator reflection:
43+ - declareDatatype adds the type constructor declaration to the context
44+ - defineDatatype adds the constructors to the datatype
45+ - To declare an inductive-recursive family, declare the types of the function
46+ and the type constructor before defining the pattern-match cases and
47+ constructors.
48+
49+## Minor language changes
50+
51+* The `[static]` annotation is changed to `%static` to be consistent with the
52+ other annotations.
53+* Added `%auto_implicits` directive. The default is `%auto_implicits on`.
54+ Placing `%auto_implicits off` in a source file means that after that point,
55+ any implicit arguments must be bound, e.g.:
56+
57+ ```
58+ append : {n,m,a:_} -> Vect n a -> Vect m a -> Vect (n + m) a
59+ ```
60+
61+ Only names which are used explicitly in the type need to be bound, e.g.:
62+
63+ ```
64+ Here : {x, xs : _} -> Elem x (x :: xs)
65+ ```
66+
67+ In `Here`, there is no need to bind any of the variables in the type of `xs`
68+ (it could be e.g. `List a` or `Vect n a`; `a` and `n` will still be implicitly
69+ bound).
70+
71+ You can still implicitly bind with 'using':
72+
73+ ```
74+ using (xs : Vect _ _)
75+ data Elem : {a, n : _} -> a -> Vect n a -> Type where
76+ Here : {x : _} -> Elem x (x :: xs)
77+ There : {x, y : _} -> Elem x xs -> Elem x (y :: xs)
78+ ```
79+
80+ However, note that *only* names which appear in *both* the using block
81+ *and* the type being defined will be implicitly bound. The following will
82+ therefore fail because 'n' isn't implicitly bound:
83+
84+ ```
85+ using (xs : Vect n a)
86+ bad : Elem x xs -> Elem x (y :: xs)
87+ ```
88+
89+* `Sigma` has been renamed to `DPair`.
90+* Accessor functions for dependent pairs have been renamed to bring them into
91+ line with standard accessor functions for pairs. The function `getWitness` is
92+ now `fst`, and `getProof` is `snd`.
93+* File Modes expanded: Append, ReadWriteTruncate, and ReadAppend added, Write is
94+ deprecated and renamed to WriteTruncate.
95+* C11 Extended Mode variations added to File Modes.
96+* More flexible holes. Holes can now depend on other holes in a term (such as
97+ implicit arguments which may be inferred from the definition of the hole).
98+* Programs with holes can now be compiled. Attempting to evaluate an expression
99+ with a hole results in a run time error.
100+* Dependent pairs now can be specified using a telescope-style syntax, without
101+ requirement of nesting, e.g. it is possible to now write the following:
102+
103+ ```
104+ (a : Type ** n : Nat ** Vect n a)
105+ ```
106+
107+* Idris will give a warning if an implicit is bound automatically, but would
108+ otherwise be a valid expressio if the name was used as a global
109+
110+## External Dependencies
111+
112+* Curses has been removed as an external dependency.
113+
114+# New in 0.10
115+
116+* `class` and `instance` are now deprecated keywords. They have been replaced by
117+ `interface` and `implementation` respectively. This is to properly reflect
118+ their purpose.
119+* `(/)` operator moved into new Fractional interface.
120+* Idris' logging infrastructure has been categorised. Command line and repl are
121+ available. For command line the option `--logging-categories CATS` is used to
122+ pass in the categories. Here `CATS` is a colon separated quoted string
123+ containing the categories to log. The REPL command is `logcats CATS`. Where
124+ `CATS` is a whitespace separated list of categoriese. Default is for all
125+ categories to be logged.
126+* New flag `--listlogcats` to list logging categories.
127+
128+# New in 0.9.20
129+
130+## Language updates
131+
132+* Improved unification by implementing a pattern unification rule
133+* The syntax `` `{{n}}`` quotes n without resolving it, allowing short syntax for
134+ defining new names. `` `{n}`` still quotes n to an existing name in scope.
135+* A new primitive operator `prim__strSubstr` for more efficient extraction of
136+ substrings. External code generators should implement this.
137+* The previous syntax for tactic proofs and the previous interactive prover are
138+ now deprecated in favour of reflected elaboration. They will be removed at
139+ some point in the future.
140+* Changed scoping rules for unbound implicits: any name which would be a valid
141+ unbound implicit is now *always* an unbound implicit. This is much more
142+ resilient to changes in inputs, but does require that function names be
143+ explicitly qualified when in argument position.
144+* Name binding in patterns follows the same rule as name binding for implicits
145+ in types: names which begin with lower case letters, not applied to any
146+ arguments, are treated as bound pattern variables.
147+* Added `%deprecate` directive, which gives a warning and a message when a
148+ deprecated name is referenced.
149+
150+## Library updates
151+
152+* The `Neg` class now represents numeric types which can be negative. As such,
153+ the `(-)` operator and `abs` have been moved there from `Num`.
154+* A special version of `(-)` on `Nat` requires that the second argument is
155+ smaller than or equal to the first. `minus` retains the old behaviour,
156+ returning `Z` if there is an underflow.
157+* The `(+)`, `(-)`, and `(*)` operations on Fin have been removed.
158+* New Logging Effects have been added to facilitate logging of effectful
159+ programmes.
160+* Elaborator reflection is now a part of the prelude. It is no longer necessary
161+ to import `Language.Reflection.Elab`.
162+* The `PERF` effect allows for simple performance metrics to be collected from
163+ Effectful programs.
164+* Some constructors that never actually occurred have been removed from the `TT`
165+ and `Raw` reflection datatypes in Language.Reflection.
166+* File `IO` operations (for example openFile/fread/fwrite) now return
167+ `Either FileError ty` where the return type was previously `ty` to indicate
168+ that they may fail.
169+
170+## Tool updates
171+
172+* Records are now shown as records in `:doc`, rather than as the underlying
173+ datatype
174+* iPKG files have a new option `pkgs` which takes a comma-separated list of
175+ package names that the idris project depends on. This reduces bloat in the
176+ `opts` option with multiple package declarations.
177+* iPKG files now allow `executable = "your filename here"` in addition to the
178+ existing `executable = yourFilenameHere` style. While the unquoted version is
179+ limited to filenames that look like namespaced Idris identifiers
180+ (`your.filename.here`), the quoted version accepts any valid filename.
181+* Add definition command (`\d` in Vim, `Ctrl-Alt-A` in Atom, `C-c C-s` in Emacs)
182+ now adds missing clauses if there is already a definition.
183+
184+## Miscellaneous updates
185+
186+* Disable the deprecation warnings for %elim and old-style tactic scripts with
187+ the `--no-elim-deprecation-warnings` and `--no-tactic-deprecation-warnings`
188+ flags.
189+
190+# New in 0.9.19
191+
192+* The Idris Reference manual has been fleshed out with content originally found
193+ on the GitHub wiki.
194+* The `Show` class has been moved into `Prelude.Show` and augmented with the
195+ method `showPrec`, which allows correct parenthesization of showed terms. This
196+ comes with the type `Prec` of precedences and a few helper functions.
197+* New REPL command `:printerdepth` that sets the pretty-printer to only descend
198+ to some particular depth when printing. The default is set to a high number to
199+ make it less dangerous to experiment with infinite structures. Infinite depth
200+ can be set by calling :printerdepth with no argument.
201+* Compiler output shows applications of `>>=` in do-notation
202+* `fromInteger i` where `i` is an integer constant is now shown just as `i` in
203+ compiler output
204+* An interactive shell, similar to the prover, for running reflected elaborator
205+ actions. Access it with `:elab` from the REPL.
206+* New command-line option `--highlight` that causes Idris to save highlighting
207+ information when successfully type checking. The information is in the same
208+ format sent by the IDE mode, and is saved in a file with the extension ".idh".
209+* Highlighting information is saved by the parser as well, allowing it to
210+ highlight keywords like `case`, `of`, `let`, and `do`.
211+* Use predicates instead of boolean equality proofs as preconditions on `List`
212+ functions
213+* More flexible 'case' construct, allowing each branch to target different
214+ types, provided that the case analysis does not affect the form of any
215+ variable used in the right hand side of the case.
216+* Some improvements in interactive editing, particularly in lifting out
217+ definitions and proof search.
218+* Moved `System.Interactive`, along with `getArgs` to the Prelude.
219+* Major improvements to reflected elaboration scripts, including the ability to run
220+ them in a declaration context and many bug fixes.
221+* `decl syntax` rules to allow syntax extensions at the declaration level
222+* Experimental Windows support for console colours
223+
224+# New in 0.9.18:
225+
226+* GHC 7.10 compatibility
227+* Add support for bundled toolchains.
228+* Strings are now UTF8 encoded in the default back end
229+* Idris source files are now assumed to be in UTF8, regardless of locale
230+ settings.
231+* Some reorganisation of primitives:
232+ + `Buffer` and `BitVector` primitives have been removed (they were not tested
233+ sufficiently, and lack a maintainer)
234+ + `Float` has been renamed `Double` (`Float` is defined in the Prelude for
235+ compatibility)
236+ + Externally defined primitives and operations now supported with `%extern`
237+ directive, allowing back ends to define their own special purpose primitives
238+ + `Ptr` and `ManagedPtr` have been removed and replaced with external primitives
239+* Add `%hint` function annotation, which allows functions to be used as hints in
240+ proof search for `auto` arguments. Only functions which return an instance of
241+ a data or record type are allowed as hints.
242+* Syntax rules no longer perform variable capture. Users of effects will need to
243+ explicitly name results in dependent effect signatures instead of using the
244+ default name `result`.
245+* Pattern-matching lambdas are allowed to be impossible. For example,
246+ `Dec (2 = 3)` can now be constructed with `No $ \(Refl)` impossible, instead of
247+ requiring a separate lemma.
248+* Case alternatives are allowed to be impossible:
249+
250+ ```
251+ case Vect.Nil {a=Nat} of { (x::xs) impossible ; [] => True }
252+ ```
253+
254+* The default `Semigroup` and `Monoid` instances for Maybe are now prioritised
255+ choice, keeping the first success as Alternative does. The version that
256+ collects successes is now a named instance.
257+* `:exec` REPL command now takes an optional expression to compile and run/show
258+* The return types of `Vect.findIndex`, `Vect.elemIndex` and `Vect.elemIndexBy`
259+ were changed from `Maybe Nat` to `Maybe (Fin n)`
260+* A new `:browse` command shows the contents of a namespace
261+* `` `{n}`` is syntax for a quotation of the reflected representation
262+ of the name `n`. If `n` is lexically bound, then the resulting
263+ quotation will be for it, whereas if it is not, then it will succeed
264+ with a quotation of the unique global name that matches.
265+* New syntax for records that closely matches our other record-like structures:
266+ type classes. See the updated tutorial for details.
267+* Records can be coinductive. Define coinductive records with the `corecord`
268+ keyword.
269+* Type class constructors can be assigned user-accessible names. This is done
270+ using the same syntax as record constructors.
271+* `if ... then ... else ...` is now built-in syntax instead of being defined in
272+ a library. It is shown in REPL output and error messages, rather than its
273+ desugaring.
274+* The desugaring of `if ... then ... else ...` has been renamed to `ifThenElse`
275+ from `boolElim`. This is for consistency with GHC Haskell and
276+ scala-virtualized, and to reflect that if-notation makes sense with non-Bool
277+ datatypes.
278+* Agda-style semantic highlighting is supported over the IDE protocol.
279+* Experimental support for elaborator reflection. Users can now script the
280+ elaborator, for use in code generation and proof automation. This feature is
281+ still under rapid development and is subject to change without notice. See
282+ Language.Reflection.Elab and the %runElab constructs
283+
284+# New in 0.9.17
285+
286+* The `--ideslave` command line option has been replaced with a `--ide-mode`
287+ command line option with the same semantics.
288+* A new tactic `claim N TY` that introduces a new hole named `N` with type `TY`
289+* A new tactic `unfocus` that moves the current hole to the bottom of the
290+ hole stack
291+* Quasiquotation supports the generation of `Language.Reflection.Raw` terms in
292+ addition to `Language.Reflection.TT`. Types are used for disambiguation,
293+ defaulting to `TT` at the REPL.
294+* `Language.Reflection.Quotable` now takes an extra type parameter which
295+ determines the type to be quoted to. Instances are provided to quote common
296+ types to both `TT` and `Raw`.
297+* Library operators have been renamed for consistency with Haskell. In
298+ particular, `Applicative.(<$>)` is now `Applicative.(<*>)` and `(<$>)` is now
299+ an alias for Functor.map. Correspondingly, ($>) and (<$) have been renamed to
300+ `(<*)` and `(*>)`. The cascading effects of this rename are that
301+ `Algebra.(<*>)` has been renamed to `Algebra.(<.>)` and `Matrix.(<.>)` is now
302+ `Matrix.(<:>)`.
303+* Binding forms in DSL notation are now given an extra argument: a reflected
304+ representation of the name that the user chose. Specifically, the rewritten
305+ `lambda`, `pi`, and `let` binders will now get an extra argument of type
306+ `TTName`. This allows more understandable dynamic errors in DSL code and more
307+ readable code generation results.
308+* DSL notation can now be applied with `$`
309+* Added `FFI_Export` type which allows Idris functions to be exportoed and
310+ called from foreign code
311+* Instances can now have documentation strings.
312+* Type providers can have documentation strings.
313+* Unification errors now (where possible) contain information about provenance
314+ of a type
315+* New REPL command `:core TM` that shows the elaborated form of `TM` along with
316+ its elaborated type using the syntax of `TT`. IDE mode has a corresponding
317+ command `:elaborate-term` for serialized terms.
318+* Effectful and IO function names for sending data to STDOUT have been
319+ aligned, semantically.
320+ + `print` is now for putting showable things to STDOUT.
321+ + `printLn` is for putting showable things to STDOUT with a new line
322+ + `putCharLn` for putting a single character to STDOUT, with a new line.
323+* Classes can now be annotated with 'determining parameters' to say which must
324+ be available before resolving instances. Only determining parameters are
325+ checked when checking for overlapping instances.
326+* New package `contrib` containing things that are less mature or less used than
327+ the contents of `base`. `contrib` is not available by default, so you may need
328+ to add `-p contrib` to your .ipkg file or Idris command line.
329+* Arguments to class instances are now checked for injectivity. Unification
330+ assumes this, so we need to check when instances are defined.
331+
332+# New in 0.9.16
333+
334+* Inductive-inductive definitions are now supported (i.e. simultaneously defined
335+ types where one is indexed by the other.)
336+* Implicits and type class constraints can now appear in scopes other than the
337+ top level.
338+* Importing a module no longer means it is automatically reexported. A new
339+ `public` modifier has been added to import statements, which will reexport the
340+ names exported from that module.
341+* Implemented `@`-patterns. A pattern of the form `x@p` on the left hand side
342+ matches `p`, with `x` in scope on the right hand side with value `p`.
343+* A new tactic sourceLocation that fills the current hole with the current
344+ source code span, if this information is available. If not, it raises an
345+ error.
346+* Better Unicode support for the JavaScript/Node codegen
347+* `:search` and `:apropos` commands can now be given optional package lists to
348+ search.
349+* `Vect`, `Fin` and `So` moved out of prelude into `base`, in modules
350+ `Data.Vect`, `Data.Fin` and `Data.So` respectively.
351+* Several long-standing issues resolved, particularly with pattern matching and
352+ coverage checking.
353+* Modules can now have API documentation strings.
354+
355+# New in 0.9.15
356+
357+* Two new tactics: `skip` and `fail`. Skip does nothing, and fail takes a string
358+ as an argument and produces it as an error.
359+* Corresponding reflected tactics `Skip` and `Fail`. Reflected `Fail` takes a
360+ list of `ErrorReportParts` as an argument, like error handlers produce,
361+ allowing access to the pretty-printer.
362+* Stop showing irrelevant and inaccessible internal names in the interactive
363+ prover.
364+* The proof arguments in the `List` library functions are now implicit and
365+ solved automatically.
366+* More efficient representation of proof state, leading to faster elaboration of
367+ large expressions.
368+* *EXPERIMENTAL* Implementation of uniqueness types
369+* Unary negation now desugars to `negate`, which is a method of the `Neg` type
370+ class. This allows instances of `Num` that can't be negative, like `Nat`, and
371+ it makes correct IEEE Float operations easier to encode. Additionally, unary
372+ negation is now available to DSL authors.
373+* The Java and LLVM backends have been factored out for separate
374+ maintenance. Now, the compiler distribution only ships with the C and
375+ JavaScript backends.
376+* New REPL command `:printdef` displays the internal definition of a name
377+* New REPL command `:pprint` pretty-prints a definition or term with LaTeX or
378+ HTML highlighting
379+* Naming of data and type constructors is made consistent across the standard
380+ library (see #1516)
381+* Terms in `code blocks` inside of documentation strings are now parsed and type
382+ checked. If this succeeds, they are rendered in full color in documentation
383+ lookups, and with semantic highlighting for IDEs.
384+* Fenced code blocks in docs defined with the "example" attribute are rendered
385+ as code examples.
386+* Fenced code blocks declared to be Idris code that fail to parse or type check
387+ now provide error messages to IDE clients.
388+* *EXPERIMENTAL* support for partial evaluation (Scrapping your Inefficient
389+ Engine style)
390+
391+# New in 0.9.14
392+
393+* Tactic for case analysis in proofs
394+* Induction and case tactic now work on expressions
395+* Support for running tests for a package with the tests section of .ipkg files
396+ and the `--testpkg` command-line option
397+* Clearly distinguish between type providers and postulate providers at the use
398+ site
399+* Allow dependent function syntax to be overridden in dsl blocks, similarly to
400+ functions and let. The keyword for this is `pi`.
401+* Updated `effects` library, with simplified API
402+* All new JavaScript backend (avoids callstack overflows)
403+* Add support for `%lib` directive for NodeJS
404+* Quasiquotes and quasiquote patterns allow easier work with reflected
405+ terms. `` `(EXPR)`` quasiquotes EXPR, causing the elaborator to be
406+ used to produce a reflected version of it. Subterms prefixed with `~`
407+ are unquoted - on the RHS, they are reflected terms to splice in,
408+ while on the LHS they are patterns.
409+
410+ A quasiquote expression can be given a goal type for the elaborator,
411+ which helps with disambiguation. For instance, `` `(() : ())``
412+ quotes the unit constructor, while `` `(() : Type)`` quotes the unit
413+ type. Both goal types and quasiquote are typechecked in the global
414+ environment.
415+* Better inference of unbound implicits
416+
417+# New in 0.9.13
418+
419+* IDE support for retrieving structured information about metavariables
420+* Experimental Bits support for JavaScript
421+* IdrisDoc: a Haddock- and JavaDoc-like HTML documentation generator
422+* Command line option `-e` (or `--eval`) to evaluate expressions without loading
423+ the REPL. This is useful for writing more portable tests.
424+* Many more of the basic functions and datatypes are documented.
425+* Primitive types such as Int and String are documented
426+* Removed javascript lib in favor of idris-hackers/iQuery
427+* Specify codegen for :compile REPL command (e.g. `:compile` javascript
428+ program.js)
429+* Remove `:info` REPL command, subsume and enhance its functionality in the `:doc` command
430+* New (first class) nested record update/access syntax:
431+
432+ ```
433+ record { a->b->c = val } x -- sets field accessed by c (b (a x)) to val
434+ record { a->b->c } x -- accesses field, equivalent to c (b (a x))
435+ ```
436+
437+* The banner at startup can be suppressed by adding `:set` nobanner to the initialisation script.
438+* `:apropos` now accepts space-delimited lists of query items, and searches for
439+ the conjunction of its inputs. It also accepts binder syntax as search
440+ strings - for instance, `->` finds functions.
441+* Totality errors are now treated as warnings until code generation time, when
442+ they become errors again. This allows users to use the interactive editing
443+ features to fix totality issues, but no programs that violate the stated
444+ assumptions will actually run.
445+* Added `:makelemma` command, which adds a new top level definition to solve a
446+ metavariable.
447+* Extend `:addclause` to add instance bodies as well as definitions
448+* Reverse parameters to `BoundedList` -- now matches `Vect`, and is easier to
449+ instantiate classes.
450+* Move `foldl` into Foldable so it can be overridden.
451+* Experimental `:search` REPL command for finding functions by type
452+
453+## Internal changes
454+
455+* New implementation of erasure
456+
457+# New in 0.9.12
458+
459+* Proof search now works for metavariables in types, giving some interactive
460+ type inference.
461+* New `Lazy` type, replacing laziness annotations.
462+* JavaScript and Node codegen now understand the `%include` directive.
463+* Concept of `null` is now understood in the JavaScript and Node codegen.
464+* Lots of performance patches for generated JavaScript.
465+* New commands `:eval` (`:e`) and `:type` (`:t`) in the prover, which either
466+ normalise or show the type of expressions.
467+* Allow type providers to return postulates in addition to terms.
468+* Syntax for dealing with match failure in `<-` and pattern matching let.
469+* New syntax for inline documentation. Documentation starts with `|||`, and
470+ arguments are documented by preceding their name with `@`. Example:
471+
472+ ```
473+ ||| Add two natural numbers
474+ ||| @ n the first number (examined by the function)
475+ ||| @ m the second number (not examined)
476+ plus (n, m : Nat) -> Nat
477+ ```
478+
479+* Allow the auto-solve behaviour in the prover to be disabled, for easier
480+ debugging of proof automation. Use `:set autosolve` and `:unset autosolve`.
481+* Updated `effects` library
482+* New `:apropos` command at REPL to search documentation, names, and types
483+* Unification errors are now slightly more informative
484+* Support mixed induction/coinduction with `Inf` type
485+* Add `covering` function option, which checks whether a function and all
486+ descendants cover all possible inputs
487+
488+# New in 0.9.11
489+
490+* Agda-style equational reasoning (in Syntax.PreorderReasoning)
491+* 'case' construct now abstracts over the scrutinee in its type
492+* Added label type 'name (equivalent to the empty type). This is intended for
493+ field/effect disambiguation. "name" can be any valid identifier. Two labels
494+ are definitionally equal if they have the same name.
495+* General improvements in error messages, especially %error_reverse annotation,
496+ which allows a hint as to how to display a term in error messages
497+* `--ideslave` mode now transmits semantic information about many of the strings
498+ that it emits, which can be used by clients to implement semantic highlighting
499+ like that of the REPL. This has been implemented in the Emacs mode and the IRC
500+ bot, which can serve as examples.
501+* New expression form: `with NAME EXPR` privileges the namespace `NAME` when
502+ disambiguating overloaded names. For example, it is possible to write `with
503+ Vect [1,2,3]` at the REPL instead of `the (Vect _ _) [1,2,3]`, because the
504+ `Vect` constructors are defined in a namespace called `Vect`.
505+* `assert_smaller` internal function, which marks an expression as smaller than
506+ a pattern for use in totality checking. e.g. `assert_smaller (x :: xs) (f
507+ xs)` asserts that `f xs` will always be structurally smaller than `(x :: xs)`
508+* `assert_total` internal function, which marks a subexpression as assumed to be
509+ total, e.g `assert_total (tail (x :: xs))`.
510+* Terminal width is automatically detected if Idris is compiled with curses
511+ support. If curses is not available, automatic mode assumes 80 columns.
512+* Changed argument order for `Prelude.Either.either`.
513+* Experimental `neweffects'`library, intended to replace `effects` in the next
514+ release.
515+
516+## Internal changes
517+
518+* Faster elaboration
519+* Smaller .ibc files
520+* Pretty-printer now used for all term output
521+
522+# New in 0.9.10
523+
524+* Type classes now implemented as dependent records, meaning that method types
525+ may now depend on earlier methods.
526+* More flexible class instance resolution, so that function types and lambda
527+ expressions can be made instances of a type class.
528+* Add `!expr` notation for implicit binding of intermediate results in
529+ monadic/do/etc expressions.
530+* Extend Effects package to cope with possibly failing operations, using
531+ `if_valid`, `if_error`, etc.
532+* At the REPL, `it` now refers to the previous expression.
533+* Semantic colouring at the REPL. Turn this off with `--nocolour`.
534+* Some prettifying of error messages.
535+* The contents of `~/.idris/repl/init` are run at REPL start-up.
536+* The REPL stores a command history in `~/.idris/repl/history`.
537+* The `[a..b]`, `[a,b..c]`, `[a..]`, and `[a,b..]` syntax now pass the totality
538+ checker and can thus be used in types. The `[x..]` syntax now returns an
539+ actually infinite stream.
540+* Add `%reflection` option for functions, for compile-time operations on syntax.
541+* Add expression form `quoteGoal x by p in e` which applies `p` to the expected
542+ expression type and binds the result to `x` in the scope `e`.
543+* Performance improvements in Strings library.
544+* Library reorganisation, separated into `prelude/` and `base/`.
545+
546+## Internal changes
547+
548+* New module/dependency tree checking.
549+* New parser implementation with more precise errors.
550+* Improved type class resolution.
551+* Compiling Nat via GMP integers.
552+* Performance improvements in elaboration.
553+* Improvements in termination checking.
554+* Various REPL commands to support interactive editing, and a client/server
555+ mode to allow external invocation of REPL commands.
556+
557+# New in 0.9.9
558+
559+## User visible changes
560+
561+* Apply functions by return type, rather than with arguments: `t <== f` means
562+ "apply f with arguments such that it returns a value of type t"
563+* Allow the result type of a rewrite to be specified
564+* Allow names to be attached to provisional definitions lhs `?= {name} rhs` --
565+ generates a lemma called `name` which makes the types of the lhs and rhs
566+ match. `{name}` is optional - a unique name is generated if it is absent.
567+* Experimental LLVM backend
568+* Added `Data.HVect` module
569+* Fix `fromInteger` to take an `Integer`, rather than an `Int`
570+* Integer literals for `Fin`
571+* Renamed `O` to `Z`, and `fO` to `fZ`
572+* Swapped `Vect` arguments, now `Vect : Nat -> Type -> Type`
573+* Added `DecEq` instances
574+* Add `equiv` tactic, which rewrites a goal to an equivalent (convertible) goal
575+
576+## Internal changes
577+
578+* Add annotation for unification traces
579+* Add `mrefine` tactic for refining by matching against a type
580+* Type class resolution fixes
581+* Much faster coverage checking
582+
583+# New in 0.9.8
584+
585+## User visible changes
586+
587+* Added `rewrite ... in ...` construct
588+* Allow type class constraints in `using` clauses
589+* Renamed `EFF` to `EFFECT` in Effect package
590+* Experimental Java backend
591+* Tab completion in REPL
592+* Dynamic loading of C libraries in the interpreter
593+* Testing IO actions at the REPL with `:x` command
594+* Improve rendering of `:t`
595+* Fixed some INTERNAL ERROR messages
596+
597+## Internal Changes
598+
599+* Fix non-linear pattern checking
600+* Improved name disambiguation
601+* More flexible unification and elaboration of lambdas
602+* Various unification and totality checking bug fixes
603+
604+# New in 0.9.7
605+
606+## User visible changes
607+
608+* `implicit` keyword, for implicit type conversion
609+* Added Effects package
610+* Primitives for 8,16,32 and 64 bit integers
611+
612+## Internal Changes
613+
614+* Change unification so that it keeps track of failed constraints in case
615+ later information helps to resolve them
616+* Distinguishing parameters and indices in data types
617+* Faster termination/coverage checking
618+* Split 'javascript' target into 'javascript' and 'node'
619+
620+# New in 0.9.6
621+
622+## User visible changes
623+
624+* The type of types is now `Type` rather than `Set`
625+* Forward declarations of data allowed
626+ - supporting induction recursion and mutually recursive data
627+* Type inference of definitions in `where` clauses
628+ - Provided that the type can be completely determined from the first
629+ application of the function (in the top level definition)
630+* `mutual` blocks added
631+ - effect is to elaborate all types of declarations in the block before
632+ elaborating their definitions
633+ - allows inductive-recursive definitions
634+* Expression inspected by `with` clause now abstracted from the goal
635+ - i.e. "magic" with
636+* Implicit arguments will be added automatically only if their initial letter is
637+ lower case, or they are in a using declaration
638+* Added documentation comments (Haddock style) and `:doc` REPL command
639+* Pattern matching on strings, big integers and characters
640+* Added `System.Concurrency` modules
641+* Added `postulate` declarations
642+* Allow type annotations on `let` tactic
643+* EXPERIMENTAL JavaScript generation, with `--target javascript` option
644+
645+## Internal Changes
646+
647+* Separate inlining methods at compile-time and run-time
648+* Fixed nested parameters blocks
649+* Improve efficiency of elaborator by:
650+ - only normalising when necessary
651+ - reducing backtracking with resolving ambiguities
652+* Better compilation of case trees
653+
654+# New in 0.9.5
655+
656+## User visible changes
657+
658+* Added codata
659+ - as data declarations, but constructor arguments are evaluated lazily
660+ - functions which return a codata type do not reduce at compile time
661+* Added `parameters` blocks
662+* Allow local data definitions in where blocks
663+* Added `%default` directive to declare total-by-default or partial-by-default
664+ for functions, and a corresponding "partial" reserved words to mark functions
665+ as allowed to be partial. Also `--total` and `--partial` added as command line
666+ options.
667+* Command line option `--warnpartial` for flagging all undeclared partial
668+ functions, without error.
669+* New termination checker supporting mutually recursive definitions.
670+* Added `:load` command to REPL, for loading a new file
671+* Added `:module` command to REPL, for adding modules
672+* Renamed library modules (now have initial capital)
673+
674+## Internal changes
675+
676+* Several improvements and fixes to unification
677+* Added collapsing optimisation and more aggressive erasure
678+
679+# New in 0.9.4:
680+
681+## User visible changes
682+
683+* Simple packaging system
684+* Added `--dumpc` flag for displaying generated code
685+
686+## Internal changes
687+
688+* Improve overloading resolution (especially where this is a type error)
689+* Various important bug fixes with evaluation and compilation
690+* More aggressive compile-time evaluation
691+
692+# New in 0.9.3
693+
694+## User visible changes
695+
696+* Added binding forms to syntax rules
697+* Named class instances
698+* Added `:set` command, with options `errorcontext` for displaying local
699+ variables in scope when a unification error occurs, and `showimplicits`
700+ for displaying elaborated terms in full
701+* Added `--errorcontext` command line switch
702+* Added `:proofs` and `:rmproofs` commands
703+* Various minor REPL improvements and fixes
704+
705+## Internal changes
706+
707+* Completely new run time system (not based on Epic or relying on Boehm GC)
708+* Normalise before forcing to catch more forceable arguments
709+* Types no longer exported in normal form
710+* Try to resolve overloading by inspecting types, rather than full type
711+ checking
712+
713+# New in 0.9.2
714+
715+## User visible changes
716+
717+* backtick notation added: ``x `foo` y ==> foo x y``
718+* case expressions allowed in type signatures
719+* Library extensions in prelude.vect and prelude.algebra
720+* `malloc`/`trace_malloc` added to builtins.idr
721+
722+## Internal changes
723+
724+* Some type class resolution fixes
725+* Several minor bug fixes
726+* Performance improvements in resolving overloading and type classes
727+
728+# New in 0.9.1
729+
730+## User visible changes
731+
732+* DSL notation, for overloading lambda and let bindings
733+* Dependent records, with projection and update
734+* Totality checking and `total` keyword
735+* Auto implicits and default argument values `{auto n : T}`, `{default val n : T}`
736+* Overlapping type class instances disallowed
737+* Many extensions to `prelude.nat` and `prelude.list` libraries (mostly thanks to
738+ Dominic Mulligan)
739+* New libraries: `control.monad.identity`, `control.monad.state`
740+* Small improvements in error reporting
741+
742+## Internal changes
743+
744+* Faster compilation (only compiling names which are used)
745+* Better type class resolution
746+* Lots of minor bug fixes
747+
748+# 0.1.x to 0.9.0
749+
750+Complete rewrite.
751+
752+## User visible changes
753+
754+* New proof/tactics syntax
755+* New syntax for pairs/dependent pairs
756+* Indentation-significant syntax
757+* Added type classes
758+* Added where clauses
759+* Added case expressions, pattern matching let and lambda
760+* Added monad comprehensions
761+* Added cumulativity and universe checking
762+* Ad-hoc name overloading
763+ - Resolved by type or explicit namespace
764+* Modules (Haskell-style)
765+* public, abstract and private access to functions and types
766+* Separate type-checking
767+* Improved interactive environment
768+* Replaced 'do using' with Monad class
769+* Extended syntax macros
770+
771+## Internal changes
772+
773+* Everything :-)
774+* All definitions (functions, classes and instances) are elaborated to top
775+ level, fully explicit, data declarations and pattern matching definitions,
776+ which are verified by a minimal type checker.
777+
778+This is the first release of a complete reimplementation. There will be bugs.
779+If you find any, please do not hesitate to contact Edwin Brady
780+(ecb10@st-andrews.ac.uk).
idris.cabal+1−1
@@ -75,7 +75,7 @@ Data-files: idrisdoc/styles.css
7575 rts/libtest.c
7676
7777Extra-doc-files:
78− CHANGELOG
78+ CHANGELOG.md
7979 CITATION.md
8080 CONTRIBUTING.md
8181 CONTRIBUTORS