De siste par dagene har jeg lagt ut på en ferd for å lære meg Haskell, har satt de små grå på en skikkelig prøve. Ikke alt er like enkelt å forstå, blant annet gjelder dette Monad eller skal vi si Mona(d) ja omtrent like vanskelig å forstå seg på som jenter til tider, men skal vel knekke den koden også.
Jeg kom over et blogg-innlegg hvor vedkommende hadde problemer med at ikke det kom mer feilmelding enn “Exception: (unknown)” noe det ikke var så vanskelig å finne ut av hvordan løse. Verre var det å få ut noe data og prøve å få redusert koden litt.
Om noen har forslag til forbedringer / forenklinger så hyl ut, jeg er helt fersk med Haskell, men her nå min kode med HSQL for å hente ut noen rader fra en tabell.
- import Database.HSQL.MySQL (connect)
- import Database.HSQL
- import Control.Exception
- import Monad (liftM2)
- retrieveRecords c = query c "SELECT nick, name from user" >>= collectRows getRow
- where getRow :: Statement -> IO (String,String)
- getRow stmt = liftM2 (,) (getFieldValue stmt "nick")
- (getFieldValue stmt "name")
- main =
- catchDyn (do
- c <- connect "localhost" "din_database" "din_bruker" "ditt_passord"
- l <- retrieveRecords c
- let loop [] _ = return ()
- loop (head:tail) f = f head >> loop tail f
- loop l (\x -> print x)
- disconnect c)
- handler
- where
- handler :: SqlError -> IO ()
- handler err = print err
Skriver ut følgende innhold fra min database:
- ("senikk","Terje Pedersen")
- ("cornet86","Cato Pedersen")
liftM2:
- getRow stmt = liftM2 (,) (getFieldValue stmt "nick") (getFieldValue stmt "name")
- getRow stmt = do
- nick <- getFieldValue stmt "nick"
- name <- getFieldValue stmt "name"
- return (nick, name)
Relevante innlegg/sider/lenker
| Innlegg: | På forsiden: |




0 tilbaketråkk: