HSQL - Haskell SQL

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.

  1. import Database.HSQL.MySQL (connect)
  2. import Database.HSQL
  3. import Control.Exception
  4. import Monad (liftM2)
  5. retrieveRecords c = query c "SELECT nick, name from user" >>= collectRows getRow
  6. where getRow :: Statement -> IO (String,String)
  7. getRow stmt = liftM2 (,) (getFieldValue stmt "nick")
  8. (getFieldValue stmt "name")
  9. main =
  10. catchDyn (do
  11. c <- connect "localhost" "din_database" "din_bruker" "ditt_passord"
  12. l <- retrieveRecords c
  13. let loop [] _ = return ()
  14. loop (head:tail) f = f head >> loop tail f
  15. loop l (\x -> print x)
  16. disconnect c)
  17. handler
  18. where
  19. handler :: SqlError -> IO ()
  20. handler err = print err

Skriver ut følgende innhold fra min database:

  1. ("senikk","Terje Pedersen")
  2. ("cornet86","Cato Pedersen")

liftM2:

  1. getRow stmt = liftM2 (,) (getFieldValue stmt "nick") (getFieldValue stmt "name")
Er det samme som å skrive:
  1. getRow stmt = do
  2. nick <- getFieldValue stmt "nick"
  3. name <- getFieldValue stmt "name"
  4. return (nick, name)

Tilbaketråkk url: klikk her!
Stikkord: haskell
Fb

Relevante innlegg/sider/lenker

0 tilbaketråkk:

1 kommentar:

Jim Stuttard
Etter 131 dager
Hi, Compiling this with ghc-6.8.1 on I get “last statement in a ‘do’ constuct must end with an expression”.

Platform: ubuntu gutsy

Any suggestions?

TIA

Jim

Kommenter








Arrow-right2
Meta