| • Science | • People | • Locations | • Timeline |
The latest semi-official language standard is Haskell 98, intended to specify a minimal, portable version of the language for teaching and as a base for future extensions. The language continues to evolve rapidly, with Hugs and GHC (see below) representing the current de facto standard.
Interesting Haskell features include support for recursive functions and datatypes, pattern matching, list comprehensions and guard statements. The combination of such features can make functions which would be difficult to write in a procedural programming language almost trivial to implement in Haskell. The language is, as of 2002, the functional language on which the most research is being performed. Several variants have been developed: parallelizable versions from MIT and Glasgow, both called Parallel Haskell, more parallel and distributed versions called Distributed Haskell (formerly Goffin) and Eden, a speculatively evaluatingIn computer science, speculative execution is the execution of code whose result may not actually be needed. In the context of functional programming the term "speculative evaluation" is used instead. Speculative execution is an optimization. It is useful version called Eager Haskell and several object oriented versions: Haskell++, O'Haskell and Mondrian.
There is also a Haskell-like language that offers a new method of support for GUI development called Concurrent CleanClean is a purely functional programming language that, in some respects, is similar to the better-known Haskell programming language. Clean has several advantages as a programming language. It features a uniqueness type system, which allows a purely func. Its biggest deviation from Haskell is in the use of uniqueness typeIn computing, a unique type guarantees that an object is used in a single-threaded way, without duplicating references to it. If a value has a unique type it can be modified in place improving the efficiency of functional languages while maintaining theirs for input as opposed to monadsIn computer science, monads are used to express sequential composition under the functional programming paradigm. Essentially, they provide the ability to order commands in a temporal sequence, such that later commands can use the results of earlier comma.
An educational version of Haskell called Gofer was developed by Mark Jones. It was supplanted by HUGS, the Haskell User's Gofer System (see the implementations section of this article).
For more comprehensive information, see the haskell.org website, linked at the end of this article.
The classic definition of the factorial functionNumber theory Combinatorics In mathematics, the factorial of a natural number n is the product of the positive integers less than or equal to n''. This is written as n and pronounced n factorial". The notation n was introduced by Christian Kramp in 1808.:
fac 0 = 1 fac n = n * fac (n - 1)The cute definition of the factorial function (using a built-in Haskell list notation and the standard product function):
A naive implementation of a function which returns the nth number in the Fibonacci sequence:
fib 0 = 0 fib 1 = 1 fib n = fib (n - 2) + fib (n - 1)A function which returns a list of the Fibonacci numbers in linear time:
fibs@(_:rest) = 0 : 1 : (zipWith (+) fibs rest)The previous function creates an infinite list, which is possible because of lazy evaluation.
One could implement fib as:
(!! is an operator which gets the nth element of a list).
The Quicksort algorithm can be elegantly expressed in Haskell with the help of list comprehensions:
qsort [] = [] qsort (pivot:tail) = qsort left ++ [pivot] ++ qsort right where left = [y | y <- tail, y < pivot] right = [y | y <- tail, y >= pivot](Note that because of excessive copying and concatenation of lists this code can be rather slow, depending on the implementation.)