Haskell introduksjon

Thu 31 December 2009

Hva er Haskell?

Haskell er intet mindre en et

Av denne setningen skjønner vi at Haskell ikke nødvendigvis er rette språket for alle. Vi vil i denne artikkelen prøve å belyse noe av fordelene og ulempene med Haskell slik at du selv kan bestemme om dette er noe for deg. For mange er Haskell endel av pensum i utdanning, for andre kan det være et reelt alternativ for å utføre arbeidsoppgaver, eller kanskje vil du bare lære deg noe nytt og spennende?

Hvorfor bruke Haskell?

Haskell er et høynivå språk. Dette innebærer at man tenker "Hva" istedetfor "Hvordan". Dette flytter fokuset over på å få gjort en oppgave, istedetfor hvordan en skal gå frem for å gjøre den.

Vi bruker f.eks ikke tid og krefter på å allokere minne eller gjøre garbage collection i Haskell, dette skjer automatisk bak kulissene. Dette gjør at vi får kortere og mer oversiktlig kode.

Eksempel: Quicksort algoritme i Haskell VS Quicksort algoritme i C

I Quicksort eksempelet ser vi at Haskell gjør samme jobben på betraktelig færre kodelinjer. Det er lettere å lese og å forstå hva som foregår.

Polymorfisme

Quicksort eksempelet viser oss også enda et av Haskells fordeler, nemlig polymorfisme. C versjonen sorterer kun tabell med heltal (Integer) mens Haskell versjonen sorterer alle typer (flyttall, lister med lister, karakterer etc.) som har en logisk definert større/mindre relasjon. Med andre ord vi kan gjenbruke koden for flere typer.

Lazy evaluation

"Non-strict" funksjonelle språk ala Haskell evaluerer kun de deler av programmet som er nødvendig for å finne svaret. Dette kalles lazy evaluation.

Eksempel:

  • grep printf Foo.c | wc <--- Teller antall forekomster av printf i filen Foo.c
  • grep printf Foo.c <--- Produserer alle linjer hvor printf forekommer i filen Foo.c, som igjen blir sendt til wc
  • grep printf Foo.c | head 5 <--- Produserer de 5 første linjene hvor printf forekommer i filen Foo.c

Vi ser at i siste kommandoen blir grep kommandoen avbrutt etter de 5 første treffene. Det er head 5 som styrer hvor mange linjer grep skal produsere, istedetfor at grep produserer alle linjer og så velges de 5 første ut etterpå. Dette gjør at vi sparer oss for å generere treff fra grep som vi uansett ikke er intressert i.

Pure

Haskell tillater ikke side-effekter, det vil si endring av tilstander som er utenfor systemet f.eks endring globale verdier. Haskell isolerer alle impure beregninger i et separat system kalt "monads".

Functional

Haskell evaluerer programmer på samme måten som en evaluerer funksjoner i matematikken. I motsetning til imperative språk (c, java, etc) som evaluerer en sekvens av uttrykk i en bestemt rekkefølge.

Hvordan installere Haskell?

Vi vil her prøve å guide deg igjennom prosessen med å installere Glasgow Haskell Compiler på et windows basert system. Vi vil også prøve å få Haskell støtte i Eclipse IDE.

1: Last ned GHC compiler. Nyeste versjon (16.juli 2009) er ghc-6.10.4-i386-windows.exe.

2: Kjør install filen.

3: Last ned Eclipse Galileio. Nyeste versjon finner du her.

4: Last ned Scion IDE bibliotek. Nyeste versjon (16.juli 2009) finner du her.

5: Last ned cabal for windows. Nyeste versjon (16.juli 2009) finner du her.

6: cabal update, cabal upgrade og cabal install når du står i Scion mappen. Utføres i kommandolinje / ledetekst / cmd / shell.

NB! I Vista må du kjøre cmd som administrator for å kunne utføre trinn 6. start -> programmer -> tilbehør -> høyreklikk "Ledetekst" -> kjør som administrator.

7: I Eclipse: "Help -> Install Software", Legg inn 'http://eclipsefp.sf.net/updates' som URL.

8: I Eclipse: "Help -> Install Software", Installer Functional Programming -> Fp2, Eclipse support 1.10.

9: I Eclipse: "Window -> Preferences -> Haskell", Konfigurer filsti til GHC exec og Scion-server exec. Ligger gjerne under C:\Programfiler\Haskell\bin eller lignende.

10: Ferdig.

PS! Du kan hente alle filene du trenger fra lokal kopi her. Fillager er oppdatert pr. 29.08.2009

PS!! Det viser seg at Haskell Eclipse plugin ikke lenger er i aktiv utvikling, men den fungerer fint til å lage kompilerte .exe filer med.

Er du ute etter interaktiv sessions kan vi heller anbefale WinHugs. Hugs er kun en interpreter, så merk at du ikke kan lage standalones med den.

Ressurser

Tagged as : haskell

Comments

Tagged as : haskell