<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Hi,<br><br>It's come time to share something that I've been playing around with recently:<br>a branch of HaskellDB which replaces the home-grown Record code with HList<br>records. It's definitely not ready for primetime, but I thought it'd be a good<br>time to post the code and solicit some feedback from the community.<br><br>HaskellDB the concept is very promising, but IMHO the code still falls short<br>of that promise. Hopefully this is a small step in the right direction -- the<br>advantages of using HList:<br>* Shared implementation of extensible records<br>* Additional features from HList<br>&nbsp; * Better error messages for record misuse<br>&nbsp; * "Lacks" predicates <br>* Simpler code<br><br>As an example of how this can be better, a DB insert looks like so:<br>&gt; insert db table $ constantRecord $<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; film .=. "Munchie" .*.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; director .=. Just "Jim Wynorski" .*.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; emptyRecord<br>The columns need not appear in the same order as in the database. If you forget<br>a column, you'll get "error: No instance for (Fail (FieldNotFound (Proxy Director)))"<br>rather than an opaque error. Using the new "insertOpt" function, Maybe columns<br>will default to Nothing rather than needing to be specified.<br><br>The details:<br><br>I haven't updated everything, but there's enough to run test/TestCases.hs<br>under Postgresql. TestCases is probably the best place to look for examples of<br>the new syntax for now.<br><br>HList had name conflicts with HaskellDB's SQL expression language<br>((.*.), (.++.), etc.) My temporary band-aid is to move the expression functions<br>to Database.HaskellDB.SqlExpr, and require people to import qualified.<br><br>The Attr type is gone, columns labels are untyped now. I also replaced a <br>few instances of primitive type-level recursion with HMap/HMapOut. This makes<br>the code simpler, and the type signatures more complex -- type families would<br>help a lot here, I think.<br><br>Feedback welcome! You can find my darcs tree at:<br>&nbsp;&nbsp;&nbsp; http://mysite.verizon.net/vzewxzuh/sitebuildercontent/sitebuilderfiles/haskelldb-hlist-20090516.tar.gz<br>It also requires minor changes to HList, available at:<br>&nbsp;&nbsp;&nbsp; http://mysite.verizon.net/vzewxzuh/sitebuildercontent/sitebuilderfiles/hlist-20090516.tar.gz<br>I'll talk to the HList people about getting those merged.<br><br>Thanks!<br><br>Brian Bloniarz<br><br><br /><hr />HotmailŪ has a new way to see what's up with your friends. <a href='http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009' target='_new'>Check it out.</a></body>
</html>