HaskellDB

Dominic Steinitz dominic.steinitz@blueyonder.co.uk
Tue, 4 Feb 2003 21:07:54 -0000


Simon,

It would also work for my LDAP library where I had to invent new names for
labels in records even though they were the same name in ASN.1.

data LDAPResult = MkLDAPResult {
                   resultCode_1   :: ResultCode,
                   matchedDN_1    :: LDAPDN,
                   errorMessage_1 :: LDAPString,
                   referral_1     :: {-  [3]  -}  Maybe Referral }
     deriving(Eq, Ord, Read)

and

data BindResponse = {- [APPLICATION 1] -}
                    MkBindResponse {
                     {- COMPONENTS OF LDAPResult -}
                     resultCode_2    ::              ResultCode,
                     matchedDN_2     ::              LDAPDN,
                     errorMessage_2  ::              LDAPString,
                     referral_2      :: {-  [3]  -}  Maybe Referral,
                     serverSaslCreds :: {- [7]  -}  Maybe OctetString }
     deriving(Eq, Ord, Read)

Daan,

Would this be worth adding to the HToolkit repository?

Dominic.


> Dear Dominic, Simon,
>
> > Funnily enough, I'm currently ruminating on the possibility of adding
> > extensible records to GHC.  My current thought is: much like TRex,
> > except with 'has' predicates instead of 'lacks' predicates.
>
> I seem to remember that I have discussed "has" predicates once
> with Mark Shields and there seem to be some problems with it.
> Maybe it was just the polymorphic extensions but I am not entirely
> sure about that. Maybe you should contact Mark about this and ask
> his (expert) opinion.
>
> > Question: does anyone really care about polymorphic extension.
>
> The extensibility of records is not a necessary feature for haskell/DB.
> The only reason haskellDB uses TREX is to share label names across
> different tables. However, during the  implementation of haskellDB, I also
> used a technique where records are nested tuples. Labels can than be
> modelled as overloaded functions in multiple parameter type classes.
> Unfortunately, this lead to a lot of  'unresolved overloading' messages.
>
> However, I believe that functional dependencies can be used nowadays
> to remedy this problem -- and thus use haskellDB on most Haskell systems.
> (I actually have a functional pearl in the works about modelling records
> with type classes and functional dependencies.)
>
> Anyway: bottom line: your proposal is good enough for Haskell/DB and
> seems a *very* worthwile addition to Haskell.
>
> > Sorry that this message is a bit brief; I'm just back from a week away.
> > I can elaborate if anyone would be interested.
>
> Yes! I would love to hear more about it. :-)
>
> All the best,
>     Daan.
>
> > Simon
> >
> >
> > | -----Original Message-----
> > | From: Dominic Steinitz [mailto:dominic.steinitz@blueyonder.co.uk]
> > | Sent: 26 January 2003 10:19
> > | To: libraries@haskell.org
> > | Cc: daan@cs.uu.nl
> > | Subject: HaskellDB
> > |
> > | Having used HToolkit successfully to extract information from a MySQL
> > | database, I am painfully aware of the limitations of sending embedded
> > SQL
> > | strings and finding out at runtime that something didn't quite work
> > (in an
> > | often subtle and difficult to track down way).
> > |
> > | I'd love to be able to put HaskellDB on top of HToolkit. There are two
> > | approaches: i) add extensible records to ghc or ii) modify HaskellDB
> > so it
> > | uses Haskell records not extensible records (I'd have modify HaskellDB
> > | anyway to use HToolkit rather than talk to ODBC directly). The latter
> > sounds
> > | as though it might be more feasible that the former. Having read the
> > paper
> > | and briefly looked at the code, I assume the extensibility is required
> > if
> > | you have two tables each with the same column name and therefore you
> > want to
> > | use the same label in two different records. Obviously you can't do
> > this
> > | with Haskell records as the labels become top level functions.
> > However, if I
> > | rename labels then I won't have this problem. For example, if I have
> > two
> > | tables, passwd and notify each containing a column called email then I
> > could
> > | have labels notifyEmail and passwdEmail and remember that they really
> > | referred to email.
> > |
> > | Does anyone have any views on this?
> > |
> > | Dominic Steinitz
> > |
> > | _______________________________________________
> > | Libraries mailing list
> > | Libraries@haskell.org
> > | http://www.haskell.org/mailman/listinfo/libraries
> >
> >
> >
>