PAKCS: Release Notes
====================

Release notes for PAKCS Version 1.14.1 (September 22, 2016)
-----------------------------------------------------------

Changes to version 1.14.0:

  * Library `Database.ERD...` added (formerly part of ER currytools).
  * Library `Nat` for Peano numbers added.
  * Libraries `Rewriting.*` for term rewriting in Curry extended
    to deal with rewriting strategies, narrowing strategies,
    critical pairs, definitional trees.
  * Library `Sort`: ...Sort operations renamed to ...SortBy and
    ...Sort operations with standard ordering added.
  * Library `State` implementation the state monad added.
  * Library `Test.EasyCheck` split into two modules to have less
    import dependencies when putting properties into a module.
  * Library `Test.Prop` added as a clone of `Test.EasyCheck` which defines
    the interface but no implementation so that it does not import
    any other library.
    import dependencies when putting properties into a module.
  * CurryDoc shows properties and contracts, if they are present
    in source files, in the HTML documentation.
  * The Curry Preprocessor supports a new option `contracts`
    to transform contracts (specifications, pre/postconditions)
    into run-time assertions.
  * New partial evaluator (command "peval") added to `currytools`.
  * New tool Curry2Verify (to translated Curry programs into Agda programs)
    added to `currytools`.


Release notes for PAKCS Version 1.14.0 (April 19, 2016)
------------------------------------------------------

Changes to version 1.13.0:

  * Type `Success` is now a type synonym for `Bool` and
    `success` is defined as `True` in the prelude.
  * Library Constraints removed since it is no longer necessary
    due to the equivalence of `Success` and `Bool`.
  * Operation `Prelude.compare` and related comparison operations
    are flexible (instead of rigid as before) on user-defined datatypes.
    It still suspends when comparing two variables or
    one variable with a number or character.
  * Prelude: operations `(===)` and `(&&>)` removed
  * Libraries CLPFD and CLP.FD: labeling options  `RandomVariable` and
    `RandomValue` added
    (currently only supported by SWI-Prolog)
  * Library Distribution: some load path handling operations
    (`findFileInLoadPath`, `lookupFileInLoadPath`, `readFirstFileInLoadPath`,
    `getLoadPath`, `getLoadPathForFile`) removed since they are deprecated
    (use operations like `getLoadPathForModule` and
    `lookupModuleSourceInLoadPath` instead of the deprecated operations
    since they handle hierarchical module names better)
  * Libraries `List`: `diagonal` added
  * Libraries `meta/*` removed (since they have been replaced
    by libraries with hierachical names, see below)
  * Hierarchical libraries for FlatCurry added and extended:
    in order to to compatible with future versions, the following
    imports should be adapted in programs working with AbstractCurry:

    - replace `import FlatCurry` by

          import FlatCurry.Types
          import FlatCurry.Files

    - replace `import FlatCurryGoodies` by

          import FlatCurry.Goodies

    - replace `import FlatCurryPretty` by

          import FlatCurry.Pretty

    - replace `import FlatCurryRead` by

          import FlatCurry.Read

    - replace `import FlatCurryShow` by

          import FlatCurry.Show

    - replace `import FlatCurryXML` by

          import FlatCurry.XML

    - replace `import CompactFlatCurry` by

          import FlatCurry.Compact

    - replace `import AnnotatedFlatCurry` by

          import FlatCurry.Annotated.Types

    - replace `import AnnotatedFlatGoodies` by

          import FlatCurry.Annotated.Goodies

    - replace `import AnnotatedFlatCurryPretty` by

          import FlatCurry.Annotated.Pretty

    - replace `import FlexRigid` by

          import FlatCurry.FlexRigid

  * New libraries added: Bootstrap3Style, ErrorState, SCC, Rewriting.*,
    FlatCurry.Annotated.TypeInference
  * currytools: typeinference removed since it is now contained
    in the standard system libraries
  * currytools: new tool `currycheck` for automated test execution added
  * PAKCS option "-c" removed and replaced by REPL command ":compile"
    (the old option was only internally used for building the libraries)


Release notes for PAKCS Version 1.13.1 (October 2, 2015)
--------------------------------------------------------

Changes to version 1.13.0:

  * Hierarchical libraries for AbstractCurry added and extended:
    in order to to compatible with future versions, the following
    imports should be adapted in programs working with AbstractCurry:

    - replace `import AbstractCurry` by

          import AbstractCurry.Types
          import AbstractCurry.Files

    - replace `import AbstractCurryGoodies` by

          import AbstractCurry.Select
          import AbstractCurry.Build

    - replace `import PrettyAbstract` by

          import AbstractCurry.Pretty

  * Library `CLP.FD` added: its functionality is similar to the old
    library `CLPFD`, but the interface is different so that other
    FD constraint solvers are easier to connect.


Release notes for PAKCS Version 1.13.0 (August 24, 2015)
--------------------------------------------------------

Changes to version 1.12.0:
  * Operation `Prelude.==` is flexible (instead of rigid as before).
    It still suspends when comparing two variables or
    one variable with a number or character.
    However, if `Prelude.==` is (positively) used in conditions of rules,
    it is automatically transformed into a unification constraint
    so that it does not suspend.
  * Library `Pretty`: code and interface updated, e.g., some combinators
    renamed and new combinators added (e.g., to support ANSI formatting
    and colorisation of documents)


Release notes for PAKCS Version 1.12.0 (July 15, 2015)
------------------------------------------------------

Changes to version 1.11.5:
  * The extension for records (with special Curry syntax) was removed.
    Instead, PAKCS now supports Haskell's record syntax.
    See the manual for a detailed description of the new record syntax.
  * The Curry syntax is extended to also support binary integer literals.
    For instance, `0b101010` or `0B101010` can now be lexed
    and are converted to the integer value `42`.
  * The definition of AbstractCurry has been changed to sync with the
    changes of Curry done during the last years:
    - AbstractCurry files now contain version information
    - support for new record syntax
    - support for newtype declarations
    - evaluation annotations removed
    - arity of constructor declarations removed
    - simplified representation of function rules
    - String literals added
  * Library `FunctionInversion` added
  * Library `AnnotatedFlatCurryPretty` added
  * Library `Either` extended with functions `fromLeft` and `fromRight`
  * Library `ShowS` added
  * Library `AnsiCodes` added
  * Prelude operation `===` added


Release notes for PAKCS Version 1.11.5 (February 28, 2015)
----------------------------------------------------------

Changes to version 1.11.4:
  * Support for hierarchical module names added,
    libraries `Distribution` and `FlatCurry` adapted for
    this purpose.
  * Library `AbstractCurryGoodies` added.
  * Libraries `CHR` and `CHRcompiled` to implement Constraint Handling Rules
    in Curry added together with various examples in `examples/CHR`.


Release notes for PAKCS Version 1.11.4 (October 16, 2014)
---------------------------------------------------------

Changes to version 1.11.3:
  * The interactive top-level loop uses the standard front end
    to parse expressions if the option `+free` is not set.
  * Handling of path names in PAKCS commands improved, e.g.,
    the command `:load ~/rev` loads module `rev` from the home directory.
  * PAKCS command `edit` accepts module names (instead of arbitrary file names).
  * PAKCS can also be invoked via the command `curry` in the bin directory.
  * PAKCS options have the form of commands (e.g., `pakcs :set v2 :load rev`).
    Old options (except setting of `.pakcsrc` properties) are no longer
    necessary and, thus, not supported.
  * PAKCS command `:save`: if no argument is given, the executable
    is saved with the initial expression `main`.
  * PAKCS command `:source` added: allows separate viewing of visible or
    qualified function definitions.
  * PAKCS command `let var=exp` has now command syntax: `:define var=exp`
  * PAKCS option `args` for setting run-time arguments added.
  * Library `Prelude`: `solve` and `&&>` added.
  * Library `Findall`: `rewriteAll` and `rewriteSome` added (experimental!).
  * Library `Prolog` added.
  * Library `Unsafe`: `compareAnyTerm` and `isGround` added.
  * Tool `CASS`: new analysis `RequiredValues` added.
  * Optimization tool `bindingopt` for transforming Boolean equalities
    into constraint equalities added.
  * Tool `data2xml` for data conversion to XML and back added.


Release notes for PAKCS Version 1.11.3 (July 21, 2014)
------------------------------------------------------

Changes to version 1.11.2:
  * PAKCS parameter `--safe` added to support safe execution without
    I/O actions.
  * Option ":set +/-interactive" added for setting interactive mode.
    Initially, the interactive mode is TURNED OFF (new in this
    version!). The default value can be set in the `.pakcsrc` file.
  * Option ":set parser" added for setting options passed to cymake.
  * Bug fix to ensure compatibility with SWI-Prolog Vers. 6.6
  * Old deprecated libraries (`AbsCurry`, `AbsCurryIO`, `DaVinci`,
    `Flat`, `FlatCurryTools`, `FlatTools`, `FlatXML`, `Flat2FCY`, `Tk`)
    moved to `tools/lib_reprecated`.
  * Prelude: definition of `div` changed (to be compatible with Haskell)
    and `quot`, `rem`, `divMod`, `quotRem` added.
  * Prelude: IOError type extended with constructors for
    user/fail/nondet errors and implementation of `catch` adapted.
  * Prelude: `catchFail` omitted (use `catch` instead).
  * Prelude: encapsulated search operations (findall and more) moved
    into new library `Findall`.
  * Library `Distribution`: front-end parameters extended by supporting
    "special" (i.e., aribrary) arguments.
  * Library `Distribution`: front-end paramter `outfile` removed and
    front-end parameter `htmldir` added.
  * Library `Distribution` and `FlatCurry`: after calling the front end,
    an exception is raised if the front end returns with an error
    (due to an illegal source program).
  * Libraries `Float` and `Integer`: Power operators added.
  * Library `Float`: hyperbolic/ arc sine/cosine/tangent operators added.
  * Library `HTML`: `formMetaInfo` added, HTML header changed to HTML5.
  * Library `SetFunctions`: `notEmpty` added.
  * Libraries `Format` and `RegExp` added.
  * Tool `erd2curry` updated to new version with support for SQLite database.
    Bug fix in code generation w.r.t. checking of cardinality constraints.
  * Tool `spicey` (web framework) added and updated with a RESTful interface
    for entities.


Release notes for PAKCS Version 1.11.2 (September 6, 2013)
----------------------------------------------------------

Changes to version 1.11.1:
* Front-end updated (it writes and reads new kinds of interface files
  with the suffix `.icurry`).
* Saved states, i.e., executables for a main program `prog`
  are now stored in the file `prog` (instead of `prog.state`
  as in previous releases).
* CASS tool (Curry Analysis Server System) added and integrated
  into currydoc.
* Interactive command ":analyze" removed and ":usedimports" added.
  The removed features to analyze a program are available via the
  Curry Browser.
* Library `Function` added.
* Library `HTML`: default (white) background for body of generated
  web pages removed (since this is usually defined in css files).
* Library `IO`: Fixed a bug in `hGetLine` which caused an end-of-file error
  when reading a non-empty line without a newline termination.
* Type inference tool (see `currytools/typeinference`) added.
  This tool can be used to annotate expressions in FlatCurry programs
  with their type.


Release notes for PAKCS Version 1.11.1 (February 13, 2013)
----------------------------------------------------------

Changes to version 1.11.0:
* The front end accepts typed expressions of the form "Expr :: TypeExpr".
  However, such type annotations are currently ignored by the compiler
  since the target language Prolog is untyped.
* Parser strategy for combinations of functional and non-linear patterns
  improved. Parser also accepts as-patterns inside functional patterns.
* Library `Directory`: Operation `copyFile` added.
* Library `FlatCurry` extended to represent typed expressions
  by a new constructor `Typed`.
* Library `SetFunctions`: Operations `choose` and `select` added.
* Bug fix in script `parsecurry`.


Release notes for PAKCS Version 1.11.0 (December 18, 2012)
---------------------------------------------------------

Changes to version 1.10.1:
* New front end version included that implements new features of Curry,
  e.g., `fcase` expressions and non-linear patterns in left-hand sides
  of program rules.
* Syntax of records slightly changed to avoid problems
  with guarded case branches (their syntax conflicted with old syntax
  for selection of record fields):
  - Field selection operator is "`:>`" (instead of "`->`" in old syntax).
  - Record construction uses the operator "`:=`" for setting field values
    similarly to record updates (instead of "`=`" in the old syntax).
* Showing characters: `print '\''` fixed
* Library `GUI`: types of various main operations (like `runInitGUI`,
  `runInitGUIwithParams`) slightly changed (for compatibility with
  KiCS2 version of the library). The old operations are still
  available as `runInitGUI'` etc.
* Library `Markdown`: title argument added to `markdownText2CompleteHTML`
* Custimzation variables in `.pakcsrc` file extended.

-------------------------------------------------------------------------

[Release notes for older versions](http://www.informatik.uni-kiel.de/~pakcs/download/OLDRELNOTES.html)
