View Single Post
Jeg har brukt Haskell i skole- og industrisammenheng de siste årene. Etter min mening er Haskell det beste språkvalget til "general purpose"-programmering i dag, da det er et meget godt språk, som samtidig er populært nok til å ha mange biblioteker og verktøy, og mange folk som kan hjelpe deg. De språka hvis totalpakke er på nivå med Haskell (primært Idris), er ikke like etablerte.

Det ble sagt tidligere i tråden at en ulempe med funksjonell programmering er at det blir uoversiktelig i store kodebaser med mange deltakere. Dette kjenner jeg meg overhodet ikke igjen i, da jeg vil påstå at maintainability er hovedfordelen et Haskellprosjekt har over et prosjekt i et ikke-funksjonelt paradigme. Haskell skalerer nydelig, og å gjøre store endringer på store prosjekter er en fryd.

Det ble også sagt at statisk typesjekking ofte ikke er verdt det. Dette utsagnet er jeg også skeptisk ovenfor. Statiske typer i ALGOL 60 og lignende (C, C++, Java, osv.) er ganske lite nyttige, og ofte i veien. Statiske typer i Haskell er helt fantastiske. I/O som en type gjør matematisk renhet nydelig å jobbe med. Algebraiske datatyper lar deg representere dype tanker, og renhet lar deg transformere dem bekymringsfritt. Typer i Haskell er rett og slett en drøm å bruke.

Hva angår monader, så ville forklart dem ulikt til ulike mennesker. En kategoriteoretiker kan man fortelle at de er monoider i kategorien endofunktorer (hvor typer er endofunktorer i Haskell). Til en C++-programmerer ville jeg forklart det som et semikolon man kan overlaste. Kort fortalt har man i matematikken at to uttrykk ved siden av hverandre ikke egentlig betyr noe. Monader lar det uttrykke hva de skal bety. Og de kan bety forskjellige ting i forskjellige situasjoner. Om det høres beundringsverdig abstrakt ut, så er det fordi det er det. Monader i Haskeller er i all hovedsak en funksjon med typen M a -> (a -> b) -> M b. Her er a og b typer, og M en typekonstruktør. Vi har med andre ord polymorfiske typer og en polymorfisk kontekst. Jeg anbefaler den lettfattelige artikkelen You Could Have Invented Monads: <http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html>. Det gir dog liten mening å sette seg inn i monader før man setter seg inn i det grunnleggende.