[Haskell-cafe] Suggestions for #defines with FFI
Donn Cave
donn at drizzle.com
Wed Jul 27 17:15:34 EDT 2005
On Wed, 27 Jul 2005, John Goerzen wrote:
...
> Right now, I'm using hsc2hs, and writing something like this:
>
> #enum LDAPInt, , LDAP_PORT, LDAPS_PORT, LDAP_API_VERSION, LDAP_VENDOR_NAME, \
> LDAP_OPT_API_INFO, LDAP_OPT_DESC, LDAP_OPT_DEREF, \
> LDAP_OPT_SIZELIMIT, LDAP_OPT_TIMELIMIT, LDAP_OPT_REFERRALS, \
> LDAP_OPT_RESTART, LDAP_OPT_PROTOCOL_VERSION, LDAP_OPT_SERVER_CONTROLS, \
>
> That boils down to this:
>
> ldapPort :: LDAPInt
> ldapPort = 389
> ldapsPort :: LDAPInt
> ldapsPort = 636
>
> So I still lack typechecking, and have to manually key in all the
> identifiers, but at least the system pulls their values and types in for
> me.
I wanted them to be enumerated types in Haskell where appropriate,
and the only thing I could think of was
data LDAPOpt = LDAP_OPT_X_TLS
| LDAP_OPT_X_TLS_REQUIRE_CERT
| LDAP_OPT_PROTOCOL_VERSION
| LDAP_OPT_DEBUG_LEVEL
fromLDAPOpt LDAP_OPT_X_TLS = (#const LDAP_OPT_X_TLS)
fromLDAPOpt LDAP_OPT_X_TLS_REQUIRE_CERT = (#const LDAP_OPT_X_TLS_REQUIRE_CERT)
fromLDAPOpt LDAP_OPT_PROTOCOL_VERSION = (#const LDAP_OPT_PROTOCOL_VERSION)
fromLDAPOpt LDAP_OPT_DEBUG_LEVEL = (#const LDAP_OPT_DEBUG_LEVEL)
etc.
Donn Cave, donn at drizzle.com
More information about the Haskell-Cafe
mailing list