I've now made a lot of progress with HaskellDirect. 
I've built the .so file with one ldap function and I 
wanted to test it out.

I wonder if someone could help a little?

Here's the C code I want to reproduce in Haskell.

main( int argc, char **argv )
{
        LDAP            *ld;
        LDAPMessage     *result, *e;
        BerElement      *ber;
        char            *a, *dn;
        char            **vals;
        int             i;

        /* get a handle to an LDAP connection */
        if ( (ld = ldap_init( MY_HOST, MY_PORT )) == NULL ) {
                perror( "ldap_init" );
                return( 1 );
        }                                                                      

HaskellDirect generates the following interface for ldap_init.

data LDAP = Ldap                                                               

ldap_init :: String
          -> Int32
          -> IO LDAP                                                          

What I'd like to be able to say is:

module Main(main) where

import Prelude
import Ldap
import Addr

main =
   do x <- ldap_init "wssun16" 389
      if x == nullAddr then putStrLn "Failure" else putStrLn "Success"        

but obviously I can't because nullAddr isn't of type LDAP.

Type checking
ERROR "main.hs" (line 8): Type error in application
*** Expression     : x == nullAddr
*** Term           : x
*** Type           : LDAP
*** Does not match : Addr

If I look in the HaskellDirect example for pcre then somehow the
following gets generated

sizeofPcre :: Word32
sizeofPcre = sizeofAddr

addrToPcre :: Addr
           -> Pcre
addrToPcre v = Pcre v

If I had an addrToLDAP function then I could write

if x == addrToLDAP nullAddr then ...

which would be type correct.
                                                                                       
                                            
So what do I have to write in the .idl or .asf files to get HaskellDirect
to generate a function addrToLDAP?

Dominic.



Reply via email to