Haskell for non-Haskell's sake
John Hughes
rjmh@cs.chalmers.se
Fri, 5 Sep 2003 15:59:35 +0200 (MET DST)
On Fri, 5 Sep 2003, Johannes Waldmann wrote:
> On Thu, 4 Sep 2003, John Hughes wrote:
>
> > I use Haskell and Wash/CGI for administering students lab work.
>
> same here (in addition to Haskell programs for actually grading the homework).
>
> just curious: what kind of data base do you use?
> we take Krasimir Angelov's MySql binding (from HToolkit).
>
> this has the advantage that the administrator
> can directly view/edit the data base
> via the sql shell resp. via webmin.
>
I wrote a very simple database implementation in Haskell, which stores and
fetches Showable Haskell values with an associated key. The interface is
very simple: just
getRecord :: Key k r => k -> IO (Maybe r)
putRecord :: Key k r => k -> r -> IO ()
where the instance of the Key class determines where the records are
stored.
Advantages:
* Trivial interface
* No need to worry about configuring any other software
* Very quick to implement
* Can store most kinds of Haskell data
* I can directly view/edit the database with emacs!
Disadvantages:
* Must handle locking myself
* No transactions, so no rollback on failure
* Leads to a "network style", where records explicitly contain the keys of
related records.
* Must maintain invariants such as "if A points to B then B points to A"
myself.
* Performance is poor, but...
With 170 students the amount of data involved is small, and with each
accessing the system a few dozen times over a period of weeks, this isn't
a performance critical application.
I know this isn't the "right" way to do it, but it was quick, easy, and it
works pretty well.
John