On 23 Feb 2008, at 3:30 AM, Radosław Grzanka wrote:
Hi,
I'm developing toy application to learn HDBC. I have "problem" with
doing relations mapping. Actually I don't know is it a problem or
"feature". ;)
Anyway, I have two tables with relation between them:
(this example is simplified to the whole structure of database, you
can imagine)
CREATE TABLE TD_set (
setId INTEGER PRIMARY KEY,
setName TEXT NOT NULL
)
CREATE TABLE TO_card (
cardId INTEGER PRIMARY KEY AUTOINCREMENT,
setId INTEGER NOT NULL," -- Relation
to TD_set
setSeq INTEGER NOT NULL
)
(no foreign key as sqlite3 does not care anyway - at least AFAIK)
And in Haskell:
type CardSet = String
data Card = Card {
set :: CardSet,
seqNo :: Integer,
}
There is no problem with filling the structure Card with "seqNo" but I
can't fill "set". I would have to put there IO (CardSet) but I don't
want to do that as whole structure returned from my mapping function
is already inside IO monad. Can I do it?
Here is my (perfect) function - http://hpaste.org/5839 . See
"getCards" and some helper functions. This does not compile as (I
believe) getElement wants to return IO (CardSet)
Thank you in advance for all your input.
You want to put toItem into the IO monad:
toItem [cardId, setId, setSeq] = do
set_ <- getElement
return $ Card {
set = set_
seqNo = fromSql setSeq,
}
toItem x = fail ("Unexpected result in getCards: " ++ (show x))
Then use
mapM toItem cards
instead of
return $ map toItem cards
jcc
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe