PAKCS: Release Notes (up to Version 1.10.1)
Release notes for PAKCS Version 1.10.1 (October 5, 2012)
Changes to version 1.10.0:
- 
 HTML.addClassadded.
- 
  Auxiliary files /tmp/PAKCS...renamed to/tmp/Curry...(since they are also used by KiCS2).
- 
  Compiler Makefile changed to make it compatible with
  newer versions (6.x) of SWI-Prolog.
Release notes for PAKCS Version 1.10.0 (June 6, 2012)
Changes to version 1.9.2:
- 
  New front end (compatible with newer GHC version) added.
- 
  Distribution does not longer contain the backends TasteCurry and Curry2Java.
- 
  Assertions used in the tool currytest are now operations
  rather than constructors, i.e., one has to write assertEqualinstead ofassertEqualsince the typeAssertionis abstract.
- 
Library CLPFD: new reifiable constraints for
negation, conjunction, disjunction added.
- 
ReadShowTerm.readsQTermalso reads unqualified
constructor (if they are unique) for compatibility with
other Curry implementations that show terms always without qualifiers.
Release notes for PAKCS Version 1.9.2 (April 30, 2011)
Changes to version 1.9.1:
- 
  Bug fix for the translation of as-patterns with non-deterministic
  arguments (sharing was missing in previous releases).
- 
  Intermediate representations of Curry programs (files with suffixes
  .fint/.fcy/.acy) are now stored in a specific
  directory .curryso that they are not directly visible.
  The libraries FlatCurry, FlatCurryRead, AbstractCurry etc
  are adapted to deal with these new file names.
  In order to be independent on the specific names of intermediate
  files, application programs should use the corresponding
  operations to obtain the name of an intermediate file from the
  program name (see FlatCurry.flatCurryFileName,
  FlatCurry.flatCurryIntName, AbstractCurry.abstracCurryFileName).
Generated Prolog files (.pl/.po) are now stored in specific
  directory.curry/pakcs.
- 
  Non-ASCII characters removed from source files.
- 
  Printing of free variables in results improved.
  They are now printed in the form "_a", "_b" etc instead
  of "_9435", "_4325".
- 
  Prelude: type IOErrorand operationsuserError,ioError,showError,
  andcatchadded for exception handling in the I/O monad.
- 
  Prelude: negateFloatadded to avoid an error
  when reading negative numbers.
- 
  Library List: inits, tails, isInfixOf added
- 
  Library CompactFlatCurry: The targetparameter ofgenerateCompactFlatCurryFilemust contain the real name of the target file (i.e., with a
  potential suffix ".fcy").
- 
  Library Profile: profileTime/profileSpace measures execution of
  an I/O action, profileTimeNF/profileSpaceNF added to measure
  the execution of a normal form computation.
- 
  Libraries Constraint, GlobalVariable, SetFunctions, KeyDatabaseSQLite added.
- 
  Library HTML: operation answerEncTextadded.
- 
  Library XML: selector operations tagOf,elemsOf,textOfadded.
- 
  Implementation of tool currytest changed from ports to sockets for
  the internal communication.
- 
  Tool erd2curry improved: String attributes where null values are
  allowed are no longer represented as type Maybe Stringbut as typeStringwhere a null value corresponds
  to the empty string. This representation simplifies many
  application programs. Furthermore, the type specifying cardinalities
  in relationship has been slightly changed to make it more readable.
  For instance, (Range 0 Nothing) is now written as (Beetween 0 Infinite),
  and (Range 0 (Just 2)) is now written as (Beetween 0 (Max 2)).
Release notes for PAKCS Version 1.9.1 (May 9, 2009)
Changes to version 1.9.0:
- 
  Method to ask for more solutions slightly changed to options
  yes/no/all.
- 
  PAKCS commands ":modules" and ":programs" added (to show all currently
  loaded modules and all available programs), command ":dir" removed.
- 
  PAKCS command ":analyze igraph" removed (the same functionality is
  available in the CurryBrowser).
Generated Prolog files (.pl/.po) are now stored in specific
  directory
.pakcs.
  Prolog code of the run-time system slightly changed to avoid
  problems with SWI-Prolog Version 5.7.
- 
  Handling of global environment variables for PAKCS changed in order to
  make it compatible with recent releases of SICStus Prolog.
  Environment variables SICSTUS and SPLD (usually stored in $HOME/.pakcsinitrc)
  replaced by SICSTUSDIR.
- 
  PAKCS is called with the readline wrapper "rlwrap" (if it is available
  on the local machine) to support line editing or history functionality.
- 
  Exit codes of PAKCS: PAKCS terminates with a non-zero exit code
  if the evaluation of the last goal had a run-time error (exit code 1)
  or terminated with "No more solutions" (exit code 2).
- 
  Library AbstractCurry: constructor CmtFunc added to represent functions
  with documentation comments.
- 
  Library CLPR is now available for SWI-Prolog (Vers. 5.6).
  To support it, the code generator has been slightly modified
  which requires the recompilation of existing Curry programs.
- 
  Library Directory: removeFile, removeDirectory,
  renameFile, renameDirectory,setWorkingDirectory added.
- 
  Library System: Implementation of (un)setEnv changed from primitive
  to an implementation using library Global.
- 
  Library Traveral added.
- 
  Library WUI: renderTaggedTupleadded and
  type ofwuiInFormandwuiWithErrorFormslightly changed.
- 
  Tool erd2curry: all generated operations contain documentation comments.
- 
  Libraries for declarative user interface programming added
  (in tools/ui).
Release notes for PAKCS Version 1.9.0 (December 14, 2007)
Changes to version 1.8.1:
- 
  Implementation made compatible to SICStus Prolog 4.0.2.
  However, the implementation of PAKCS with SICStus Prolog 4.0.2
  is still incomplete due to missing features in this Prolog version.
  In particular, the library CLPB and the operation IO.hSeekcannot be used.
- 
  The internal Prolog representation of characters has been changed.
  Therefore, all compiled Prolog files (programs, databases)
  must be recompiled. Usually, this is automatically done
  when Curry programs are compiled with the new PAKCS version.
- 
  Memory leaks due to unnecessary creation of choice points removed.
- 
  Bug in failure printing (option +consfail) fixed.
Release notes for PAKCS Version 1.8.1 (October 21, 2007)
Changes to version 1.8.0:
-  Implementation made compatible to SICStus Prolog 4.0
     (however, there are problems due to bugs in this Prolog version). 
-  Parser reports better shadowing warnings. 
-  parsecurry: Option "-q" should now work (which is the default when
     reading Curry programs with the libraries FlatCurry or AbstractCurry).
-  Command line options of some tools (parsecurry, currydoc, currytest)
     changed. For compatibility, the old parameters are still accepted.
-  Library Database improved with better reporting of transaction errors.
     For this purpose, the type of runThas been changed
     so that it also returns transaction errors.
-  Library Global added.
-  Library IOExts: connectToSocket removed (use Socket.connectToSocket),
     choiceStreamOrMsgs removed (use IO.hWaitForInputsOrMsg).
-  Library Socket: listenOn is now rigid in its argument, listenOnFresh
     added, socketListen removed.
-  Library System: evalTime/evalSpace moved into library Profile.
-  Library NamedSocket added.
-  Library HTML: implementation improved and communication
     changed from library Ports to library NamedSocket.
-  Tool erd2curry to compile entity-relationship diagrams
     into Curry programs added.
Release notes for PAKCS Version 1.8.0 (March 13, 2007)
Changes to version 1.7.3:
-  Code generation changed: eta-expansion (i.e., translation of all equations
     to first-order rules) removed. This has some consequences to the
     implementation of I/O actions that has been changed accordingly.
-  Implementation of dynamic web pages (library HTML) changed.
     The new implementation starts a server process for the first
     invocation of a web page. The server keeps the event handlers
     for this page so that the communication with the central event handler
     server (as in version 1.7.3) is no longer necessary.
-  Libraries Database and KeyDatabase added as a replacement for
     Dynamic and KeyDB with a better interface for transaction-safe
     programming.
Release notes for PAKCS Version 1.7.3 (February 27, 2007)
Changes to version 1.7.2:
-  COOSy Observation Debugger
     added to PAKCS distribution (executable by new command ":coosy").
-  External function interface improved. The PAKCS compiler now generates
     a standard interface for external functions that do not suspend
     so that an external function of arity N can be simply implemented
     by a Prolog predicate of arity (N+1).
     The old raw interface is still used if the entry name specified
     in the corresponding "*.prim_c2p" file is suffixed by "[raw]".
-  PAKCS program option "-i" added to load a Curry program and evaluate
     an initialization operation (typically an I/O operation)
     directly after loading.
-  Option "+consfail" extended to report complete failure traces and examine
     them in an interactive mode.
-  Prelude: operation "getSomeValue" added to extract a single value from
     a nondeterministic computation.
-  Tool "currycreatemake" to create simple makefiles for a Curry
     application added.
-  Library CLPB (Boolean constraint solver) added.
-  Library CompactFlatCurry for reducing the size of Curry applications
     added.
-  Libraries Distribution, PropertyFile, and ReadNumeric added.
-  Library System: functions getLoadPath, getLoadPathForFile, findFileInLoadPath
     moved into new library Distribution.
-  Library CLPFD: all_different and scalar_product renamed.
-  Library Directory: createDirectory, removeFile added,
     getModificationTime returns a ClockTime instead of an Int
-  Library Dynamic: checking of type restrictions on dynamic predicates
     extended (e.g., it is not allowed to store handles or IORefs in
     dynamic predicates).
-  Library FileGoodies: findFileInPath renamed to lookupFileInPath.
-  Library GUI: appendTaggedValue replaced by appendStyledValue
     which offers more flexibility. addRegionStyle and removeRegionStyle
     added.
-  Library HTML.curry: updated for conformity with XHTML, in particular,
     constructor HtmlElemremoved from datatypeHTML.intForm(Main)added to execute web pages in
     interactive mode.
-  Library HTML_Parser: renamed to HtmlParser and updated for conformity
     with XHTML, i.e., reading extended for XHTML documents.
-  Library Mail for sending emails added.
-  Library System: setEnviron,unsetEnviron added, Date and getDate removed
     (since library Time contains equivalent functionality).
-  Library Time: internal representation of ClockTime changed,
     functions for transforming to and from ClockTime modified
     in order to distinguish between UTC and local time values.
-  currybrowser: User interface redesigned so that it contains less frames.
-  currytest: Handling of syntax errors in test programs added.
Release notes for PAKCS Version 1.7.2 (March 29, 2006)
Changes to version 1.7.0:
-  Name of standard prelude changed from "prelude" into "Prelude".
     Important note: due to this name change, for all Curry applications
     the old code must be deleted and then recompiled, i.e.,
     perform cleancurrybefore you compile your Curry
     application again!
-  Changing of maximal arity of tuples enabled
     (see installation instructions).
-  Option "+consfail" added for reporting errors due to non-exhaustive
     pattern definitions.
-  Bug fix in front end w.r.t. polymorphic expression in list comprehensions.
-  Front end extended to support function patterns (see
     pakcs/examples/testFuncPattern.curry for an example and more
     information).
-  Front end extended to allow for transformations on FlatCurry files
     after parsing and before compiling in order to integrate optimization
     phases (see pakcs/parser/README for details).
-  Usage of old front end no longer supported.
-  Prelude extended with functions like $!!, $#, $##, compare.
     Comparison operations defined as polymorphic on ground data terms.
-  Library Array added.
-  Library CLPFD: made available for SWI-Prolog-based implementation.
-  Library FlatCurryTools renamed into FlatCurryShow.
-  Library FlatCurryXML modified (implementation simplified by using XmlConv).
-  Library FlatCurryGoodies added.
-  Library Float: comparison operations removed (since the
     corresponding prelude operations can now be used).
-  Library GUI: controlling of GUIs via stream handlers added.
     Type of reconfiguration options changed from (WidgetRef,ConfItem)
     into ReconfigureItem in order to support dynamic addition of
     new stream handlers.
-  Library HTML extended with concept of HTML pages and parameters
     (extension by Marco Comini).
-  Library IO extended with direct access operation (hSeek) on files.
-  Library KeyDB extended.
-  Library Ports: openStdInOutPort removed (replaced by operations in library IO).
-  Library Socket added.
-  Library WUI added.
-  Library XmlConv added.
Release notes for PAKCS Version 1.7.0 (December 5, 2005)
Changes to version 1.6.1:
-  Free variable mode changed: as a default, free variables in initial goals
     must now be declared (by let-free or where-free). The declaration is
     not necessary of the option "+free" is set.
-  New front end (adapted from the Muenster Curry Compiler by
     Wolfang Lux) added. Since the front end is implemented in Haskell,
     Java is no longer necessary to execute PAKCS (however, the
     Glasgow Haskell Compiler is necessary for developers to
     compile the front end).
-  Implementation of Curry2Prolog modified so that it can be
     also executed with SWI-Prolog.
-  Library HTML: implementation of dynamic web pages based on a new
     client/server architecture. Now, a local server stores all event handlers
     and previous input fields so that they are no longer encoded in
     the web page (which could cause security problems).
-  Library AllSolutions: getFirstSolution renamed into getOneSolution,
     getOneValue added, getAllValues moved into prelude.
-  Documentation currydoc: option "onlyindex" added (used for generation
     of library documentation).
Release notes for PAKCS Version 1.6.1 (September 30, 2005)
Changes to version 1.5.0:
-  Possibility to suppress front-end parsing and Prolog loading messages
     added (see .pakcsrc).
-  Format of FlatCurry and .fcy files slightly changed w.r.t. datatype
     CombType. This change requires the deletion and recompilation
     of all .fcy files!
-  Separate compilation introduced.
-  New concept to connect primitive operations to Curry2Prolog
     (see curry2prolog/external.pl).
-  Curry2Prolog, library FlatCurry, and corresponding tools extended
     to support recursive let's.
-  PAKCS command ":eval" eliminated since the same functionality
     is contained in the new browser tool.
-  New browser tool added (see PAKCS command ":browse").
-  New library GUI for programming graphical user interfaces added.
-  Libary HTML: Passing of logical variables to event handlers supported.
     Image buttons, redirections, and headed tables added.
     Event handler expressions are not passed in web pages but stored
     on the server side via a server process (see library HtmlServer).
-  Primitive prelude.seq does no longer suspend on free variables.
-  New primitives prelude.ensureNotFree and prelude.ensureSpine
     for suspension on free variables added.
-  Defaults for "eval" annotation changed to "flex".
-  Library Ports improved: new operations waitAndConnectPort and
     connectPortWait added which supports waiting until an external
     port has been registered. Furthermore, there are new operations
     newObject, newNamedObject, and runNamedServer to create a new port and
     run a server object on it. It is recommended to use these operations
     instead of openPort/openNamedPort since the latter are more
     primitive and might not be supported in the future.
-  New improved mode for (X)Emacs added that supports also the use
     of PAKCS in an Emacs buffer (see tools/emacs/README).
-  Parameters for "makecurrycgi" changed in order to simplify its use
     for small web scripts.
-  Tool currytest improved so that it can be also used with a GUI.
-  New tool "dataToXml" to generate conversion functions
     between data types and XML representations.
-  New tool "addtypes" for adding type signatures to source programs.
-  Library "Tk" improved so that event handlers can also be
     reconfigured.
-  Libraries CategorizedHtmlList, Dequeue, Dynamic added.
-  Libraries TermDB and Term removed (the functionality of Term is
  available in ReadShowTerm, and TermDB is no longer supported by
  Sicstus-Prolog).
-  Module lib/meta/CurryStringClassifier added and all libraries
  for meta-programming moved to lib/meta
-  prelude: (?) added.
-  Module lib/Combinatorial: (!) and allSubsets omitted.
-  Module lib/HTML extended.
-  Support for generating standalone executables
  with Sicstus-Prolog added.
  This requires the definition of the Sicstus-Prolog application builder
  as variable SPLD in pakcs/bin/.pakcs_variablesand the setting
  of the option "standalone" in .paksrc.
-  New FlatCurry representation introduced. The corresponding intermediate
  representation files are now suffixed with ".fcy" (instead of ".flc).
-  FlatTools.writeFLC and FlatCurryTools.writeFLC are
  omitted. Use Flat2Fcy.writeFCY instead and change file suffix into ".fcy".
-  Warnings for non-adjacent function rules are provided.
-  Handling of external functions in the compiler improved.
-  Configuration file pakcsrc added. In order to use it, one can
     copy it as ".paksrc" into the home directory and change
     some values according to the local preferences.
-  Module system is now fully supported.
-  New module lib/IO with functions for reading and writing files.
-  New module lib/Sort with functions for sorting and string comparisons.
-  Module lib/Tk:
  Resizing improved by using grid structures,
  configuration options TkFill* added and composition options TkExpand*
  removed since they are no longer necessary.
-  Modules lib/SetRBT and lib/TableRBT:
  Interface has changed: the ordering predicate must be supplied
  only for the empty set and table and not for all insert operations.
  (The old versions are still available as SetRBT0 and TableRBT0
   but will be deleted in the future).
-  New tools "importgraph" and "importcalls" added which are accessible
  via the new PAKCS command ":analyze".
-  prelude.readFile does no longer support reading of URLs
  (use URL.getContentsOfUrl)
-  Library "Term" renamed to "ReadShowTerm" and extended.
-  New printer for FlatCurry interface files added.
-  Module lib/FlatCurry(Tools) with an improved representation of
  FlatCurry programs added.
-  Command "runcurry" omitted since it is no longer necessary because
  the saved state
  is always patched (by bin/.makesavedstate) with necessary
  environment information.
-  New modules FlatCurry/FlatCurryTools with improved representation
  of FlatCurry programs added.
-  Representation of characters in compiled Prolog files changed
  so that all old programs must be recompiled.
-  Implementation of sharing improved so that some memory leaks
  in tail recursive programs are eliminated.
-  Functions AbsCurry.readCurryFile and Flat.readFlatCurryFile
  changed so that the suffix (".acy" or ".flc") must be contained
  in the filename for these functions.
-  Front-end extended to deal with qualified identifers.
  As a consequence, function composition "." must be surrounded by blanks
  (which is conform with the language specification but was not necessary
  up to now).
-  -compact option added for producing more compact code.
Release notes for PAKCS Version 1.5.0 (May 25, 2003)
Changes to version 1.4.5:
-  In rules with multiple guards all guards must be of type "Bool".
-  Case expressions are now supported.
-  Let bindings of variables supported in top-level of curry2prolog.
-  Library Flat supports reading of FlatCurry programs with and
  without implicit parsing.
-  Translation of literate into standard programs integrated into
  the parser (this speeds up the entire parsing process).
-  Handling of external port communication changed:
  
  -  constructors are prefixed by their module name
-  external ports can be also send as data
-  syntax of sent messages changed to standard Curry syntax
 
-  unsafePerformIO and trace moved from prelude into library Unsafe
Release notes for PAKCS Version 1.4.5 (November 7, 2002)
Changes to version 1.4.1:
-  Long command formats (e.g., ":load" instead of ":l") added.
-  Parser bugfix: parser can now read files ending with local
  declarations.
-  Options "-l" and "-c" added to pakcs/curry2prolog
-  Compiler issues a warning in case of non-trivial overlapping rules,
  i.e., rules that have different patterns in overlapping cases,
  like in
    f 0 = 0
    f x = 1
-  Debug mode moved from command (":d") to an option (":set +debug")
 and debug commands changed into options.
-  Header information included in generated Prolog files so that the
  system can check the compiler options and can automatically
  recompile and reload programs when options (printfail/debug) are
  changed.
-  Option ":set printfail" included in PAKCS. This option adds special
  code during compilation so that failures during the reduction of
  expressions are shown.
-  Change in frontend: internal names have now the form
  "<module_name>.<local_name>" instead of
  "<module_name>_<local_name>".
  The previous name caused problems when the module name contained
  underscores.
-  Modules HTML and HTML_Parser: all tags and attribute names are
  now in lowercase letters.
-  curry2prolog backend changed so that characters are no longer
  equivalent to integers but are represented as a distinguished
  data type at run time (i.e., characters are represented as
  one-letter atoms in Prolog).
  This change requires the recompilation of all compiled Curry programs!
Release notes for PAKCS Version 1.4.1 (September 17, 2002)
Changes to version 1.4:
-  Defaults for flex/rigid functions changed according to new Curry report
  (i.e., functions of type IO are rigid, all other flexible).
-  Names of functions in modules CLPR and CLPFD changed to make
  them more conform.
-  Commands in interactive environment changed
  (command ":set..." introduced).
-  Restrictions on free variables in initial goals introduced
  (must be start with an uppercase letter; this default can be relaxed
  by the command ":set -free").
-  Command "pakcs" is equivalent to "curry2prolog" and
  no longer starts implicitly the server
Release notes for PAKCS Version 1.4 (May 23, 2002)
This version contains the following changes (apart from the usual
bug fixes) in comparison to the previous
version 1.3:
-  Module system added (not yet fully implemented; see the manual
     for a description of the current restrictions).
  As a consequence of this addition, import declarations are
  no longer written as "--import Mod" but
  are now written in the standard syntax as "import Mod".
-  CurryTest tool added (see manual for a description).
-  System modules "Combinatorial", "Integer", and "Random" added
     (thanks to Sergio Antoy).
-  CurryDoc documentation tool added (see manual for a description).
-  Internal implementation of ports changed so that all port
  communication is now done over one Unix socket which can be specified
  by the environment variable PAKCS_SOCKET. This is useful for
  distributed Curry programs running behind a firewall based on
  simple socket number filtering.
-  System module "DaVinci" added. This module supports the
  visualization of graphs by the 
  daVinci graph drawing tool.
-  System modules "SetRBT" and "TableRBT" added. These modules
  contains efficient implementation of sets and tables (finite maps)
  by red-black trees. SetRBT also contains a efficient generic
  sort function "sortRBT" based on red-black trees.
-  System module "TermDB" for storing data terms in an
  external persistent database added.
-  System module "Directory" for accessing the directory structure added.
-  Prelude extended with some useful functions (catchFail, unsafePerformIO,
  trace,...).
-  XML support for FlatCurry programs added, i.e., Flat.readFlatCurry
  and curry2prolog can now read programs in XML format
  (see here
  for a more detailed description of this format)
  so that curry2prolog could also be used as a back end for
  other functional logic languages that can be translated into
  the FlatCurry format.
  In addition, the pakcs/curry2prolog environment offers a new
  command ":xml" for translating Curry programs into this XML format.
-  Interface generator added:
  The pakcs/curry2prolog environment offers a new command ":if"
  for showing the interface of a Curry module, i.e., the data types
  and the types of all top-level functions defined in this module.
  Since this command can be also applied to system libraries,
  it is useful for getting a quick overview of the functionality
  offered by a library.
-  Partial evaluator integrated:
  The pakcs/curry2prolog environment offers a new command ":peval"
  for the partial evaluation of Curry programs (compare manual).
-  Structure of FlatCurry programs modified (system module Flat).
-  Reading of programs with Flat.readFlatCurry and curry2prolog
  modified so that it is now possible to read .flc files where
  there is no corresponding source file.
-  Structure of .flc changed so that they are compatible with the
  definition of FlatCurry. Due to this change, it is necessary
  to recompile all existing Curry programs (i.e., by "cleancurry"
  and compiling again).
Release notes for PAKCS Version 1.3 (December 15, 2000)
This version contains the following changes (apart from the usual
bug fixes) in comparison to the previous
version 1.2:
-  The definition of ports (datatype Port and its
associated operations for distributed programming)
has been moved from the prelude into the new system module
Ports.lcurry. Thus, all applications using ports
must now have the import declaration "--import Ports".
-  The functionality of ports has been extended: ports can now be named
by arbitrary symbolic names (instead of socket numbers as in the previous
version). The name resolution is done by a specific
Curry port name server (which is actually implemented in Curry).
-  The Curry2Prolog compiler is based on a new intermediate
language (*.flc files instead of *.flat files) which is closer
to the definition of FlatCurry in the corresponding system module.
The precise syntax of the new intermediate language is described
in the PAKCS manual.
-  The system library (a short description of all modules can be
found here) has been extended with new modules
for parsing HTML documents and tools for supporting meta-programming
based on FlatCurry.
Back to Homepage of PAKCS
 Michael Hanus
  
   