@INPROCEEDINGS{HanusTeegen19Declare,
author    = "Hanus, M. and Teegen, F.",
title     = "Adding Data to Curry",
year      = "2020",
booktitle = "Declarative Programming and Knowledge Management - Conference
             on Declarative Programming ({DECLARE} 2019)",
doi       = {10.1007/978-3-030-46714-2\_15},
pages     = {230-246},
publisher = {Springer LNCS 12057},
abstract = {
Functional logic languages can solve equations over user-defined
data and functions.  Thus, the definition of an appropriate
meaning of equality has a long history in these languages,
ranging from reflexive equality in early equational logic
languages to strict equality in contemporary functional logic
languages like Curry.  With the introduction of type classes,
where the equality operation \ccode{==} is overloaded and
user-defined, the meaning became more complex.  Moreover, logic
variables appearing in equations require a different typing than
pattern variables, since the latter might be instantiated with
functional values or non-terminating operations.  In this paper,
we present a solution to these problems by introducing a new type
class \code{Data} which is associated with specific algebraic
data types, logic variables, and strict equality.  We discuss the
ideas of this class and its implications on various concepts of
Curry, like unification, functional patterns, and program
optimization.
}
}
