[Haskell-cafe] Inverse of HaskellDB

Ozgur Akgun ozgurakgun at gmail.com
Tue Sep 28 11:33:46 EDT 2010


>
> How do you define relationships between data types?


Well, why is it any different from other fields? From one of your examples
[1], I'd expect you to have a list of questions in the Quiz data type, and
if necessary, a quiz field in the Question data type. This might be a bit
tricky but certainly achievable [2].

Something like the following:

data Quiz = Quiz {
  description :: String,
  subject     :: String,
  questions   :: [Question]
} deriving (Show, Read)

data Question = Question {
  title   :: String,
  choiceA :: String,
  choiceB :: String,
  choiceC :: String,
  quiz    :: Quiz
} deriving (Show, Read)


[1] http://github.com/chriseidhof/persist/blob/master/examples/Model.phs
[2] http://www.haskell.org/haskellwiki/Tying_the_Knot

On 28 September 2010 16:13, Chris Eidhof <chris at eidhof.nl> wrote:

> Hey Jonathan,
>
> I've done some work on this. The hard part is defining relationships
> between datatypes: how do you model this in Haskell? I've some code on
> github: http://github.com/chriseidhof/persist, you might be interested in
> that.
>
> -chris
>
> On 25 sep 2010, at 21:31, Jonathan Geddes wrote:
>
> > Cafe,
> >
> > HaskellDB takes a database schema and produces Haskell data structures
> > (plus some other query-related stuff for its EDSL query language).
> >
> > What I'm looking for is the inverse of this functionality. I want to
> > create tables based on a Haskell data structure with a few simple
> > rules. These rules include: if a field is not of the form `Maybe a'
> > then it can't be nullable in the database. If a field is not a
> > primitive (in the database) then it is actually stored in another
> > table and a reference id is stored in the table. Tables are produced
> > recursively, unless they already exist, etc.
> >
> > The HaskellDB approach is great for interfacing with existing tables,
> > but in my case I already have data structures and now I would like a
> > quick way to create tables to persist them.
> >
> > Does such a thing exist? If not, would you find it useful? I may take
> > this up as a side project if it does not already exist and others
> > would find it useful.
> >
> > Thanks,
> >
> > --Jonathan
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100928/298006c6/attachment-0001.html


More information about the Haskell-Cafe mailing list