Commit 0649afd5 authored by Michael Hanus 's avatar Michael Hanus
Browse files

Tools updated

parent 736572e5
......@@ -43,7 +43,7 @@ but also tools with some binary. In order to install such tools,
one can use the command
%
\begin{curry}
> cpm installapp PACKAGE
> cpm install PACKAGE
\end{curry}
%
This command checks out the package in some internal directory
......@@ -58,7 +58,7 @@ can be installed by the following commands:
\begin{curry}
> cpm update
$\ldots$
> cpm installapp cpm
> cpm install cpm
$\ldots$ Package 'cpm-xxx' checked out $\ldots$
$\ldots$
INFO Installing executable 'cpm' into '/home/joe/.cpm/bin'
......
......@@ -216,20 +216,20 @@ cpm checkout <package>
\end{lstlisting}
to install a local copy of a package.
This is also useful to install some tool distributed as a package.
For instance, to install \code{curry-genmake},
a tool to generate a \code{make} file for a Curry application,
For instance, to install \code{curry-check},
a property-testing tool for Curry,
one can check out the most recent version and install the tool:
%
\begin{lstlisting}
> cpm checkout makefile
$\ldots$ Package 'makefile-1.3.4' checked out into directory 'makefile'.
> cd makefile
> cpm checkout currycheck
$\ldots$ Package 'currycheck-1.0.1' checked out into directory 'currycheck'.
> cd currycheck
> cpm install
$\ldots$
INFO Installing executable 'curry-genmake' into '/home/joe/.cpm/bin'
INFO Installing executable 'curry-check into '/home/joe/.cpm/bin'
\end{lstlisting}
%
Now, the tool \code{curry-genmake} is ready to use
Now, the tool \code{curry-check} is ready to use
if \code{\$HOME/.cpm/bin} is in your path
(see Section~\ref{sec:config} for details about changing the location
of this default path).
......@@ -241,10 +241,10 @@ of this default path).
Some packages do not contain only useful libraries
but also application programs or tools.
In order to install the executables of such applications without
explicitly using the source code of the package,
explicitly checking out the package in some local directory,
one can use the command
\begin{lstlisting}
cpm installapp <package>
cpm install <package>
\end{lstlisting}
This command checks out the package in some internal directory
(default: \code{\$HOME/.cpm/app_packages}, see
......@@ -256,7 +256,7 @@ For instance, the most recent version of the web framework Spicey
can be installed by the following command:
%
\begin{lstlisting}
> cpm installapp spicey
> cpm install spicey
$\ldots$ Package 'spicey-xxx' checked out $\ldots$
$\ldots$
INFO Installing executable 'spiceup' into '/home/joe/.cpm/bin'
......@@ -564,7 +564,7 @@ For instance, to install the binary
of the package \code{spicey} in the directory \code{\$HOME/bin},
one can execute the command
\begin{lstlisting}
> cpm --define bin_install_path=$\$$HOME/bin installapp spicey
> cpm --define bin_install_path=$\$$HOME/bin install spicey
\end{lstlisting}
......@@ -608,15 +608,15 @@ This section gives a short description of all available CPM commands.
In addition to the commands listed below, there are some global options
which can be placed in front of the CPM command:
\begin{description}
\item[\code{-d$\,|\,$--define $option$=$value$}:]
This option overrides the configuration options of CPM,
see Section~\ref{sec:config}.
\item[\code{-v$\,|\,$--verbosity [info|debug]}:]
The default value is \code{info}.
The value \code{debug} provides more output messages in order to see
what CPM is doing.
\item[\code{-t$\,|\,$--time}:]
This option adds the elapsed time to every info or debug output line.
\item[\code{-d$\,|\,$--define $option$=$value$}:]
This option overrides the configuration options of CPM,
see Section~\ref{sec:config}.
\end{description}
%
The available commands of CPM are:
......@@ -664,28 +664,50 @@ exporting the module \code{JSON.Data} can be found by the command
\item[\fbox{\code{update}}] Updates the local copy of the central package index
to the newest available version.
\item[\fbox{\code{install}}] Installs all dependencies of the current package.
\item[\fbox{\code{install}}]
Installs all dependencies of the current package.
Furthermore, if the current package contains an executable application,
the application is compiled and the executable is installed
(unless the option \code{-n} or \code{--noexec} is set).
With the option \code{-x} or \code{--exec}, the executable
is installed without installing all dependencies again.
This is useful to speed up the re-installation of a previously
installed application.
\item[\fbox{\code{install $package$ [--$pre$]}}] Installs the newest version
(compatible to the current compiler) of
a package to the global package cache. \code{--$pre$} enables the installation
of pre-release versions.
\item[\fbox{\code{install $package$ [--$pre$]}}]
Installs the application provided by the newest version
(compatible to the current compiler) of a package.
The binary of the application is installed into the directory
\code{\$HOME/.cpm/bin}
(this location can be changed via the \code{\$HOME/.cpmrc} configuration file
or by the CPM option \code{--define}, see Section~\ref{sec:config}).
\code{--$pre$} enables the installation of pre-release versions.
\item[\fbox{\code{install $package$ $version$}}] Installs a specific version of
a package to the global package cache.
\item[\fbox{\code{install $package$ $version$}}]
Install the application provided by a specific version of a package.
The binary of the application is installed into the directory
\code{\$HOME/.cpm/bin}
(this location can be changed via the \code{\$HOME/.cpmrc} configuration file
or by the CPM option \code{--define}, see Section~\ref{sec:config}).
\item[\fbox{\code{install $package$.zip}}] Installs a package from a ZIP file
to the global package cache. The ZIP file must contain at least the
package description file \code{package.json} and the directory \code{src}
containing the Curry source files.
\item[\fbox{\code{uninstall}}] Uninstall the executable installed
for this package.
\item[\fbox{\code{uninstall}}]
Uninstalls the executable installed for the current package.
\item[\fbox{\code{uninstall $package$}}]
Uninstalls the executable and the cached copy of a package
which has been installed by the \code{install} command.
\item[\fbox{\code{uninstall $package$ $version$}}]
Uninstalls a specific version
of a package from the global package cache.
\item[\fbox{\code{uninstall $package$ $version$}}] Uninstalls a specific version
\item[\fbox{\code{uninstall $package$ $version$}}]
Uninstalls a specific version
of a package from the global package cache.
\item[\fbox{\code{checkout $package$ [--$pre$]}}]
......@@ -699,21 +721,21 @@ Checks out a specific version of a package
into the local directory \code{$package$}
in order to test its operations or install a binary of the package..
\item[\fbox{\code{installapp $package$ [--$pre$]}}]
Install the application provided by the newest version
(compatible to the current compiler) of a package.
The binary of the application is installed into the directory
\code{\$HOME/.cpm/bin}
(this location can be changed via the \code{\$HOME/.cpmrc} configuration file
or by the CPM option \code{--define}, see Section~\ref{sec:config}).
\code{--$pre$} enables the installation of pre-release versions.
\item[\fbox{\code{installapp $package$ $version$}}]
Install the application provided by a specific version of a package.
The binary of the application is installed into the directory
\code{\$HOME/.cpm/bin}
(this location can be changed via the \code{\$HOME/.cpmrc} configuration file
or by the CPM option \code{--define}, see Section~\ref{sec:config}).
% \item[\fbox{\code{installapp $package$ [--$pre$]}}]
% Install the application provided by the newest version
% (compatible to the current compiler) of a package.
% The binary of the application is installed into the directory
% \code{\$HOME/.cpm/bin}
% (this location can be changed via the \code{\$HOME/.cpmrc} configuration file
% or by the CPM option \code{--define}, see Section~\ref{sec:config}).
% \code{--$pre$} enables the installation of pre-release versions.
%
% \item[\fbox{\code{installapp $package$ $version$}}]
% Install the application provided by a specific version of a package.
% The binary of the application is installed into the directory
% \code{\$HOME/.cpm/bin}
% (this location can be changed via the \code{\$HOME/.cpmrc} configuration file
% or by the CPM option \code{--define}, see Section~\ref{sec:config}).
\item[\fbox{\code{upgrade}}]
Upgrades all dependencies of the current package to
......@@ -899,8 +921,7 @@ in all versions.
The compiler compatibility of a package is also relevant when
some version of a package should be examined or installed
(with CPM commands \code{info}, \code{checkout}, \code{install},
\code{installapp}).
(with CPM commands \code{info}, \code{checkout}, \code{install}).
If a newest package should be installed, i.e., no specific version
number is provided, then only the newest version
which is compatible to the current Curry compiler
......
......@@ -8,7 +8,8 @@ import Char ( toLower )
import CSV ( showCSV )
import Directory ( doesFileExist, getAbsolutePath, doesDirectoryExist
, copyFile, createDirectory, createDirectoryIfMissing
, getDirectoryContents, getModificationTime
, getCurrentDirectory, getDirectoryContents
, getModificationTime
, renameFile, removeFile, setCurrentDirectory )
import Distribution ( stripCurrySuffix, addCurrySubdir )
import Either
......@@ -46,7 +47,7 @@ cpmBanner :: String
cpmBanner = unlines [bannerLine,bannerText,bannerLine]
where
bannerText =
"Curry Package Manager <curry-language.org/tools/cpm> (version of 06/06/2017)"
"Curry Package Manager <curry-language.org/tools/cpm> (version of 02/07/2017)"
bannerLine = take (length bannerText) (repeat '-')
main :: IO ()
......@@ -85,12 +86,13 @@ runWithArgs opts = do
(msgs, result) <- case optCommand opts of
NoCommand -> failIO "NoCommand"
Update -> updateRepository config
Compiler o -> compiler o config getRepoGC
Exec o -> exec o config getRepoGC
Doc o -> docCmd o config getRepoGC
Test o -> testCmd o config getRepoGC
Link o -> linkCmd o config
Add o -> addCmd o config
Compiler o -> compiler o config getRepoGC
Exec o -> exec o config getRepoGC
Doc o -> docCmd o config getRepoGC
Test o -> testCmd o config getRepoGC
Uninstall o -> uninstall o config getRepoGC
Link o -> linkCmd o config
Add o -> addCmd o config
Clean -> cleanPackage Info
New o -> newPackage o
_ -> do repo <- readRepository config
......@@ -105,7 +107,6 @@ runWithArgs opts = do
InstallApp o -> installapp o config repo globalCache
Install o -> install o config repo globalCache
Diff o -> diff o config repo globalCache
Uninstall o -> uninstall o config repo globalCache
Upgrade o -> upgrade o config repo globalCache
_ -> error "Internal command processing error!"
mapIO showLogEntry msgs
......@@ -160,7 +161,8 @@ data InstallOptions = InstallOptions
{ instTarget :: Maybe String
, instVersion :: Maybe Version
, instPrerelease :: Bool
, instExecutable :: Bool }
, instExecutable :: Bool
, instExecOnly :: Bool }
data UninstallOptions = UninstallOptions
{ uninstPackage :: Maybe String
......@@ -231,7 +233,7 @@ checkoutOpts s = case optCommand s of
installOpts :: Options -> InstallOptions
installOpts s = case optCommand s of
Install opts -> opts
_ -> InstallOptions Nothing Nothing False True
_ -> InstallOptions Nothing Nothing False True False
uninstallOpts :: Options -> UninstallOptions
uninstallOpts s = case optCommand s of
......@@ -351,16 +353,16 @@ optionParser = optParser
<.> commands (metavar "COMMAND")
( command "checkout" (help "Checkout a package.") Right
(checkoutArgs Checkout)
<|> command "installapp"
(help "Install the application provided by a package.")
Right
(checkoutArgs InstallApp)
<|> command "install" (help "Install a package.")
<|> command "install" (help "Install a package with its dependencies.")
(\a -> Right $ a { optCommand = Install (installOpts a) })
installArgs
<|> command "uninstall" (help "Uninstall package")
<|> command "uninstall" (help "Uninstall a package")
(\a -> Right $ a { optCommand = Uninstall (uninstallOpts a) })
uninstallArgs
<|> command "installapp"
(help "Install the application provided by a package (depreacted).")
Right
(checkoutArgs InstallApp)
<|> command "deps" (help "Calculate dependencies")
(\a -> Right $ a { optCommand = Deps }) []
<|> command "clean" (help "Clean the current package")
......@@ -441,6 +443,11 @@ optionParser = optParser
( short "n"
<> long "noexec"
<> help "Do not install executable.")
<.> flag (\a -> Right $ a { optCommand = Install (installOpts a)
{ instExecOnly = True } })
( short "x"
<> long "exec"
<> help "Install executable only (do not re-install dependencies).")
uninstallArgs =
arg (\s a -> Right $ a { optCommand =
......@@ -706,9 +713,30 @@ checkout (CheckoutOptions pkg (Just ver) _) cfg repo gc =
Just p -> acquireAndInstallPackageWithDependencies cfg repo gc p |>
checkoutPackage cfg repo gc p
install :: InstallOptions -> Config -> Repository -> GlobalCache
-> IO (ErrorLogger ())
install (InstallOptions Nothing Nothing _ instexec False) cfg repo gc =
tryFindLocalPackageSpec "." |>= \pkgdir ->
cleanCurryPathCache pkgdir |>
installLocalDependencies cfg repo gc pkgdir |>= \ (pkg,_) ->
writePackageConfig cfg pkgdir pkg |>
if instexec then installExecutable cfg repo pkg else succeedIO ()
-- Install executable only:
install (InstallOptions Nothing Nothing _ _ True) cfg repo _ =
tryFindLocalPackageSpec "." |>= \pkgdir ->
loadPackageSpec pkgdir |>= \pkg ->
installExecutable cfg repo pkg
install (InstallOptions (Just pkg) vers pre _ _) cfg repo gc = do
fileExists <- doesFileExist pkg
if fileExists
then installFromZip cfg pkg
else installapp (CheckoutOptions pkg vers pre) cfg repo gc
install (InstallOptions Nothing (Just _) _ _ _) _ _ _ =
failIO "Must specify package name"
--- Installs the application (i.e., binary) provided by a package.
--- This is done by checking out the package into CPM's bin_packages
--- cache (default: $HOME/.cpm/bin_packages, see bin_package_path
--- This is done by checking out the package into CPM's application packages
--- cache (default: $HOME/.cpm/app_packages, see APP_PACKAGE_PATH
--- in .cpmrc configuration file) and then install this package.
---
--- Internal note: the installed package should not be cleaned or removed
......@@ -717,40 +745,24 @@ checkout (CheckoutOptions pkg (Just ver) _) cfg repo gc =
installapp :: CheckoutOptions -> Config -> Repository -> GlobalCache
-> IO (ErrorLogger ())
installapp opts cfg repo gc = do
let apppkgdir = appPackageDir cfg
copkgdir = apppkgdir </> coPackage opts
curdir <- getCurrentDirectory
removeDirectoryComplete copkgdir
debugMessage ("Change into directory " ++ apppkgdir)
inDirectory apppkgdir
(checkout opts cfg repo gc |>
log Debug ("Change into directory " ++ copkgdir) |>
(setCurrentDirectory copkgdir >> succeedIO ()) |>
install (InstallOptions Nothing Nothing False True) cfg repo gc )
where
apppkgdir = appPackageDir cfg
copkgdir = apppkgdir </> coPackage opts
install :: InstallOptions -> Config -> Repository -> GlobalCache
-> IO (ErrorLogger ())
install (InstallOptions Nothing Nothing _ instexec) cfg repo gc =
tryFindLocalPackageSpec "." |>= \pkgdir ->
cleanCurryPathCache pkgdir |>
installLocalDependencies cfg repo gc pkgdir |>= \ (pkg,_) ->
writePackageConfig cfg pkgdir pkg |>
if instexec then installExecutable cfg repo pkg else succeedIO ()
install (InstallOptions (Just pkg) Nothing pre _) cfg repo gc = do
fileExists <- doesFileExist pkg
if fileExists
then installFromZip cfg pkg
else case findLatestVersion cfg repo pkg pre of
Nothing -> failIO $ "Package '" ++ pkg ++
"' not found in package repository."
Just p -> acquireAndInstallPackageWithDependencies cfg repo gc p
install (InstallOptions (Just pkg) (Just ver) _ _) cfg repo gc =
case findVersion repo pkg ver of
Nothing -> failIO $ "Package '" ++ pkg ++ "-" ++ (showVersion ver) ++
"' not found in package repository."
Just p -> acquireAndInstallPackageWithDependencies cfg repo gc p
install (InstallOptions Nothing (Just _) _ _) _ _ _ =
failIO "Must specify package name"
( checkout opts cfg repo gc |>
log Debug ("Change into directory " ++ copkgdir) |>
(setCurrentDirectory copkgdir >> succeedIO ()) |>
loadPackageSpec "." |>= \pkg ->
maybe (setCurrentDirectory curdir >>
removeDirectoryComplete copkgdir >>
failIO ("Package '" ++ name pkg ++
"' does not contain an executable, nothing installed."))
(\_ -> install (InstallOptions Nothing Nothing False True False)
cfg repo gc)
(executableSpec pkg)
)
--- Checks the compiler compatibility.
checkCompiler :: Config -> Package -> IO ()
......@@ -801,17 +813,28 @@ installExecutable cfg repo pkg =
else log Info $ "It is recommended to add '" ++bindir++ "' to your path!"
uninstall :: UninstallOptions -> Config -> Repository -> GlobalCache
uninstall :: UninstallOptions -> Config -> IO (Repository,GlobalCache)
-> IO (ErrorLogger ())
uninstall (UninstallOptions (Just pkg) (Just ver)) cfg repo gc =
uninstallPackage cfg repo gc pkg ver
uninstall (UninstallOptions (Just _) Nothing) _ _ _ =
log Error "Please provide a package and version number!"
uninstall (UninstallOptions Nothing (Just _)) _ _ _ =
uninstall (UninstallOptions (Just pkgname) (Just ver)) cfg getRepoGC =
getRepoGC >>= \ (repo,gc) -> uninstallPackage cfg repo gc pkgname ver
--- uninstalls an application (i.e., binary) provided by a package:
uninstall (UninstallOptions (Just pkgname) Nothing) cfg _ = do
let copkgdir = appPackageDir cfg </> pkgname
codirexists <- doesDirectoryExist copkgdir
if codirexists
then loadPackageSpec copkgdir |>= uninstallPackageExecutable cfg |>
removeDirectoryComplete copkgdir >>
log Info ("Package '" ++ pkgname ++
"' uninstalled from application package cache.")
else failIO $ "Package '" ++ pkgname ++ "' is not installed."
uninstall (UninstallOptions Nothing (Just _)) _ _ =
log Error "Please provide a package and version number!"
uninstall (UninstallOptions Nothing Nothing) cfg _ _ =
uninstall (UninstallOptions Nothing Nothing) cfg _ =
tryFindLocalPackageSpec "." |>= \pkgdir ->
loadPackageSpec pkgdir |>= \pkg ->
loadPackageSpec pkgdir |>= uninstallPackageExecutable cfg
uninstallPackageExecutable :: Config -> Package -> IO (ErrorLogger ())
uninstallPackageExecutable cfg pkg =
maybe (succeedIO ())
(\ (PackageExecutable name _ _) ->
let binexec = binInstallDir cfg </> name
......
\documentclass[11pt,fleqn]{article}
\usepackage[T1]{fontenc}
\usepackage{latexsym}
\usepackage{url}
\usepackage{xspace}
\usepackage{graphicx}
\setlength{\textwidth}{16.5cm}
\setlength{\textheight}{23cm}
\renewcommand{\baselinestretch}{1.1}
\setlength{\topmargin}{-1cm}
\setlength{\oddsidemargin}{0cm}
\setlength{\evensidemargin}{0cm}
\setlength{\marginparwidth}{0.0cm}
\setlength{\marginparsep}{0.0cm}
\newlength{\figurewidth}
\setlength{\figurewidth}{\textwidth}
\addtolength{\figurewidth}{-0.4cm}
% font for program texts
\renewcommand{\tt}{\usefont{OT1}{cmtt}{m}{n}\selectfont}
\newcommand{\codefont}{\small\tt}
\usepackage{listings}
\lstset{aboveskip=1.5ex,
belowskip=1.5ex,
showstringspaces=false, % no special string space
mathescape=true,
flexiblecolumns=false,
xleftmargin=2ex,
basewidth=0.52em,
basicstyle=\small\ttfamily}
\lstset{literate={->}{{$\rightarrow{}\!\!\!$}}3
}
\lstnewenvironment{curry}{}{}
\lstnewenvironment{currynomath}{\lstset{mathescape=false}}{} % Curry w/o math
\newcommand{\listline}{\vrule width0pt depth1.75ex}
% program text in normal text
\newcommand{\code}[1]{\mbox{\codefont #1}}
% program text in normal text with apostrophs
\newcommand{\ccode}[1]{``\code{#1}''}
\newcommand{\pindex}[1]{\index{#1@{\tt #1}}} % program elements in index
\newcommand{\CYS}{Curry\xspace} % name of the Curry system described here
\newcommand{\cyshome}{\mbox{\textit{curryhome}}\xspace} % symbolic installation directory
\begin{document}
\sloppy
\input{manual.tex}
% Bibliography
\begin{thebibliography}{10}
\bibitem{HanusSkrlac14}
M.~Hanus and F.~Skrlac.
\newblock A modular and generic analysis server system for functional logic
programs.
\newblock In {\em Proc. of the ACM SIGPLAN 2014 Workshop on Partial Evaluation
and Program Manipulation (PEPM'14)}, pages 181--188. ACM Press, 2014.
\end{thebibliography}
\end{document}
......@@ -23,8 +23,7 @@ of a programmer who is interested to analyze Curry programs.
\subsection{Installation}
The current implementation of CASS is a package
managed by the Curry Package Manager CPM
(see also Section~\ref{sec-cpm}).
managed by the Curry Package Manager CPM.
Thus, to install the newest version of CASS, use the following commands:
%
\begin{curry}
......
......@@ -16,6 +16,10 @@
"name": "cass",
"main": "CASS.Main"
},
"documentation": {
"src-dir": "docs",
"main": "main.tex"
},
"source": {
"git": "https://git.ps.informatik.uni-kiel.de/curry-packages/cass.git",
"tag": "$version"
......
......@@ -13,6 +13,10 @@
"kics2": ">= 0.5.0"
},
"exportedModules": [ "OptParse" ],
"documentation": {
"src-dir": ".",
"main": "README.md"
},
"source": {
"git": "https://git.ps.informatik.uni-kiel.de/curry-packages/opt-parse.git",
"tag": "$version"
......
......@@ -3,3 +3,5 @@ This directory contains some documention for the CurryCheck tool:
manual.tex:
A short description to be included in the main manual of the Curry system.
main.tex:
The manual as a stand-alone LaTeX file.
\documentclass[11pt,fleqn]{article}
\usepackage[T1]{fontenc}
\usepackage{latexsym}
\usepackage{url}
\usepackage{xspace}
\usepackage{graphicx}
\setlength{\textwidth}{16.5cm}
\setlength{\textheight}{23cm}
\renewcommand{\baselinestretch}{1.1}
\setlength{\topmargin}{-1cm}
\setlength{\oddsidemargin}{0cm}
\setlength{\evensidemargin}{0cm}
\setlength{\marginparwidth}{0.0cm}
\setlength{\marginparsep}{0.0cm}
\newlength{\figurewidth}
\setlength{\figurewidth}{\textwidth}
\addtolength{\figurewidth}{-0.4cm}
% font for program texts
\renewcommand{\tt}{\usefont{OT1}{cmtt}{m}{n}\selectfont}
\newcommand{\codefont}{\small\tt}
\usepackage{listings}
\lstset{aboveskip=1.5ex,
belowskip=1.5ex,
showstringspaces=false, % no special string space
mathescape=true,
flexiblecolumns=false,
xleftmargin=2ex,
basewidth=0.52em,
basicstyle=\small\ttfamily}
\lstset{literate={->}{{$\rightarrow{}\!\!\!$}}3
}
\lstnewenvironment{curry}{}{}
\lstnewenvironment{currynomath}{\lstset{mathescape=false}}{} % Curry w/o math
\newcommand{\listline}{\vrule width0pt depth1.75ex}
% program text in normal text
\newcommand{\code}[1]{\mbox{\codefont #1}}
% program text in normal text with apostrophs
\newcommand{\ccode}[1]{``\code{#1}''}
\newcommand{\pindex}[1]{\index{#1@{\tt #1}}} % program elements in index
\newcommand{\CYS}{Curry\xspace} % name of the Curry system described here
\newcommand{\cyshome}{\mbox{\textit{curryhome}}\xspace} % symbolic installation directory
\begin{document}
\sloppy
\input{manual.tex}
% Bibliography
\begin{thebibliography}{10}
\bibitem{AntoyHanus05LOPSTR}
S.~Antoy and M.~Hanus.
\newblock Declarative programming with function patterns.
\newblock In {\em Proceedings of the International Symposium on Logic-based
Program Synthesis and Transformation (LOPSTR'05)}, pages 6--22. Springer LNCS
3901, 2005.
\bibitem{AntoyHanus09}
S.~Antoy and M.~Hanus.
\newblock Set functions for functional logic programming.
\newblock In {\em Proceedings of the 11th ACM SIGPLAN International Conference
on Principles and Practice of Declarative Programming (PPDP'09)}, pages
73--82. ACM Press, 2009.
\bibitem{AntoyHanus12PADL}
S.~Antoy and M.~Hanus.
\newblock Contracts and specifications for functional logic programming.
\newblock In {\em Proc. of the 14th International Symposium on Practical
Aspects of Declarative Languages (PADL 2012)}, pages 33--47. Springer LNCS
7149, 2012.
\bibitem{ChristiansenFischer08FLOPS}
J.~Christiansen and S.~Fischer.
\newblock {EasyCheck} - test data for free.
\newblock In {\em Proc. of the 9th International Symposium on Functional and
Logic Programming (FLOPS 2008)}, pages 322--336. Springer LNCS 4989, 2008.
\bibitem{ClaessenHughes00}
K.~Claessen and J.~Hughes.
\newblock Quickcheck: A lightweight tool for random testing of haskell
programs.
\newblock In {\em International Conference on Functional Programming
(ICFP'00)}, pages 268--279. ACM Press, 2000.
\end{thebibliography}
\end{document}
\documentclass[11pt,fleqn]{article}
\usepackage[T1]{fontenc}
\usepackage{latexsym}
\usepackage{url}