Changes to version 3.7.2:
- Front-end updated to support multi-parameter type classes.
For this purpose, the front-end supports the language extensions
MultiParamTypeClasses
,FunctionalDependencies
andFlexibleInstances
(similarly to Haskell). An example can be found intestsuite/TypeclassTests/TestMPTCCoerce.curry
. - As a consequence of supporting multi-parameter type classes,
the structure of Curry interface files (ending with
.icurry
) and AbstractCurry files (ending with.acy
) has been slightly changed: type class constraints have now a list of type parameters instead of a single one. This can be seen in the new versions of the Curry packagesabstract-curry
(version 4.x) andcurry-interface
(version 4.x). Moreover, the names of internal operations generated for operations defined in type classes (e.g., instance operations) have been slightly changed (this is only visible in FlatCurry files). Prelude
: value generator for floats added
Changes to version 3.7.0:
- Command
:interface
use the new interface pretty printer based on the Curry packagecurry-interface
so that also information about type classes are shown - Update front end:
-
new option
--origin-pragmas
(only for use in the Curry Language Server) -
incomplete cases are always extended with explicit calls to
Prelude.failed
in missing branches. For instance,head (x:_) = x
is translated into the FlatCurry definition
head xs = case xs of x:_ -> x [] -> Prelude.failed
-
Changes to version 3.6.0:
- Changes in case mode: the case modes Haskell, Prolog, and Gödel are stronger so that they emit error messages instead of warnings, the default case mode is Curry, which is like Haskell but emit only warnings (see Section 3.7 of the PAKCS User Manual).
- Front end does not include
Prelude
in imports of FlatCurry files when it is not necessary (e.g., if the language optionNoImplicitPrelude
is set) - Small bug fixes
- CPM: add
--dependencies
option to clean command in order to clean all dependencies in the current package (useful to clean the standard homepackage)
Changes to version 3.5.2:
- Base libraries extended by including libraries for encapsulated search
so that set functions can be used without installing packages.
The new libraries are:
Control.Search.SetFunctions
(implementing set functions)Control.Search.AllValues
(implementing a strong encapsulation as I/O operations)Control.Search.Unsafe
(implementing strong encapsulation as non I/O operations, but this method has a non-declarative behavior)Control.Search.SearchTree
(implementing search trees which are mainly used in KiCS2 to implement encapsulation).
- Update CPM (modified options for command
upload
)
Changes to version 3.5.1:
- Verbosity mode slightly changed: parser messages shown only for verbosity greater than 1.
- Fix command
:add ...
by compiling new imports. - Add let bindings to the interactive REPL.
- Update CPM (with automatic upload to Masala/CPM)
Changes to version 3.5.0:
- Update front-end where option
--extended
is the default. In order to switch off the extensions for functional patterns and anonymous free variables, one can use the optionsNoFunctionalPatterns
andNoAnonFreeVars
, respectively. - Update front-end to use GHC 9.2
- Update CPM (with new resource URLs)
Changes to version 3.4.2:
- New base modules
Data.Functor.Compose
andData.Functor.Const
added. - Small fix for debug mode when tracing is off.
- Front end supports new language options
NoImplicitPrelude
andNoDataDeriving
. - New property
tmpdir
added to RC file (~/.pakcsrc
) in order to redefine the location of a temporary directory (e.g., if the default location/tmp
is not writable for the PAKCS process). - Properties
verboserc
anddynamicmessages
removed from RC file since they are no longer used. - Current RC properties are printed with command
:set
when verbosity level is greater than 1.
Changes to version 3.3.0:
- Verbosity options refined.
- Output of command
:type
for expressions with free variables corrected. - Top-level expressions with
Monad
context are specialized toIO
. - Top-level expressions with
Data
context are specialized toBool
. - Top-level expressions with
Floating
context are specialized toFloat
. - Desugaring of
newtype
declarations integrated into the compiler. Thus, the FlatCurry files produced by the front end containnewtype
declarations which are eliminated before the Prolog code is generated. - Since type information is not used in the run-time system, it is no longer generated in the Prolog files.
Changes to version 3.2.0:
- New compilation scheme for type classes to avoid problems with 0-ary non-deterministic definitions in instance declarations. Dictionaries are now represented as functions in order to enforce the evaluation of all instance operations.
- Prelude: operation
(/==)
added. - The prelude operations
(=:=)
and(=:<=)
changed from external to defined operations that call the external operationsconstrEq
andnonstrictEq
, respectively. This is meaningful to keep theData
constraint for(=:=)
and(=:<=)
whereas external operations have no class contexts. - Installation slightly simplified: SICStus-Prolog or SWI-Prolog
executables are searched in the load path so that the old
installation cache file
pakcsinitrc
is no longer used.
Changes to version 2.3.0: bug fixes and
- Type class
Data
with operations(===)
(equality) andaValue
(non-deterministic value generator) added to the prelude. For eachdata
declaration,Data
instances for the defined type are automatically derived as long as the defined type is first-order (i.e., does not contain functional types). Free variable have type class constraintData
. The motivation for this design and its advantages are described in a DECLARE/WFLP'19 paper. - The standard libraries has been changed in order to keep the names and structure more closely with Haskell. Specialized functionality is moved separate packages. There is a separate migration guide describing the changes.
- Libraries
FilePath
,Directory
,Distribution
,Time
,IOExts
,ReadShowTerm
removed (now available in packagesfilepath
,directory
,distribution
,time
,io-extra
andread-legacy
). - Library
System
split intoSystem.Process
,System.CPUTime
,System.Environment
.System.Process
is available in packageprocess
. The rest remains in the library. - Implemented the "MonadFail-Proposal" for Curry (see https://wiki.haskell.org/MonadFail_Proposal).
- Intermediate files are written into versioned directories, e.g.,
the FlatCurry representation of
lib/Prelude.curry
is written tolib/.curry/pakcs-3.2.0/Prelude.fcy
(and similarly all other intermediate files). This avoids inconsistencies of intermediate files when different Curry systems are used.
Changes to version 2.2.0:
- CPM updated (faster
update
command and support for caret and tilde comparison operators in dependency descriptions) - Interface for external functions simplified (as described in Appendix F of the manual).
Changes to version 2.1.2: bug fixes and
- CPM updated (improved handling of temporary working directory)
Changes to version 2.1.0: bug fixes and
- Compatibility to SWI-Prolog version 8.* improved
- Prelude:
chr
defined as total operation - Pre-compilation of libraries improved
- CPM updated (e.g., faster
update
operation)
Changes to version 2.0.2:
- Libraries
AllSolutions
,Findall
,SearchTree
,SearchTreeGenerators
,SearchTreeTraversal
,ValueSequence removed (available in package
searchtreeas
Control...`) - Library
AnsiCodes
removed (available in packageansi-terminal
asSystem.Console.ANSI.Codes
) - Library
Array
removed (available in packagearray
asData.Array
) - Library
Combinatorial
removed (available in packagecombinatorial
) - Library
CPNS
removed (available in packagecpns
asNetwork.CPNS
) - Library
Dequeue
removed (available in packagequeue
asData.Queue
) - Library
Distribtion
:curryCompilerRevisionVersion
added, operations related to load paths removed (available in packagecurrypath
in librarySystem.CurryPath
), operations to call the front end removed (available in packagefrontend-exec
in librarySystem.FrontendExec
) - Library
Format
removed (available in packageprintf
asData.Format
) - Library
NamedSocket
removed (available in packagecpns
asNetwork.NamedSocket
) - Library
Nat
removed (available in packagepeano
asData.Nat
) - Library
Profile
removed (available in packageprofiling
asDebug.Profile
) - Library
PropertyFile
removed (available in packagepropertyfile
asData.PropertyFile
) - Library
Random
removed (available in packagerandom
asSystem.Random
) - Libraries
RedBlackTree
,SetRBT
, andTableRBT
removed (available in packageredblacktree
asData.RedBlackTree
,Data.Set.RBTree
, andData.Table.RBTree
with slightly renamed API operations). - Library
SCC
removed (available in packagescc
asData.SCC
) - Library
Socket
removed (available in packagesocket
asNetwork.Socket
) - Library
SetFunctions
removed (available in packagesetfunctions
asControl.SetFunctions
) - Library
Traversal
removed (available in packagetraversal
asData.Traversal
) - Library
Test.EasyCheck
removed (available in packageeasycheck
). The import of this library should be replaced byTest.Prop
. - Library
Test.Contract
removed (available in packagecontracts
) - Front end updated in order to generate ASTs with source code
position information (see package
curry-ast
). - Curry Port Name Server removed from
currytools
(available ascurry-cpnsd
in packagecpns
) - Registry for dynamic web pages removed from
currytools
(available ascurry-cgi
in packagehtml-cgi
) - Old partial evaluator (command "peval") removed from tools since
it is available as package
peval-noshare
.
Changes to version 2.0.0:
- Library
Findall
:oneValue
added - Library
SetFunctions
:minValueBy
andmaxValueBy
added,minValue
andmaxValue
depend onOrd
context. - Parameter
-cpmexec
added to scriptpakcs-makecgi
.
This version has almost the same functionality as version 1.15.0 but adds type classes similar to Haskell 98. In addition to version 1.15.0 and type classes, this version contains the following changes:
-
define
command removed (since it was based on a quite restricted parser) -
Free variable mode (option
+free
) removed since it has many restrictions and is no longer compatible with type classes. -
Base libraries are now versioned. The actual version of the base libraries can be queried by
pakcs --base-version
or inside Curry programs by the operationDistribution.baseVersion
. The versioning of base libraries is intended to be used by CPM. -
Sources of compiler are contained in directory
src
(instead ofcurry2prolog
as in versions 1.x). -
Specification files for external operations renamed from
xxx.prim_c2p
toxxx.pakcs
(for conformity with other Curry compilers). -
Library
SetFunctions
:minValueBy
andmaxValueBy
added,minValue
andmaxValue
depend onOrd
context. -
Some libraries removed since they are available as packages which can easily be installed via
cypm
:Assertion
(no longer used sincecurrytest
has been replaced bycurrycheck
)CLP*
(now in packageclp-pakcs
)CSV
(now available asText.CSV
in packagecsv
)GlobalVariable
(now available in packageglobal-variables
)Parser
(now available in packagefl-parser
)PlProfileData
(now available in packageprofiling
)Ports
(now available in packageports
)Pretty
(now available in packagewl-pprint
asText.Pretty
, wherePretty.pretty
has been renamed toText.Pretty.showWidth
)RegExp
(now available in packageregexp
)
Changes to version 1.14.2:
-
Readline editing added to REPL in SWI-Prolog (thanks to Jan Wielemaker)
-
Curry Package Manager added as tool
cypm
. -
Various tools (e.g., addtypes, currybrowser, currycheck, currydoc, currypp, erd2curry, runcurry, spicey, verify, xmldata) have been removed from the distribution since they are not necessary for the basic use of PAKCS and they can easily be installed (by a one-line command) locally via
cypm
. Instructions how to install these tools are included in the PAKCS manual. -
Operation
RegExp.match
: order of arguments swapped -
Curry preprocessor does not generate implicit
match
for regexps. -
Some libraries removed since they are available as packages which can easily be installed via
cypm
:AbstractCurry.*
(now in packageabstract-curry
)Bootstrap3Style
(now in packagehtml
)CLPB
(now in packageclpbool
)CHR
(now in packagechr-curry
)CategorizedHtmlList
(now in packagehtml
)CurryStringClassifier
(now in packageaddtypes
)Database.ERDGoodies
(now in packageertools
)Database.ERD
andDatabase.CDBI.*
(now in packagecdbi
)FlatCurry.*
(now in packageflatcurry
)FlatCurry.Annotated.*
(now in packageflatcurry-annotated
)GraphInductive
(now in packagegraph-inductive
)GUI
(now in packagegui
)HTML
(now in packagehtml
as libraryHTML.Base
)HtmlParser
(now in packagehtml
)KeyDatabaseSQLite
(now in packagekeydb
)JavaScript
(now in packagejavascript
)Mail
(now in packagemail
)Markdown
(now in packagemarkdown
)Prolog
(now in packageprolog
)Rewriting.*
(now in packagerewriting
)URL
(now in packageurl
)WUI
andWUIjs
(now in packagewui
)XML
(now in packagexml
)XmlConv
(now in packagexml
)
-
Libraries
tools/ui
removed since they are available as CPM packageui
. -
Command
:xml
removed (since the XML format is deprecated). -
Compatibility with newer version of SWI-Prolog (7.x) improved.
-
Changing memory limits for compiled Curry programs with SWI-Prolog supported (see section about technical problems in the manual).
Changes to version 1.14.0:
- Makefiles changed so that parallel build (make -j) is possible.
- Library
Database.ERD...
added (formerly part of ER currytools). - Libraries
IOExts
andGlobal
use system commandslockfile-create
andlockfile-remove
instead oflockfile
for internal file synchronization in order to remove dependency on packageprocmail
. - 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
with an implementation of 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 ofTest.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 translate Curry programs into Agda programs)
added to
currytools
. - Obsolete script
parsecurry
removed. - Tools
cpns
(Curry Port Name Server) andwww
(web scripting) moved tocurrytools
. - Names of tool executables changed to
pakcs toolname
orcurry toolname
. - Name of Curry parser
cymake
changed tocurry frontend
. - Tool
curry analysis
(CASS): option--all
added. - Tool
curry analysis
(CASS): analysisFunctional
added and analysisDeterministic
modified so that it considers encapsulated search. - Tool
curry analysis
(CASS): simple termination analysisTerminating
added. - Tool
curry analysis
(CASS): analysisTypesInValues
added. - Tool
curry check
supports also testing with float arguments. - Run-time parameters passed to PAKCS must be separated by
--
. - Installation made more flexible by supporting environment variable
PAKCSINSTALLDIR
to specify the location where PAKCS is moved after the build process.
Changes to version 1.13.0:
-
Type
Success
is now a type synonym forBool
andsuccess
is defined asTrue
in the prelude. -
Library Constraints removed since it is no longer necessary due to the equivalence of
Success
andBool
. -
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
andRandomValue
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 likegetLoadPathForModule
andlookupModuleSourceInLoadPath
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
byimport FlatCurry.Types import FlatCurry.Files
-
replace
import FlatCurryGoodies
byimport FlatCurry.Goodies
-
replace
import FlatCurryPretty
byimport FlatCurry.Pretty
-
replace
import FlatCurryRead
byimport FlatCurry.Read
-
replace
import FlatCurryShow
byimport FlatCurry.Show
-
replace
import FlatCurryXML
byimport FlatCurry.XML
-
replace
import CompactFlatCurry
byimport FlatCurry.Compact
-
replace
import AnnotatedFlatCurry
byimport FlatCurry.Annotated.Types
-
replace
import AnnotatedFlatGoodies
byimport FlatCurry.Annotated.Goodies
-
replace
import AnnotatedFlatCurryPretty
byimport FlatCurry.Annotated.Pretty
-
replace
import FlexRigid
byimport 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)
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
byimport AbstractCurry.Types import AbstractCurry.Files
-
replace
import AbstractCurryGoodies
byimport AbstractCurry.Select import AbstractCurry.Build
-
replace
import PrettyAbstract
byimport AbstractCurry.Pretty
-
-
Library
CLP.FD
added: its functionality is similar to the old libraryCLPFD
, but the interface is different so that other FD constraint solvers are easier to connect.
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, ifPrelude.==
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)
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
or0B101010
can now be lexed and are converted to the integer value42
. - 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 functionsfromLeft
andfromRight
- Library
ShowS
added - Library
AnsiCodes
added - Prelude operation
===
added
Changes to version 1.11.4:
- Support for hierarchical module names added,
libraries
Distribution
andFlatCurry
adapted for this purpose. - Library
AbstractCurryGoodies
added. - Libraries
CHR
andCHRcompiled
to implement Constraint Handling Rules in Curry added together with various examples inexamples/CHR
.
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 modulerev
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 expressionmain
. - 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
andrewriteSome
added (experimental!). - Library
Prolog
added. - Library
Unsafe
:compareAnyTerm
andisGround
added. - Tool
CASS
: new analysisRequiredValues
added. - Optimization tool
bindingopt
for transforming Boolean equalities into constraint equalities added. - Tool
data2xml
for data conversion to XML and back added.
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 totools/lib_reprecated
. - Prelude: definition of
div
changed (to be compatible with Haskell) andquot
,rem
,divMod
,quotRem
added. - Prelude: IOError type extended with constructors for
user/fail/nondet errors and implementation of
catch
adapted. - Prelude:
catchFail
omitted (usecatch
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 paramteroutfile
removed and front-end parameterhtmldir
added. - Library
Distribution
andFlatCurry
: 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
andInteger
: 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
andRegExp
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.
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 fileprog
(instead ofprog.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 inhGetLine
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.
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
: OperationcopyFile
added. - Library
FlatCurry
extended to represent typed expressions by a new constructorTyped
. - Library
SetFunctions
: Operationschoose
andselect
added. - Bug fix in script
parsecurry
.
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).
- Field selection operator is "
- Showing characters:
print '\''
fixed - Library
GUI
: types of various main operations (likerunInitGUI
,runInitGUIwithParams
) slightly changed (for compatibility with KiCS2 version of the library). The old operations are still available asrunInitGUI'
etc. - Library
Markdown
: title argument added tomarkdownText2CompleteHTML
- Custimzation variables in
.pakcsrc
file extended.