Haskell

Från Unix.se, den fria unixresursen.

Haskell är ett icke-strikt, statiskt, rent funktionellt språk som fått sitt namn efter Haskell Curry. Det påminner mycket om Miranda.

Innehåll

Statisk typning

Trots att språket använder sig av statisk typning behöver man allt som oftast inte bry sig om att skriva ner typerna. Haskell klarar själv att lista ut den mest generella typen för funktionen. Exempel:

 foo x y = print (x ++ y)

Här listar Haskell ut att x och y är listor av samma typ (eftersom ++ sätter ihop två listor), och att den typen går att skriva ut (den är medlem i typklassen Show). Ibland är det dock bra i dokumentationssyfte att skriva ut typerna manuellt.

Exempel

Tack vare språkets lata natur, kan vi i Haskell enkelt arbeta med oändliga datastrukturer. Några roliga exempel:

 -- Listan med alla fakulteter
 facs = 1 : zipWith (*) facs [1..]
 
 -- Listan med hela fibonacci-serien
 fibs = 1 : 1 : zipWith (+) fibs (tail fibs)

Haskell kommer endast att evaluera de delar av listorna som behövs för att beräkna ett visst uttryck. T.ex. kan vi plocka ut de tio första elementen ur fibonacci-listan, och då kommer bara dessa att beräknas.

> take 10 fibs
[1,1,2,3,5,8,13,21,34,55]

Som man lätt inser blir det dock fortfarande problem med uttryck som måste titta på varje element i den oändliga listan:

> filter (<10) fibs
[1,1,2,3,5,8,
ERROR - Garbage collection fails to reclaim sufficient space

Kanske inte så underligt. I detta fall vill vi istället göra så här:

> takeWhile (<10) fibs
[1,1,2,3,5,8]
  

Externa länkar

Information

Implementationer

  • GHC
  • Hugs (http://www.haskell.org/hugs/)
  • nhc98 (http://www.haskell.org/nhc98/)

Humor

Personliga verktyg