Curry ist eine experimentelle, funktional-logische Programmiersprache, die auf Haskell basiert. Sie verbindet funktionale Programmierung mit Konzepten der logischen Programmierung wie nichtdeterministischen Funktionen, freien Variablen und Constraint-Programming. Entwickelt wird Curry seit Mitte der 1990er-Jahre an der Universität Kiel (Michael Hanus), Aachen und Portland.

Wichtigste Implementierungen

  • PAKCS – Portland Aachen Kiel Curry System, übersetzt Curry nach Prolog
  • KiCS2 – Kiel Curry System 2, übersetzt Curry nach Haskell
  • MCC – Münster Curry Compiler
  • Curry2Go – neuere Implementierung mit Go-Backend

Curry-Quellcode steht in Dateien mit der Endung .curry. Module werden wie in Haskell mit module Main where deklariert.

PAKCS nutzen

pakcs                      # interaktive Curry-Shell (REPL) starten
:load Main.curry           # Modul laden
main                       # Ausdruck/Goal auswerten
:quit                      # PAKCS beenden

KiCS2 nutzen

kics2 Main.curry           # kompiliert Curry-Code nach Haskell (Modul Main)
./Main                     # ausführbare Datei starten

Beispiel

Nichtdeterminismus: Die Funktion coin liefert wahlweise 0 oder 1.

coin = 0 ? 1               -- ? ist der Nichtdeterminismus-Operator
main = coin

Curry wird in der Lehre und Forschung eingesetzt, um deklarative Programme mit Suche, Constraints und verteilten Anwendungen zu kombinieren. Verwandt sind die rein funktionalen Sprachen Haskell-Befehle und Clean-Befehle.