b'\n_START_ARTICLE_\nHaskell (programmeringssprog)\n_START_PARAGRAPH_\nHaskell er navnet p\xc3\xa5 et rent funktionsprogrammeringssprog med en ikke-striks ("doven") semantik og st\xc3\xa6rke, statiske typer. Det er opkaldt efter logikeren Haskell Curry.\n_START_SECTION_\nHistorie\n_START_PARAGRAPH_\nEfter Research Software Ltd. i 1985 udviklede programmeringssproget Miranda steg interessen for dovent evaluerede programmeringssprog. Til konferencen Functional Programming Languages and Computer Architecture (FPCA) i 1987 i Portland, Oregon blev man enige om behovet for en komit\xc3\xa9 til at varetage en \xc3\xa5ben standard for s\xc3\xa5danne sprog. Komit\xc3\xa9ens form\xc3\xa5l skulle derfor v\xc3\xa6re at s\xc3\xa6tte de eksisterende sprog sammen til \xc3\xa9t sprog, hvis form\xc3\xa5l skulle v\xc3\xa6re grundlaget for ny forskning i funktionsprogrammeringssprog._NEWLINE_Komit\xc3\xa9ens arbejde resulterede i 1990 i Haskell 1.0-standarden som senere blev opdateret med 1.1, 1.2, 1.3 og 1.4. I slutningen af 1997 blev Haskell 98-standarden udgivet med form\xc3\xa5let at angive en stabil, minimal og portabel version af sproget, samt et standardbibliotek til undervisningsbrug og videre udvidelse. Komit\xc3\xa9en gav eksplicit udtryk for at skabelsen af nye udvidelser var vel\xc3\xb8nskede._NEWLINE_I februar 1999 blev Haskell 98-standarden udgivet under navnet The Haskell 98 Report. I januar 2003 udkom en revideret udgave under navnet Haskell 98 Language and Libraries: The Revised Report. Sproget er i stadig udvikling og den mest popul\xc3\xa6re compiler til sproget, Glasgow Haskell Compiler (GHC), er udgangspunktet for de fleste udvidelser s\xc3\xa5som generaliserede, algebraiske datatyper og typefamilier._NEWLINE_Tidligt i 2006 p\xc3\xa5begyndtes endnu en revision af standarden for sproget under navnet Haskell Prime med henblik p\xc3\xa5 at udgive \xc3\xa5rlige revisioner. Den f\xc3\xb8rste \xc3\xa5rlige revision under dette initiativ var Haskell 2010 som blev annonceret i november 2009 og udgivet i juli 2010.\n_START_SECTION_\nEgenskaber\n_START_PARAGRAPH_\nHaskell underst\xc3\xb8tter doven evaluering, m\xc3\xb8nstergenkendelse, list comprehension, typeklasser, typepolymorfi og typeinferens. Det er et rent funktionsprogrammeringssprog, hvilket betyder at funktioner generelt ikke har bivirkninger, og at de derfor modellerer sig t\xc3\xa6t op af den matematiske definition for funktioner. En bivirkning skal forst\xc3\xa5s som en del af et programs resultat, som ikke alene fremg\xc3\xa5r af returv\xc3\xa6rdien for en funktion (for eksempel I/O)._NEWLINE_Haskell har et st\xc3\xa6rkt, statisk typesystem baseret p\xc3\xa5 Hindley-Milner-typeinferens. Haskells prim\xc3\xa6re innovation i denne retning er tilf\xc3\xb8jelsen af typeklasser, som oprindeligt var tilt\xc3\xa6nkt som en m\xc3\xa5de at tilf\xc3\xb8je overloading, men som sidenhen har fundet mange flere anvendelser._NEWLINE_Sproget har en \xc3\xa5ben standard og adskillige implementeringer eksisterer af denne._NEWLINE_Der eksisterer desuden et aktivt milj\xc3\xb8 omkring sproget og mere end 3600 tredjeparts-open source-moduler findes i Hackage-pakkedepotet.\n_START_SECTION_\nHello World\n_START_PARAGRAPH_\nF\xc3\xb8lgende er Hello World-programmet skrevet i Haskell. Det er v\xc3\xa6rd at bem\xc3\xa6rke at alle linjer foruden den sidste kan udelades, men i st\xc3\xb8rre programmer har en strukturerende betydning:_NEWLINE_module Main wheremain :: IO ()main = putStrLn "Hello, World!"\n_START_SECTION_\nFakultetsfunktionen\n_START_PARAGRAPH_\nF\xc3\xb8lgende er fakultetsfunktionen skrevet p\xc3\xa5 forskellige m\xc3\xa5der:_NEWLINE_-- Typeannotering (valgfri):factorial :: Integer -> Integer-- Ved brug af rekursion og m\xc3\xb8nstergenkendelsefactorial 0 = 1factorial n = n * factorial (n - 1)-- Ved brug af rekursion uden m\xc3\xb8nsterkendelsefactorial n = if n > 0 then n * factorial (n-1) else 1-- Ved at bruge en liste og en biblioteksfunktionfactorial n = product [1..n]-- Ved at bruge en liste og foldning (funktionsprogrammeringsbegreb)factorial n = foldl1 (*) [1..n]-- Ved at bruge punktfri stil hvor argumentet til funktionen g\xc3\xb8res implicitfactorial = foldr (*) 1 . enumFromTo 1\n_START_SECTION_\nFibonacci-tal\n_START_PARAGRAPH_\nF\xc3\xb8lgende er effektive implementeringer af Fibonacci-tallene som uendelige lister:_NEWLINE_-- Typeannotering (valgfri):fib :: Int -> Integer-- Med selv-refererende datafib n = fibs !! n_NEWLINE_        where fibs = 0 : scanl (+) 1 fibs_NEWLINE_        -- 0,1,1,2,3,5,...-- Samme som ovenst\xc3\xa5ende, uden brug af scanl-biblioteksfunktionenfib n = fibs !! n_NEWLINE_        where fibs = 0 : 1 : next fibs_NEWLINE_              next (a : t@(b:_)) = (a+b) : next t-- Lignende fremgangsm\xc3\xa5de som anvender zipWith-biblioteksfunktionenfib n = fibs !! n_NEWLINE_        where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)-- Ved at definere en generator-funktionfib n = fibs (0,1) !! n_NEWLINE_        where fibs (a,b) = a : fibs (b,a+b)_NEWLINE_Typen "Int" hentyder til heltal med en st\xc3\xb8rrelse begr\xc3\xa6nset af maskinens registre (brugt som et indeks ind i lister ved hj\xc3\xa6lp af !!-operatoren), mens "Integer" kan bruges for at opn\xc3\xa5 heltalsv\xc3\xa6rdier af vilk\xc3\xa5rlig st\xc3\xb8rrelse. For eksempel kan ovenst\xc3\xa5ende kode anvendes til hurtigt at beregne det 10.000. Fibonacci-tal som et 2090-cifret tal'