diff --git a/Bindings/APR/AnyLock.hsc b/Bindings/APR/AnyLock.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/AnyLock.hsc
@@ -0,0 +1,32 @@
+#include <bindings.dsl.h>
+#include <apr_anylock.h>
+
+module Bindings.APR.AnyLock where
+#strict_import
+import Bindings.APR.ErrNo
+import Bindings.APR.Proc.Mutex
+import Bindings.APR.Thread.Mutex
+import Bindings.APR.Thread.RWLock
+
+#synonym_t tm_lock, CInt
+#num apr_anylock_none
+#num apr_anylock_procmutex
+#num apr_anylock_readlock
+#num apr_anylock_writelock
+
+#starttype union apr_anylock_u_t
+#  union_field pm, Ptr <apr_proc_mutex_t>
+#  if APR_HAS_THREADS
+#    union_field tm, Ptr <apr_thread_mutex_t>
+#    union_field rw, Ptr <apr_thread_rwlock_t>
+#  endif
+#stoptype
+
+#starttype struct apr_anylock_t
+#field type, <tm_lock>
+#field lock, <apr_anylock_u_t>
+#stoptype
+
+#cinline APR_ANYLOCK_LOCK   , Ptr <apr_anylock_t> -> IO <apr_status_t>
+#cinline APR_ANYLOCK_TRYLOCK, Ptr <apr_anylock_t> -> IO <apr_status_t>
+#cinline APR_ANYLOCK_UNLOCK , Ptr <apr_anylock_t> -> IO <apr_status_t>
diff --git a/Bindings/APR/Base64.hsc b/Bindings/APR/Base64.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/Base64.hsc
@@ -0,0 +1,13 @@
+#include <bindings.dsl.h>
+#include <apr_base64.h>
+
+module Bindings.APR.Base64 where
+#strict_import
+
+#ccall apr_base64_encode_len   , CInt -> IO CInt
+#ccall apr_base64_encode       , Ptr CChar -> Ptr CChar -> CInt -> IO CInt
+#ccall apr_base64_encode_binary, Ptr CChar -> Ptr CUChar -> CInt -> IO CInt
+#ccall apr_base64_decode_len   , Ptr CChar -> IO CInt
+#ccall apr_base64_decode       , Ptr CChar -> Ptr CChar -> IO CInt
+#ccall apr_base64_decode_binary, Ptr CUChar -> Ptr CChar -> IO CInt
+
diff --git a/Bindings/APR/Buckets.hsc b/Bindings/APR/Buckets.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/Buckets.hsc
@@ -0,0 +1,217 @@
+#include <bindings.dsl.h>
+#include <bindings.apr.ring.h>
+#include <apr_buckets.h>
+
+module Bindings.APR.Buckets where
+#strict_import
+import Bindings.APR
+import Bindings.APR.Allocator.Types
+import Bindings.APR.ErrNo
+import Bindings.APR.File.Types
+import Bindings.APR.MMap
+import Bindings.APR.Network.IO
+import Bindings.APR.Pools
+import Bindings.APR.Want
+
+#num APR_BUCKET_BUFF_SIZE
+
+#integral_t apr_read_type_e
+#num APR_BLOCK_READ
+#num APR_NONBLOCK_READ
+
+#opaque_t apr_bucket_alloc_t
+
+#num APR_BUCKET_DATA
+#num APR_BUCKET_METADATA
+#starttype struct apr_bucket_type_t
+#  field name       , Ptr CChar
+#  field num_func   , CInt
+#  field is_metadata, CInt
+#  field destroy    , FunPtr (Ptr () -> IO ())
+#  field read       , FunPtr (Ptr <apr_bucket> -> Ptr (Ptr CChar) -> Ptr <apr_size_t> -> <apr_read_type_e> -> IO <apr_status_t>)
+#  field setaside   , FunPtr (Ptr <apr_bucket> -> Ptr <apr_pool_t> -> IO <apr_status_t>)
+#  field split      , FunPtr (Ptr <apr_bucket> -> <apr_size_t> -> IO <apr_status_t>)
+#  field copy       , FunPtr (Ptr <apr_bucket> -> Ptr (Ptr <apr_bucket>) -> IO <apr_status_t>)
+#stoptype
+
+#starttype struct apr_bucket
+#  apr_ring_entry_field link, <apr_bucket>
+#  field type  , Ptr <apr_bucket_type_t>
+#  field length, <apr_size_t>
+#  field start , <apr_off_t>
+#  field data  , Ptr ()
+#  field free  , FunPtr (Ptr () -> IO ())
+#  field list  , Ptr <apr_bucket_alloc_t>
+#stoptype
+
+#apr_ring_head_t apr_bucket_list, <apr_bucket>
+#starttype struct apr_bucket_brigade
+#  field p           , Ptr <apr_pool_t>
+#  field list        , <apr_bucket_list>
+#  field bucket_alloc, Ptr <apr_bucket_alloc_t>
+#stoptype
+
+#callback apr_brigade_flush, Ptr <apr_bucket_brigade> -> Ptr () -> IO <apr_status_t>
+
+#cinline APR_BRIGADE_CHECK_CONSISTENCY, Ptr <apr_bucket_brigade> -> IO ()
+#cinline APR_BUCKET_CHECK_CONSISTENCY , Ptr <apr_bucket> -> IO ()
+
+#cinline APR_BRIGADE_SENTINEL   , Ptr <apr_bucket_brigade> -> IO (Ptr <apr_bucket>)
+#cinline APR_BRIGADE_EMPTY      , Ptr <apr_bucket_brigade> -> IO CInt
+#cinline APR_BRIGADE_FIRST      , Ptr <apr_bucket_brigade> -> IO (Ptr <apr_bucket>)
+#cinline APR_BRIGADE_LAST       , Ptr <apr_bucket_brigade> -> IO (Ptr <apr_bucket>)
+#cinline APR_BRIGADE_INSERT_HEAD, Ptr <apr_bucket_brigade> -> Ptr <apr_bucket> -> IO ()
+#cinline APR_BRIGADE_INSERT_TAIL, Ptr <apr_bucket_brigade> -> Ptr <apr_bucket> -> IO ()
+#cinline APR_BRIGADE_CONCAT     , Ptr <apr_bucket_brigade> -> Ptr <apr_bucket_brigade> -> IO ()
+#cinline APR_BRIGADE_PREPEND    , Ptr <apr_bucket_brigade> -> Ptr <apr_bucket_brigade> -> IO ()
+
+#cinline APR_BUCKET_INSERT_BEFORE, Ptr <apr_bucket> -> Ptr <apr_bucket> -> IO ()
+#cinline APR_BUCKET_INSERT_AFTER , Ptr <apr_bucket> -> Ptr <apr_bucket> -> IO ()
+#cinline APR_BUCKET_NEXT         , Ptr <apr_bucket> -> IO (Ptr <apr_bucket>)
+#cinline APR_BUCKET_PREV         , Ptr <apr_bucket> -> IO (Ptr <apr_bucket>)
+#cinline APR_BUCKET_REMOVE       , Ptr <apr_bucket> -> IO ()
+#cinline APR_BUCKET_INIT         , Ptr <apr_bucket> -> IO ()
+#cinline APR_BUCKET_IS_METADATA  , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_FLUSH     , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_EOS       , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_FILE      , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_PIPE      , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_SOCKET    , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_HEAP      , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_TRANSIENT , Ptr <apr_bucket> -> IO CInt
+#cinline APR_BUCKET_IS_IMMORTAL  , Ptr <apr_bucket> -> IO CInt
+#if APR_HAS_MMAP
+#  cinline APR_BUCKET_IS_MMAP    , Ptr <apr_bucket> -> IO CInt
+#endif
+#cinline APR_BUCKET_IS_POOL      , Ptr <apr_bucket> -> IO CInt
+
+#starttype struct apr_bucket_refcount
+#  field refcount, CInt
+#stoptype
+
+#starttype struct apr_bucket_heap
+#  field refcount , <apr_bucket_refcount>
+#  field base     , Ptr CChar
+#  field alloc_len, <apr_size_t>
+#  field free_func, FunPtr (Ptr () -> IO ())
+#stoptype
+
+#starttype struct apr_bucket_pool
+#  field heap, <apr_bucket_heap>
+#  field base, Ptr CChar
+#  field pool, Ptr <apr_pool_t>
+#  field list, Ptr <apr_bucket_alloc_t>
+#stoptype
+
+#if APR_HAS_MMAP
+#  starttype struct apr_bucket_mmap
+#    field refcount, <apr_bucket_refcount>
+#    field mmap    , <apr_mmap_t>
+#  stoptype
+#endif
+
+#starttype struct apr_bucket_file
+#  field refcount, <apr_bucket_refcount>
+#  field fd      , Ptr <apr_file_t>
+#  field readpool, Ptr <apr_pool_t>
+#  if APR_HAS_MMAP
+#    field can_mmap, CInt
+#  endif
+#stoptype
+
+#starttype union apr_bucket_structs
+#  union_field b   , <apr_bucket>
+#  union_field heap, <apr_bucket_heap>
+#  union_field pool, <apr_bucket_pool>
+#  if APR_HAS_MMAP
+#    union_field mmap, <apr_bucket_mmap>
+#  endif
+#  union_field file, <apr_bucket_file>
+#stoptype
+
+#num APR_BUCKET_ALLOC_SIZE
+
+#ccall apr_brigade_create     , Ptr <apr_pool_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket_brigade>)
+#ccall apr_brigade_destroy    , Ptr <apr_bucket_brigade> -> IO <apr_status_t>
+#ccall apr_brigade_cleanup    , Ptr () -> IO <apr_status_t>
+#ccall apr_brigade_split_ex   , Ptr <apr_bucket_brigade> -> Ptr <apr_bucket> -> Ptr <apr_bucket_brigade> -> IO (Ptr <apr_bucket_brigade>)
+#ccall apr_brigade_split      , Ptr <apr_bucket_brigade> -> Ptr <apr_bucket> -> IO (Ptr <apr_bucket_brigade>)
+#ccall apr_brigade_partition  , Ptr <apr_bucket_brigade> -> <apr_off_t> -> Ptr (Ptr <apr_bucket>) -> IO <apr_status_t>
+#ccall apr_brigade_length     , Ptr <apr_bucket_brigade> -> CInt -> Ptr <apr_off_t> -> IO <apr_status_t>
+#ccall apr_brigade_flatten    , Ptr <apr_bucket_brigade> -> Ptr CChar -> Ptr <apr_size_t> -> IO <apr_status_t>
+#ccall apr_brigade_pflatten   , Ptr <apr_bucket_brigade> -> Ptr (Ptr CChar) -> Ptr <apr_size_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_brigade_split_line , Ptr <apr_bucket_brigade> -> Ptr <apr_bucket_brigade> -> <apr_read_type_e> -> <apr_off_t> -> IO <apr_status_t>
+#ccall apr_brigade_to_iovec   , Ptr <apr_bucket_brigade> -> Ptr <iovec> -> Ptr CInt -> <apr_status_t>
+-- FIXME: apr_brigade_to_vputstrs takes va_list
+#ccall apr_brigade_write      , Ptr <apr_bucket_brigade> -> <apr_brigade_flush> -> Ptr () -> Ptr CChar -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_brigade_writev     , Ptr <apr_bucket_brigade> -> <apr_brigade_flush> -> Ptr () -> Ptr <iovec> -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_brigade_puts       , Ptr <apr_bucket_brigade> -> <apr_brigade_flush> -> Ptr () -> Ptr CChar -> IO <apr_status_t>
+#ccall apr_brigade_putc       , Ptr <apr_bucket_brigade> -> <apr_brigade_flush> -> Ptr () -> CChar -> IO <apr_status_t>
+-- FIXME: apr_brigade_putstrs takes varargs
+-- FIXME: apr_brigade_printf takes varargs
+-- FIXME: apr_brigade_vprintf takes va_list
+#ccall apr_brigade_insert_file, Ptr <apr_bucket_brigade> -> Ptr <apr_file_t> -> <apr_off_t> -> <apr_off_t> -> Ptr <apr_pool_t> -> IO (Ptr <apr_bucket>)
+
+#ccall apr_bucket_alloc_create   , Ptr <apr_pool_t> -> Ptr (<apr_bucket_alloc_t>)
+#ccall apr_bucket_alloc_create_ex, Ptr <apr_allocator_t> -> Ptr (<apr_bucket_alloc_t>)
+#ccall apr_bucket_alloc_destroy  , Ptr <apr_bucket_alloc_t> -> IO ()
+#ccall apr_bucket_alloc          , <apr_size_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr ())
+#ccall apr_bucket_free           , Ptr () -> IO ()
+
+#cinline apr_bucket_destroy , Ptr <apr_bucket> -> IO ()
+#cinline apr_bucket_delete  , Ptr <apr_bucket> -> IO ()
+#cinline apr_bucket_read    , Ptr <apr_bucket> -> Ptr (Ptr CChar) -> Ptr <apr_size_t> -> <apr_read_type_e> -> IO <apr_status_t>
+#cinline apr_bucket_setaside, Ptr <apr_bucket> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#cinline apr_bucket_split   , Ptr <apr_bucket> -> <apr_size_t> -> IO <apr_status_t>
+#cinline apr_bucket_copy    , Ptr <apr_bucket> -> Ptr (Ptr <apr_bucket>) -> IO <apr_status_t>
+
+#ccall apr_bucket_setaside_noop   , Ptr <apr_bucket> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_bucket_setaside_notimpl, Ptr <apr_bucket> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_bucket_split_notimpl   , Ptr <apr_bucket> -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_bucket_copy_notimpl    , Ptr <apr_bucket> -> Ptr (Ptr <apr_bucket>) -> IO <apr_status_t>
+#ccall apr_bucket_destroy_noop    , Ptr () -> IO ()
+
+#globalvar apr_bucket_type_flush    , <apr_bucket_type_t>
+#globalvar apr_bucket_type_eos      , <apr_bucket_type_t>
+#globalvar apr_bucket_type_file     , <apr_bucket_type_t>
+#globalvar apr_bucket_type_heap     , <apr_bucket_type_t>
+#if APR_HAS_MMAP
+#  globalvar apr_bucket_type_mmap   , <apr_bucket_type_t>
+#endif
+#globalvar apr_bucket_type_pool     , <apr_bucket_type_t>
+#globalvar apr_bucket_type_pipe     , <apr_bucket_type_t>
+#globalvar apr_bucket_type_immortal , <apr_bucket_type_t>
+#globalvar apr_bucket_type_transient, <apr_bucket_type_t>
+#globalvar apr_bucket_type_socket   , <apr_bucket_type_t>
+
+#ccall apr_bucket_simple_split, Ptr <apr_bucket> -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_bucket_simple_copy , Ptr <apr_bucket> -> Ptr (Ptr <apr_bucket>) -> IO <apr_status_t>
+
+#ccall apr_bucket_shared_make   , Ptr <apr_bucket> -> Ptr () -> <apr_off_t> -> <apr_size_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_shared_destroy, Ptr () -> IO CInt
+#ccall apr_bucket_shared_split  , Ptr <apr_bucket> -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_bucket_shared_copy   , Ptr <apr_bucket> -> Ptr (Ptr <apr_bucket>) -> IO <apr_status_t>
+
+#ccall apr_bucket_eos_create      , Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_eos_make        , Ptr <apr_bucket> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_flush_create    , Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_flush_make      , Ptr <apr_bucket> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_immortal_create , Ptr CChar -> <apr_size_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_immortal_make   , Ptr <apr_bucket> -> Ptr CChar -> <apr_size_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_transient_create, Ptr CChar -> <apr_size_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_transient_make  , Ptr <apr_bucket> -> Ptr CChar -> <apr_size_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_heap_create     , Ptr CChar -> <apr_size_t> -> FunPtr (Ptr () -> IO ()) -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_heap_make       , Ptr <apr_bucket> -> Ptr CChar -> <apr_size_t> -> FunPtr (Ptr () -> IO ()) -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_pool_create     , Ptr CChar -> <apr_size_t> -> Ptr <apr_pool_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_pool_make       , Ptr <apr_bucket> -> Ptr CChar -> <apr_size_t> -> Ptr <apr_pool_t> -> IO (Ptr <apr_bucket>)
+#if APR_HAS_MMAP
+#  ccall apr_bucket_mmap_create   , Ptr <apr_mmap_t> -> <apr_off_t> -> <apr_size_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#  ccall apr_bucket_mmap_make     , Ptr <apr_bucket> -> Ptr <apr_mmap_t> -> <apr_off_t> -> <apr_size_t> -> IO (Ptr <apr_bucket>)
+#endif
+#ccall apr_bucket_socket_create   , Ptr <apr_socket_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_socket_make     , Ptr <apr_bucket> -> Ptr <apr_socket_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_pipe_create     , Ptr <apr_file_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_pipe_make       , Ptr <apr_bucket> -> Ptr <apr_file_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_file_create     , Ptr <apr_file_t> -> <apr_off_t> -> <apr_size_t> -> Ptr <apr_pool_t> -> Ptr <apr_bucket_alloc_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_file_make       , Ptr <apr_bucket> -> Ptr <apr_file_t> -> <apr_off_t> -> <apr_size_t> -> Ptr <apr_pool_t> -> IO (Ptr <apr_bucket>)
+#ccall apr_bucket_file_enable_mmap, Ptr <apr_bucket> -> CInt -> IO <apr_status_t>
diff --git a/Bindings/APR/DBD.hsc b/Bindings/APR/DBD.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/DBD.hsc
@@ -0,0 +1,81 @@
+#include <bindings.dsl.h>
+#include <apr_dbd.h>
+
+module Bindings.APR.DBD where
+#strict_import
+import Bindings.APR.ErrNo
+import Bindings.APR.Pools
+
+#integral_t apr_dbd_type_e
+#num APR_DBD_TYPE_NONE
+#num APR_DBD_TYPE_TINY
+#num APR_DBD_TYPE_UTINY
+#num APR_DBD_TYPE_SHORT
+#num APR_DBD_TYPE_USHORT
+#num APR_DBD_TYPE_INT
+#num APR_DBD_TYPE_UINT
+#num APR_DBD_TYPE_LONG
+#num APR_DBD_TYPE_ULONG
+#num APR_DBD_TYPE_LONGLONG
+#num APR_DBD_TYPE_ULONGLONG
+#num APR_DBD_TYPE_FLOAT
+#num APR_DBD_TYPE_DOUBLE
+#num APR_DBD_TYPE_STRING
+#num APR_DBD_TYPE_TEXT
+#num APR_DBD_TYPE_TIME
+#num APR_DBD_TYPE_DATE
+#num APR_DBD_TYPE_DATETIME
+#num APR_DBD_TYPE_TIMESTAMP
+#num APR_DBD_TYPE_ZTIMESTAMP
+#num APR_DBD_TYPE_BLOB
+#num APR_DBD_TYPE_CLOB
+#num APR_DBD_TYPE_NULL
+
+#opaque_t apr_dbd_driver_t
+#opaque_t apr_dbd_t
+#opaque_t apr_dbd_transaction_t
+#opaque_t apr_dbd_results_t
+#opaque_t apr_dbd_row_t
+#opaque_t apr_dbd_prepared_t
+
+#ccall apr_dbd_init         , Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_dbd_get_driver   , Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr <apr_dbd_driver_t>) -> IO <apr_status_t>
+#ccall apr_dbd_open_ex      , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr <apr_dbd_t>) -> Ptr (Ptr CChar) -> IO <apr_status_t>
+#ccall apr_dbd_open         , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr <apr_dbd_t>) -> IO <apr_status_t>
+#ccall apr_dbd_close        , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_t> -> IO <apr_status_t>
+#ccall apr_dbd_name         , Ptr <apr_dbd_driver_t> -> IO (Ptr CChar)
+#ccall apr_dbd_native_handle, Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_t> -> IO (Ptr ())
+#ccall apr_dbd_check_conn   , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> IO CInt
+#ccall apr_dbd_set_dbname   , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr CChar -> IO CInt
+
+#ccall apr_dbd_transaction_start, Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr (Ptr <apr_dbd_transaction_t>) -> IO CInt
+#ccall apr_dbd_transaction_end  , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_transaction_t> -> IO CInt
+
+#num APR_DBD_TRANSACTION_COMMIT
+#num APR_DBD_TRANSACTION_ROLLBACK
+#num APR_DBD_TRANSACTION_IGNORE_ERRORS
+
+#ccall apr_dbd_transaction_mode_get, Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_transaction_t> -> IO CInt
+#ccall apr_dbd_transaction_mode_set, Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_transaction_t> -> CInt -> IO CInt
+
+#ccall apr_dbd_query     , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_t> -> Ptr CInt -> Ptr CChar -> IO CInt
+#ccall apr_dbd_select    , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr (Ptr <apr_dbd_results_t>) -> Ptr CChar -> CInt -> IO CInt
+#ccall apr_dbd_num_cols  , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_results_t> -> IO CInt
+#ccall apr_dbd_num_tuples, Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_results_t> -> IO CInt
+#ccall apr_dbd_get_row   , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_results_t> -> Ptr (Ptr <apr_dbd_row_t>) -> CInt -> IO CInt
+#ccall apr_dbd_get_entry , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_row_t> -> CInt -> IO (Ptr CChar)
+#ccall apr_dbd_get_name  , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_results_t> -> CInt -> IO (Ptr CChar)
+#ccall apr_dbd_error     , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_t> -> CInt -> IO (Ptr CChar)
+#ccall apr_dbd_escape    , Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_t> -> Ptr CChar -> Ptr <apr_dbd_t> -> IO (Ptr CChar)
+
+#ccall apr_dbd_prepare , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr CChar -> Ptr CChar -> Ptr (Ptr <apr_dbd_prepared_t>) -> IO CInt
+#ccall apr_dbd_pquery  , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr CInt -> Ptr <apr_dbd_prepared_t> -> CInt -> Ptr (Ptr CChar) -> IO CInt
+#ccall apr_dbd_pselect , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr (Ptr <apr_dbd_results_t>) -> Ptr <apr_dbd_prepared_t> -> CInt -> CInt -> Ptr (Ptr CChar) -> IO CInt
+-- FIXME: apr_dbd_pvquery takes varargs
+-- FIXME: apr_dbd_pvselect takes varargs
+#ccall apr_dbd_pbquery , Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr CInt -> Ptr <apr_dbd_prepared_t> -> Ptr (Ptr ()) -> IO CInt
+#ccall apr_dbd_pbselect, Ptr <apr_dbd_driver_t> -> Ptr <apr_pool_t> -> Ptr <apr_dbd_t> -> Ptr (Ptr <apr_dbd_results_t>) -> Ptr <apr_dbd_prepared_t> -> CInt -> Ptr (Ptr ()) -> IO CInt
+-- FIXME: apr_dbd_pvbquery takes varargs
+-- FIXME: apr_dbd_pvbselect takes varargs
+
+#ccall apr_dbd_datum_get, Ptr <apr_dbd_driver_t> -> Ptr <apr_dbd_row_t> -> CInt -> <apr_dbd_type_e> -> Ptr () -> IO <apr_status_t>
diff --git a/Bindings/APR/DBM.hsc b/Bindings/APR/DBM.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/DBM.hsc
@@ -0,0 +1,35 @@
+#include <bindings.dsl.h>
+#include <apr_dbm.h>
+
+module Bindings.APR.DBM where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.File.Info
+import Bindings.APR.Pools
+
+#opaque_t apr_dbm_t
+
+#starttype apr_datum_t
+#  field dptr , Ptr CChar
+#  field dsize, <apr_size_t>
+#stoptype
+
+#num APR_DBM_READONLY
+#num APR_DBM_READWRITE
+#num APR_DBM_RWCREATE
+#num APR_DBM_RWTRUNC
+
+#ccall apr_dbm_open_ex, Ptr (Ptr <apr_dbm_t>) -> Ptr CChar -> Ptr CChar -> <apr_int32_t> -> <apr_fileperms_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_dbm_open   , Ptr (Ptr <apr_dbm_t>) -> Ptr CChar -> <apr_int32_t> -> <apr_fileperms_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_dbm_close  , Ptr <apr_dbm_t> -> IO ()
+#cinline apr_dbm_fetch  , Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> Ptr <apr_datum_t> -> IO <apr_status_t>
+#cinline apr_dbm_store  , Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> Ptr <apr_datum_t> -> IO <apr_status_t>
+#cinline apr_dbm_delete , Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> IO <apr_status_t>
+#cinline apr_dbm_exists , Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> IO CInt
+#ccall apr_dbm_firstkey, Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> IO <apr_status_t>
+#ccall apr_dbm_nextkey , Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> IO <apr_status_t>
+#cinline apr_dbm_freedatum, Ptr <apr_dbm_t> -> Ptr <apr_datum_t> -> IO ()
+#ccall apr_dbm_geterror, Ptr <apr_dbm_t> -> Ptr CInt -> Ptr CChar -> <apr_size_t> -> IO (Ptr CChar)
+#ccall apr_dbm_get_usednames_ex, Ptr <apr_pool_t> -> Ptr CChar -> Ptr CChar -> Ptr (Ptr CChar) -> Ptr (Ptr CChar) -> IO <apr_status_t>
+#ccall apr_dbm_get_usednames, Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr CChar) -> Ptr (Ptr CChar) -> IO ()
diff --git a/Bindings/APR/Date.hsc b/Bindings/APR/Date.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/Date.hsc
@@ -0,0 +1,12 @@
+#include <bindings.dsl.h>
+#include <apr_date.h>
+
+module Bindings.APR.Date where
+#strict_import
+import Bindings.APR.Time
+
+#num APR_DATE_BAD
+
+#ccall apr_date_checkmask , Ptr CChar -> Ptr CChar -> IO CInt
+#ccall apr_date_parse_http, Ptr CChar -> IO <apr_time_t>
+#ccall apr_date_parse_rfc , Ptr CChar -> IO <apr_time_t>
diff --git a/Bindings/APR/Hooks.hsc b/Bindings/APR/Hooks.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/Hooks.hsc
@@ -0,0 +1,22 @@
+#include <bindings.dsl.h>
+#include <apr_hooks.h>
+
+module Bindings.APR.Hooks where
+#strict_import
+import Bindings.APR.Pools
+import Bindings.APR.Tables
+
+#num APR_HOOK_REALLY_FIRST
+#num APR_HOOK_FIRST
+#num APR_HOOK_MIDDLE
+#num APR_HOOK_LAST
+#num APR_HOOK_REALLY_LAST
+
+#globalvar apr_hook_global_pool  , Ptr <apr_pool_t>
+#globalvar apr_hook_debug_enabled, CInt
+#globalvar apr_hook_debug_current, Ptr CChar
+
+#ccall apr_hook_sort_register , Ptr CChar -> Ptr (Ptr <apr_array_header_t>) -> IO ()
+#ccall apr_hook_sort_all      , Ptr ()
+#ccall apr_hook_debug_show    , Ptr CChar -> Ptr (Ptr CChar) -> Ptr (Ptr CChar) -> IO ()
+#ccall apr_hook_deregister_all, Ptr ()
diff --git a/Bindings/APR/LDAP.hsc b/Bindings/APR/LDAP.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/LDAP.hsc
@@ -0,0 +1,44 @@
+#include <bindings.dsl.h>
+#include <apr_ldap.h>
+
+module Bindings.APR.LDAP where
+#strict_import
+
+#num APR_HAS_LDAP
+
+#num APR_HAS_NETSCAPE_LDAPSDK
+#num APR_HAS_SOLARIS_LDAPSDK
+#num APR_HAS_NOVELL_LDAPSDK
+#num APR_HAS_MOZILLA_LDAPSDK
+#num APR_HAS_OPENLDAP_LDAPSDK
+#num APR_HAS_MICROSOFT_LDAPSDK
+#num APR_HAS_TIVOLI_LDAPSDK
+#num APR_HAS_ZOS_LDAPSDK
+#num APR_HAS_OTHER_LDAPSDK
+
+#if APR_HAS_LDAP
+
+#  num APR_HAS_LDAP_SSL
+#  num APR_HAS_LDAP_URL_PARSE
+
+#  opaque_t LDAP
+
+#  num APR_HAS_LDAPSSL_CLIENT_INIT
+#  num APR_HAS_LDAPSSL_CLIENT_DEINIT
+#  num APR_HAS_LDAPSSL_ADD_TRUSTED_CERT
+#  num APR_HAS_LDAP_START_TLS_S
+#  num APR_HAS_LDAP_SSLINIT
+#  num APR_HAS_LDAPSSL_INIT
+#  num APR_HAS_LDAPSSL_INSTALL_ROUTINES
+
+#  num APR_LDAP_SIZELIMIT
+
+#  starttype struct apr_ldap_err_t
+#    field reason, Ptr CChar
+#    field msg   , Ptr CChar
+#    field rc    , CInt
+#  stoptype
+
+#  cinline APR_LDAP_IS_SERVER_DOWN, CInt -> IO CInt
+
+#endif
diff --git a/Bindings/APR/LDAP/Init.hsc b/Bindings/APR/LDAP/Init.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/LDAP/Init.hsc
@@ -0,0 +1,19 @@
+#include <bindings.dsl.h>
+#include <apr_ldap_init.h>
+
+module Bindings.APR.LDAP.Init where
+#strict_import
+import Bindings.APR.LDAP
+import Bindings.APR.Pools
+
+#if APR_HAS_LDAP
+
+#  num APU_LDAP_INSUFFICIENT_ACCESS
+#  cinline APU_LDAP_SECURITY_ERROR, CInt -> IO CInt
+
+#  ccall apr_ldap_ssl_init  , Ptr <apr_pool_t> -> Ptr CChar -> CInt -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+#  ccall apr_ldap_ssl_deinit, IO CInt
+#  ccall apr_ldap_init      , Ptr <apr_pool_t> -> Ptr (Ptr <LDAP>) -> Ptr CChar -> CInt -> CInt -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+#  ccall apr_ldap_info      , Ptr <apr_pool_t> -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+
+#endif
diff --git a/Bindings/APR/LDAP/Option.hsc b/Bindings/APR/LDAP/Option.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/LDAP/Option.hsc
@@ -0,0 +1,47 @@
+#include <bindings.dsl.h>
+#include <apr_ldap_option.h>
+
+module Bindings.APR.LDAP.Option where
+#strict_import
+import Bindings.APR.LDAP
+import Bindings.APR.Pools
+
+#if APR_HAS_LDAP
+
+#  num APR_LDAP_OPT_TLS
+#  num APR_LDAP_OPT_TLS_CERT
+#  num APR_LDAP_OPT_VERIFY_CERT
+#  num APR_LDAP_OPT_REFERRALS
+#  num APR_LDAP_OPT_REFHOPLIMIT
+
+#  num APR_LDAP_CA_TYPE_UNKNOWN
+#  num APR_LDAP_CA_TYPE_DER
+#  num APR_LDAP_CA_TYPE_BASE64
+#  num APR_LDAP_CA_TYPE_SECMOD
+#  num APR_LDAP_CERT_TYPE_UNKNOWN
+#  num APR_LDAP_CERT_TYPE_DER
+#  num APR_LDAP_CERT_TYPE_BASE64
+#  num APR_LDAP_CERT_TYPE_KEY3_DB
+#  num APR_LDAP_CERT_TYPE_NICKNAME
+#  num APR_LDAP_KEY_TYPE_UNKNOWN
+#  num APR_LDAP_KEY_TYPE_DER
+#  num APR_LDAP_KEY_TYPE_BASE64
+#  num APR_LDAP_CERT_TYPE_PFX
+#  num APR_LDAP_KEY_TYPE_PFX
+#  num APR_LDAP_CA_TYPE_CACERTDIR_BASE64
+
+#  starttype struct apr_ldap_opt_tls_cert_t
+#    field type    , CInt
+#    field path    , Ptr CChar
+#    field password, Ptr CChar
+#  stoptype
+
+#  num APR_LDAP_NONE
+#  num APR_LDAP_SSL
+#  num APR_LDAP_STARTTLS
+#  num APR_LDAP_STOPTLS
+
+#  ccall apr_ldap_get_option, Ptr <apr_pool_t> -> Ptr <LDAP> -> CInt -> Ptr () -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+#  ccall apr_ldap_set_option, Ptr <apr_pool_t> -> Ptr <LDAP> -> CInt -> Ptr () -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+
+#endif
diff --git a/Bindings/APR/LDAP/Rebind.hsc b/Bindings/APR/LDAP/Rebind.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/LDAP/Rebind.hsc
@@ -0,0 +1,16 @@
+#include <bindings.dsl.h>
+#include <apr_ldap.h>
+#include <apr_ldap_rebind.h>
+
+module Bindings.APR.LDAP.Rebind where
+#strict_import
+import Bindings.APR.ErrNo
+import Bindings.APR.LDAP
+import Bindings.APR.Pools
+
+#if APR_HAS_LDAP
+
+#  ccall apr_ldap_rebind_add   , Ptr <apr_pool_t> -> Ptr <LDAP> -> Ptr CChar -> Ptr CChar -> IO <apr_status_t>
+#  ccall apr_ldap_rebind_remove, Ptr <LDAP> -> IO <apr_status_t>
+
+#endif
diff --git a/Bindings/APR/LDAP/URL.hsc b/Bindings/APR/LDAP/URL.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/LDAP/URL.hsc
@@ -0,0 +1,43 @@
+#include <bindings.dsl.h>
+#include <apr_ldap.h>
+#include <apr_ldap_url.h>
+
+module Bindings.APR.LDAP.URL where
+#strict_import
+import Bindings.APR.LDAP
+import Bindings.APR.Pools
+
+#if APR_HAS_LDAP
+
+#  starttype struct apr_ldap_url_desc_t
+#    field lud_next  , Ptr <apr_ldap_url_desc_t>
+#    field lud_scheme, Ptr CChar
+#    field lud_host  , Ptr CChar
+#    field lud_port  , CInt
+#    field lud_dn    , Ptr CChar
+#    field lud_attrs , Ptr (Ptr CChar)
+#    field lud_scope , CInt
+#    field lud_filter, Ptr CChar
+#    field lud_exts  , Ptr (Ptr CChar)
+#    field lud_crit_exts, CInt
+#  stoptype
+
+#  num APR_LDAP_URL_SUCCESS
+#  num APR_LDAP_URL_ERR_MEM
+#  num APR_LDAP_URL_ERR_PARAM
+#  num APR_LDAP_URL_ERR_BADSCHEME
+#  num APR_LDAP_URL_ERR_BADENCLOSURE
+#  num APR_LDAP_URL_ERR_BADURL
+#  num APR_LDAP_URL_ERR_BADHOST
+#  num APR_LDAP_URL_ERR_BADATTRS
+#  num APR_LDAP_URL_ERR_BADSCOPE
+#  num APR_LDAP_URL_ERR_BADFILTER
+#  num APR_LDAP_URL_ERR_BADEXTS
+
+#  ccall apr_ldap_is_ldap_url  , Ptr CChar -> IO CInt
+#  ccall apr_ldap_is_ldaps_url , Ptr CChar -> IO CInt
+#  ccall apr_ldap_is_ldapi_url , Ptr CChar -> IO CInt
+#  ccall apr_ldap_url_parse_ext, Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr <apr_ldap_url_desc_t>) -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+#  ccall apr_ldap_url_parse    , Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr <apr_ldap_url_desc_t>) -> Ptr (Ptr <apr_ldap_err_t>) -> IO CInt
+
+#endif
diff --git a/Bindings/APR/MD4.hsc b/Bindings/APR/MD4.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/MD4.hsc
@@ -0,0 +1,25 @@
+#include <bindings.dsl.h>
+#include <apr_md4.h>
+
+module Bindings.APR.MD4 where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.XLate
+
+#num APR_MD4_DIGESTSIZE
+
+#starttype struct apr_md4_ctx_t
+#  array_field state , <apr_uint32_t>
+#  array_field count , <apr_uint32_t>
+#  array_field buffer, CUChar
+#  if APR_HAS_XLATE
+#    field xlate, Ptr <apr_xlate_t>
+#  endif
+#stoptype
+
+#ccall   apr_md4_init     , Ptr <apr_md4_ctx_t> -> IO <apr_status_t>
+#cinline apr_md4_set_xlate, Ptr <apr_md4_ctx_t> -> Ptr <apr_xlate_t> -> IO <apr_status_t>
+#ccall   apr_md4_update   , Ptr <apr_md4_ctx_t> -> Ptr CUChar -> <apr_size_t> -> IO <apr_status_t>
+#ccall   apr_md4_final    , Ptr CUChar -> Ptr <apr_md4_ctx_t> -> IO <apr_status_t>
+#ccall   apr_md4          , Ptr CUChar -> Ptr CUChar -> <apr_size_t> -> IO <apr_status_t>
diff --git a/Bindings/APR/MD5.hsc b/Bindings/APR/MD5.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/MD5.hsc
@@ -0,0 +1,25 @@
+#include <bindings.dsl.h>
+#include <apr_md5.h>
+
+module Bindings.APR.MD5 where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.XLate
+
+#num APR_MD5_DIGESTSIZE
+
+#starttype struct apr_md5_ctx_t
+#  array_field state , <apr_uint32_t>
+#  array_field count , <apr_uint32_t>
+#  array_field buffer, CUChar
+#  field       xlate , Ptr <apr_xlate_t>
+#stoptype
+
+#ccall apr_md5_init     , Ptr <apr_md5_ctx_t> -> IO <apr_status_t>
+#ccall apr_md5_set_xlate, Ptr <apr_md5_ctx_t> -> Ptr <apr_xlate_t> -> IO <apr_status_t>
+#ccall apr_md5_update   , Ptr <apr_md5_ctx_t> -> Ptr () -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_md5_final    , Ptr CUChar -> Ptr <apr_md5_ctx_t> -> IO <apr_status_t>
+#ccall apr_md5          , Ptr CUChar -> Ptr () -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_md5_encode   , Ptr CChar -> Ptr CChar -> Ptr CChar -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_password_validate, Ptr CChar -> Ptr CChar -> IO <apr_status_t>
diff --git a/Bindings/APR/MemCache.hsc b/Bindings/APR/MemCache.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/MemCache.hsc
@@ -0,0 +1,108 @@
+#include <bindings.dsl.h>
+#include <apr_memcache.h>
+
+module Bindings.APR.MemCache where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.Hash
+import Bindings.APR.Network.IO
+import Bindings.APR.Pools
+import Bindings.APR.ResList
+import Bindings.APR.Thread.Mutex
+import Bindings.APR.Time
+
+#integral_t apr_memcache_server_status_t
+#num APR_MC_SERVER_LIVE
+#num APR_MC_SERVER_DEAD
+
+#opaque_t apr_memcache_conn_t
+
+#starttype struct apr_memcache_server_t
+#  field host  , Ptr CChar
+#  field port  , <apr_port_t>
+#  field status, <apr_memcache_server_status_t>
+#  if APR_HAS_THREADS
+#    field conns, Ptr <apr_reslist_t>
+#  else
+#    field conn, Ptr <apr_memcache_conn_t>
+#  endif
+#  field p     , Ptr <apr_pool_t>
+#  if APR_HAS_THREADS
+#    field lock, Ptr <apr_thread_mutex_t>
+#  endif
+#  field btime , <apr_time_t>
+#stoptype
+
+#callback apr_memcache_hash_func  , Ptr () -> Ptr CChar -> <apr_size_t> -> IO <apr_uint32_t>
+#callback apr_memcache_server_func, Ptr () -> Ptr <apr_memcache_t> -> <apr_uint32_t> -> IO (Ptr <apr_memcache_server_t>)
+
+#starttype struct apr_memcache_t
+#  field flags       , <apr_uint32_t>
+#  field nalloc      , <apr_uint16_t>
+#  field ntotal      , <apr_uint16_t>
+#  field live_servers, Ptr (Ptr <apr_memcache_server_t>)
+#  field p           , Ptr <apr_pool_t>
+#  field hash_func   , <apr_memcache_hash_func>
+#  field server_baton, Ptr ()
+#  field server_func , <apr_memcache_server_func>
+#stoptype
+
+#starttype apr_memcache_value_t
+#  field status, <apr_status_t>
+#  field key   , Ptr CChar
+#  field len   , <apr_size_t>
+#  field data  , Ptr ()
+#  field flags , <apr_uint16_t>
+#stoptype
+
+#ccall apr_memcache_hash        , Ptr <apr_memcache_t> -> Ptr CChar -> <apr_size_t> -> IO <apr_uint32_t>
+#ccall apr_memcache_hash_crc32  , Ptr () -> Ptr CChar -> <apr_size_t> -> IO <apr_uint32_t>
+#ccall apr_memcache_hash_default, Ptr () -> Ptr CChar -> <apr_size_t> -> IO <apr_uint32_t>
+
+#ccall apr_memcache_find_server_hash        , Ptr <apr_memcache_t> -> <apr_uint32_t> -> IO (Ptr <apr_memcache_server_t>)
+#ccall apr_memcache_find_server_hash_default, Ptr () -> Ptr <apr_memcache_t> -> <apr_uint32_t> -> IO (Ptr <apr_memcache_server_t>)
+
+#ccall apr_memcache_add_server     , Ptr <apr_memcache_t> -> Ptr <apr_memcache_server_t> -> IO <apr_status_t>
+#ccall apr_memcache_find_server    , Ptr <apr_memcache_t> -> Ptr CChar -> <apr_port_t> -> IO (Ptr <apr_memcache_server_t>)
+#ccall apr_memcache_enable_server  , Ptr <apr_memcache_t> -> Ptr <apr_memcache_server_t> -> IO <apr_status_t>
+#ccall apr_memcache_disable_server , Ptr <apr_memcache_t> -> Ptr <apr_memcache_server_t> -> IO <apr_status_t>
+#ccall apr_memcache_server_create  , Ptr <apr_pool_t> -> Ptr CChar -> <apr_port_t> -> <apr_uint32_t> -> <apr_uint32_t> -> <apr_uint32_t> -> <apr_uint32_t> -> Ptr (Ptr <apr_memcache_server_t>) -> IO <apr_status_t>
+#ccall apr_memcache_create         , Ptr <apr_pool_t> -> <apr_uint16_t> -> <apr_uint32_t> -> Ptr (Ptr <apr_memcache_t>) -> IO <apr_status_t>
+#ccall apr_memcache_getp           , Ptr <apr_memcache_t> -> Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr CChar) -> Ptr <apr_size_t> -> Ptr <apr_uint16_t> -> IO <apr_status_t>
+#ccall apr_memcache_add_multget_key, Ptr <apr_pool_t> -> Ptr CChar -> Ptr (Ptr <apr_hash_t>) -> IO ()
+#ccall apr_memcache_multgetp       , Ptr <apr_memcache_t> -> Ptr <apr_pool_t> -> Ptr <apr_pool_t> -> Ptr <apr_hash_t> -> IO <apr_status_t>
+#ccall apr_memcache_set            , Ptr <apr_memcache_t> -> Ptr CChar -> Ptr CChar -> <apr_size_t> -> <apr_uint32_t> -> <apr_uint16_t> -> IO <apr_status_t>
+#ccall apr_memcache_add            , Ptr <apr_memcache_t> -> Ptr CChar -> Ptr CChar -> <apr_size_t> -> <apr_uint32_t> -> <apr_uint16_t> -> IO <apr_status_t>
+#ccall apr_memcache_replace        , Ptr <apr_memcache_t> -> Ptr CChar -> Ptr CChar -> <apr_size_t> -> <apr_uint32_t> -> <apr_uint16_t> -> IO <apr_status_t>
+#ccall apr_memcache_delete         , Ptr <apr_memcache_t> -> Ptr CChar -> <apr_uint32_t> -> IO <apr_status_t>
+#ccall apr_memcache_incr           , Ptr <apr_memcache_t> -> Ptr CChar -> <apr_int32_t> -> Ptr <apr_uint32_t> -> IO <apr_status_t>
+#ccall apr_memcache_decr           , Ptr <apr_memcache_t> -> Ptr CChar -> <apr_int32_t> -> Ptr <apr_uint32_t> -> IO <apr_status_t>
+#ccall apr_memcache_version        , Ptr <apr_memcache_server_t> -> Ptr <apr_pool_t> -> Ptr (Ptr CChar) -> IO <apr_status_t>
+
+#starttype apr_memcache_stats_t
+#  field version      , Ptr CChar
+#  field pid          , <apr_uint32_t>
+#  field uptime       , <apr_uint32_t>
+#  field time         , <apr_time_t>
+#  field pointer_size , <apr_uint32_t>
+#  field rusage_user  , <apr_time_t>
+#  field rusage_system, <apr_time_t>
+#  field curr_items   , <apr_uint32_t>
+#  field total_items  , <apr_uint32_t>
+#  field bytes        , <apr_uint64_t>
+#  field curr_connections , <apr_uint32_t>
+#  field total_connections, <apr_uint32_t>
+#  field connection_structures, <apr_uint32_t>
+#  field cmd_get       , <apr_uint32_t>
+#  field cmd_set       , <apr_uint32_t>
+#  field get_hits      , <apr_uint32_t>
+#  field get_misses    , <apr_uint32_t>
+#  field evictions     , <apr_uint64_t>
+#  field bytes_read    , <apr_uint64_t>
+#  field bytes_written , <apr_uint64_t>
+#  field limit_maxbytes, <apr_uint32_t>
+#  field threads       , <apr_uint32_t>
+#stoptype
+
+#ccall apr_memcache_stats, Ptr <apr_memcache_server_t> -> Ptr <apr_pool_t> -> Ptr (Ptr <apr_memcache_stats_t>) -> IO <apr_status_t>
diff --git a/Bindings/APR/Queue.hsc b/Bindings/APR/Queue.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/Queue.hsc
@@ -0,0 +1,19 @@
+#include <bindings.dsl.h>
+#include <apr_queue.h>
+
+module Bindings.APR.Queue where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.Pools
+
+#opaque_t apr_queue_t
+
+#ccall apr_queue_create , Ptr (Ptr <apr_queue_t>) -> CUInt -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_queue_push   , Ptr <apr_queue_t> -> Ptr () -> IO <apr_status_t>
+#ccall apr_queue_pop    , Ptr <apr_queue_t> -> Ptr (Ptr ()) -> IO <apr_status_t>
+#ccall apr_queue_trypush, Ptr <apr_queue_t> -> Ptr () -> IO <apr_status_t>
+#ccall apr_queue_trypop , Ptr <apr_queue_t> -> Ptr (Ptr ()) -> IO <apr_status_t>
+#ccall apr_queue_size   , Ptr <apr_queue_t> -> IO CUInt
+#ccall apr_queue_interrupt_all, Ptr <apr_queue_t> -> IO <apr_status_t>
+#ccall apr_queue_term   , Ptr <apr_queue_t> -> IO <apr_status_t>
diff --git a/Bindings/APR/RMM.hsc b/Bindings/APR/RMM.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/RMM.hsc
@@ -0,0 +1,24 @@
+#include <bindings.dsl.h>
+#include <apr_rmm.h>
+
+module Bindings.APR.RMM where
+#strict_import
+import Bindings.APR
+import Bindings.APR.AnyLock
+import Bindings.APR.ErrNo
+import Bindings.APR.Pools
+
+#opaque_t apr_rmm_t
+#integral_t apr_rmm_off_t
+
+#ccall apr_rmm_init    , Ptr (Ptr <apr_rmm_t>) -> Ptr <apr_anylock_t> -> Ptr () -> <apr_size_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_rmm_destroy , Ptr <apr_rmm_t> -> IO <apr_status_t>
+#ccall apr_rmm_attach  , Ptr (Ptr <apr_rmm_t>) -> Ptr <apr_anylock_t> -> Ptr () -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_rmm_detach  , Ptr <apr_rmm_t> -> IO <apr_status_t>
+#ccall apr_rmm_malloc  , Ptr <apr_rmm_t> -> <apr_size_t> -> IO <apr_rmm_off_t>
+#ccall apr_rmm_realloc , Ptr <apr_rmm_t> -> Ptr () -> <apr_size_t> -> IO <apr_rmm_off_t>
+#ccall apr_rmm_calloc  , Ptr <apr_rmm_t> -> <apr_size_t> -> IO <apr_rmm_off_t>
+#ccall apr_rmm_free    , Ptr <apr_rmm_t> -> <apr_rmm_off_t> -> IO <apr_status_t>
+#ccall apr_rmm_addr_get, Ptr <apr_rmm_t> -> <apr_rmm_off_t> -> IO (Ptr ())
+#ccall apr_rmm_offset_get  , Ptr <apr_rmm_t> -> Ptr () -> IO <apr_rmm_off_t>
+#ccall apr_rmm_overhead_get, CInt -> IO <apr_size_t>
diff --git a/Bindings/APR/ResList.hsc b/Bindings/APR/ResList.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/ResList.hsc
@@ -0,0 +1,24 @@
+#include <bindings.dsl.h>
+#include <apr_reslist.h>
+
+module Bindings.APR.ResList where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.Pools
+import Bindings.APR.Time
+
+#if APR_HAS_THREADS
+#  opaque_t apr_reslist_t
+#  callback apr_reslist_constructor, Ptr (Ptr ()) -> Ptr () -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#  callback apr_reslist_destructor , Ptr () -> Ptr () -> Ptr <apr_pool_t> -> IO <apr_status_t>
+
+#  ccall apr_reslist_create , Ptr (Ptr <apr_reslist_t>) -> CInt -> CInt -> CInt -> <apr_interval_time_t> -> <apr_reslist_constructor> -> <apr_reslist_destructor> -> Ptr () -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#  ccall apr_reslist_destroy, Ptr <apr_reslist_t> -> IO <apr_status_t>
+#  ccall apr_reslist_acquire, Ptr <apr_reslist_t> -> Ptr (Ptr ()) -> IO <apr_status_t>
+#  ccall apr_reslist_release, Ptr <apr_reslist_t> -> Ptr () -> IO <apr_status_t>
+
+#  ccall apr_reslist_timeout_set   , Ptr <apr_reslist_t> -> <apr_interval_time_t> -> IO ()
+#  ccall apr_reslist_acquired_count, Ptr <apr_reslist_t> -> IO <apr_uint32_t>
+#  ccall apr_reslist_invalidate    , Ptr <apr_reslist_t> -> Ptr () -> IO <apr_status_t>
+#endif
diff --git a/Bindings/APR/SDBM.hsc b/Bindings/APR/SDBM.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/SDBM.hsc
@@ -0,0 +1,34 @@
+#include <bindings.dsl.h>
+#include <apr_sdbm.h>
+
+module Bindings.APR.SDBM where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.File.Info
+import Bindings.APR.Pools
+
+#opaque_t apr_sdbm_t
+
+#starttype apr_sdbm_datum_t
+#  field dptr , Ptr CChar
+#  field dsize, CInt
+#stoptype
+
+#globalarray APR_SDBM_DIRFEXT, CChar
+#globalarray APR_SDBM_PAGFEXT, CChar
+
+#num APR_SDBM_INSERT
+#num APR_SDBM_REPLACE
+#num APR_SDBM_INSERTDUP
+
+#ccall   apr_sdbm_open    , Ptr (Ptr <apr_sdbm_t>) -> Ptr CChar -> <apr_int32_t> -> <apr_fileperms_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall   apr_sdbm_close   , Ptr <apr_sdbm_t> -> IO <apr_status_t>
+#ccall   apr_sdbm_lock    , Ptr <apr_sdbm_t> -> CInt -> IO <apr_status_t>
+#ccall   apr_sdbm_unlock  , Ptr <apr_sdbm_t> -> IO <apr_status_t>
+#cinline apr_sdbm_fetch   , Ptr <apr_sdbm_t> -> Ptr <apr_sdbm_datum_t> -> Ptr <apr_sdbm_datum_t> -> IO <apr_status_t>
+#cinline apr_sdbm_store   , Ptr <apr_sdbm_t> -> Ptr <apr_sdbm_datum_t> -> Ptr <apr_sdbm_datum_t> -> CInt -> IO <apr_status_t>
+#cinline apr_sdbm_delete  , Ptr <apr_sdbm_t> -> Ptr <apr_sdbm_datum_t> -> IO <apr_status_t>
+#ccall   apr_sdbm_firstkey, Ptr <apr_sdbm_t> -> Ptr <apr_sdbm_datum_t> -> IO <apr_status_t>
+#ccall   apr_sdbm_nextkey , Ptr <apr_sdbm_t> -> Ptr <apr_sdbm_datum_t> -> IO <apr_status_t>
+#ccall   apr_sdbm_rdonly  , Ptr <apr_sdbm_t> -> IO CInt
diff --git a/Bindings/APR/SHA1.hsc b/Bindings/APR/SHA1.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/SHA1.hsc
@@ -0,0 +1,26 @@
+#include <bindings.dsl.h>
+#include <apr_sha1.h>
+
+module Bindings.APR.SHA1 where
+#strict_import
+import Bindings.APR
+
+#num APR_SHA1_DIGESTSIZE
+
+#globalarray APR_SHA1_ID, CChar
+
+#num APR_SHA1PW_IDLEN
+
+#starttype struct apr_sha1_ctx_t
+#  array_field digest  , <apr_uint32_t>
+#  field       count_lo, <apr_uint32_t>
+#  field       count_hi, <apr_uint32_t>
+#  array_field data    , <apr_uint32_t>
+#  field       local   , CInt
+#stoptype
+
+#ccall apr_sha1_base64       , Ptr CChar -> CInt -> Ptr CChar -> IO ()
+#ccall apr_sha1_init         , Ptr <apr_sha1_ctx_t> -> IO ()
+#ccall apr_sha1_update       , Ptr <apr_sha1_ctx_t> -> Ptr CChar -> CUInt -> IO ()
+#ccall apr_sha1_update_binary, Ptr <apr_sha1_ctx_t> -> Ptr CUInt -> CUInt -> IO ()
+#ccall apr_sha1_final        , Ptr CUChar -> Ptr <apr_sha1_ctx_t> -> IO ()
diff --git a/Bindings/APR/StrMatch.hsc b/Bindings/APR/StrMatch.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/StrMatch.hsc
@@ -0,0 +1,18 @@
+#include <bindings.dsl.h>
+#include <apr_strmatch.h>
+
+module Bindings.APR.StrMatch where
+#strict_import
+import Bindings.APR
+import Bindings.APR.Pools
+
+#starttype struct apr_strmatch_pattern
+#  field compare, FunPtr (Ptr <apr_strmatch_pattern> -> Ptr CChar -> <apr_size_t> -> IO (Ptr CChar))
+#  field pattern, Ptr CChar
+#  field length , <apr_size_t>
+#  field context, Ptr ()
+#stoptype
+
+#cinline apr_strmach, Ptr <apr_strmatch_pattern> -> Ptr CChar -> <apr_size_t> -> IO (Ptr CChar)
+
+#ccall apr_strmatch_precompile, Ptr <apr_pool_t> -> Ptr CChar -> CInt -> IO (Ptr <apr_strmatch_pattern>)
diff --git a/Bindings/APR/Thread/Pool.hsc b/Bindings/APR/Thread/Pool.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/Thread/Pool.hsc
@@ -0,0 +1,47 @@
+#include <bindings.dsl.h>
+#include <apr_thread_pool.h>
+
+module Bindings.APR.Thread.Pool where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.Pools
+import Bindings.APR.Thread.Proc
+import Bindings.APR.Time
+
+#if APR_HAS_THREADS
+
+#  opaque_t apr_thread_pool_t
+
+#  num APR_THREAD_TASK_PRIORITY_LOWEST
+#  num APR_THREAD_TASK_PRIORITY_LOW
+#  num APR_THREAD_TASK_PRIORITY_NORMAL
+#  num APR_THREAD_TASK_PRIORITY_HIGH
+#  num APR_THREAD_TASK_PRIORITY_HIGHEST
+
+#  ccall apr_thread_pool_create      , Ptr (Ptr <apr_thread_pool_t>) -> <apr_size_t> -> <apr_size_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#  ccall apr_thread_pool_destroy     , Ptr <apr_thread_pool_t> -> IO <apr_status_t>
+#  ccall apr_thread_pool_push        , Ptr <apr_thread_pool_t> -> <apr_thread_start_t> -> Ptr () -> <apr_byte_t> -> Ptr () -> IO <apr_status_t>
+#  ccall apr_thread_pool_schedule    , Ptr <apr_thread_pool_t> -> <apr_thread_start_t> -> Ptr () -> <apr_interval_time_t> -> Ptr () -> IO <apr_status_t>
+#  ccall apr_thread_pool_top         , Ptr <apr_thread_pool_t> -> <apr_thread_start_t> -> Ptr () -> <apr_byte_t> -> Ptr () -> IO <apr_status_t>
+#  ccall apr_thread_pool_tasks_cancel, Ptr <apr_thread_pool_t> -> Ptr () -> IO <apr_status_t>
+#  ccall apr_thread_pool_tasks_count , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_scheduled_tasks_count, Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_threads_count        , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_busy_count           , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_idle_count           , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_idle_max_set         , Ptr <apr_thread_pool_t> -> <apr_size_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_tasks_run_count      , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_tasks_high_count     , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_threads_high_count   , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_threads_idle_timeout_count, Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_idle_max_get  , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_thread_max_set, Ptr <apr_thread_pool_t> -> <apr_size_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_idle_wait_set , Ptr <apr_thread_pool_t> -> <apr_interval_time_t> -> IO <apr_interval_time_t>
+#  ccall apr_thread_pool_idle_wait_get , Ptr <apr_thread_pool_t> -> IO <apr_interval_time_t>
+#  ccall apr_thread_pool_thread_max_get, Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_threshold_set , Ptr <apr_thread_pool_t> -> <apr_size_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_threshold_get , Ptr <apr_thread_pool_t> -> IO <apr_size_t>
+#  ccall apr_thread_pool_task_owner_get, Ptr <apr_thread_t> -> Ptr (Ptr ()) -> IO <apr_status_t>
+
+#endif
diff --git a/Bindings/APR/URI.hsc b/Bindings/APR/URI.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/URI.hsc
@@ -0,0 +1,59 @@
+#include <bindings.dsl.h>
+#include <apr_uri.h>
+
+module Bindings.APR.URI where
+#strict_import
+import Bindings.APR.ErrNo
+import Bindings.APR.Network.IO
+import Bindings.APR.Pools
+
+#num APR_URI_FTP_DEFAULT_PORT
+#num APR_URI_SSH_DEFAULT_PORT
+#num APR_URI_TELNET_DEFAULT_PORT
+#num APR_URI_GOPHER_DEFAULT_PORT
+#num APR_URI_HTTP_DEFAULT_PORT
+#num APR_URI_POP_DEFAULT_PORT
+#num APR_URI_NNTP_DEFAULT_PORT
+#num APR_URI_IMAP_DEFAULT_PORT
+#num APR_URI_PROSPERO_DEFAULT_PORT
+#num APR_URI_WAIS_DEFAULT_PORT
+#num APR_URI_LDAP_DEFAULT_PORT
+#num APR_URI_HTTPS_DEFAULT_PORT
+#num APR_URI_RTSP_DEFAULT_PORT
+#num APR_URI_SNEWS_DEFAULT_PORT
+#num APR_URI_ACAP_DEFAULT_PORT
+#num APR_URI_NFS_DEFAULT_PORT
+#num APR_URI_TIP_DEFAULT_PORT
+#num APR_URI_SIP_DEFAULT_PORT
+
+#num APR_URI_UNP_OMITSITEPART
+#num APR_URI_UNP_OMITUSER
+#num APR_URI_UNP_OMITPASSWORD
+#num APR_URI_UNP_OMITUSERINFO
+#num APR_URI_UNP_REVEALPASSWORD
+#num APR_URI_UNP_OMITPATHINFO
+#num APR_URI_UNP_OMITQUERY
+
+#starttype struct apr_uri_t
+#  field scheme  , Ptr CChar
+#  field hostinfo, Ptr CChar
+#  field user    , Ptr CChar
+#  field password, Ptr CChar
+#  field hostname, Ptr CChar
+#  field port_str, Ptr CChar
+#  field path    , Ptr CChar
+#  field query   , Ptr CChar
+#  field fragment, Ptr CChar
+-- FIXME: struct hostent
+-- #  field hostent , Ptr <hostent>
+#  field port    , <apr_port_t>
+-- FIXME: bit fields
+-- #  field is_initialized, CUInt
+-- #  field dns_looked_up , CUInt
+-- #  field dns_resolved  , CUInt
+#stoptype
+
+#ccall apr_uri_port_of_scheme, Ptr CChar -> IO <apr_port_t>
+#ccall apr_uri_unparse       , Ptr <apr_pool_t> -> Ptr <apr_uri_t> -> CUInt -> IO (Ptr CChar)
+#ccall apr_uri_parse         , Ptr <apr_pool_t> -> Ptr CChar -> Ptr <apr_uri_t> -> IO <apr_status_t>
+#ccall apr_uri_parse_hostinfo, Ptr <apr_pool_t> -> Ptr CChar -> Ptr <apr_uri_t> -> IO <apr_status_t>
diff --git a/Bindings/APR/UUID.hsc b/Bindings/APR/UUID.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/UUID.hsc
@@ -0,0 +1,16 @@
+#include <bindings.dsl.h>
+#include <apr_uuid.h>
+
+module Bindings.APR.UUID where
+#strict_import
+import Bindings.APR.ErrNo
+
+#starttype apr_uuid_t
+#  array_field data, CUChar
+#stoptype
+
+#num APR_UUID_FORMATTED_LENGTH
+
+#ccall apr_uuid_get   , Ptr <apr_uuid_t> -> IO ()
+#ccall apr_uuid_format, Ptr CChar -> Ptr <apr_uuid_t> -> IO ()
+#ccall apr_uuid_parse , Ptr <apr_uuid_t> -> Ptr CChar -> IO <apr_status_t>
diff --git a/Bindings/APR/XLate.hsc b/Bindings/APR/XLate.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/XLate.hsc
@@ -0,0 +1,25 @@
+#include <bindings.dsl.h>
+#include <apr_xlate.h>
+
+module Bindings.APR.XLate where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.Pools
+
+#opaque_t apr_xlate_t
+
+#ccall apr_xlate_open, Ptr (Ptr <apr_xlate_t>) -> Ptr CChar -> Ptr CChar -> Ptr <apr_pool_t> -> IO <apr_status_t>
+
+#pointer APR_DEFAULT_CHARSET
+#pointer APR_LOCALE_CHARSET
+
+#ccall apr_xlate_sb_get     , Ptr <apr_xlate_t> -> Ptr CInt -> IO <apr_status_t>
+#ccall apr_xlate_conv_buffer, Ptr <apr_xlate_t> -> Ptr CChar -> Ptr <apr_size_t> -> Ptr CChar -> Ptr <apr_size_t> -> IO <apr_status_t>
+
+#if APR_NOT_DONE_YET
+#  ccall apr_xlate_conv_char, Ptr <apr_xlate_t> -> CChar -> CChar -> IO <apr_status_t>
+#endif
+
+#ccall apr_xlate_conv_byte  , Ptr <apr_xlate_t> -> CUChar -> IO <apr_int32_t>
+#ccall apr_xlate_close      , Ptr <apr_xlate_t> -> IO <apr_status_t>
diff --git a/Bindings/APR/XML.hsc b/Bindings/APR/XML.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APR/XML.hsc
@@ -0,0 +1,90 @@
+#include <bindings.dsl.h>
+#include <apr_xml.h>
+
+module Bindings.APR.XML where
+#strict_import
+import Bindings.APR
+import Bindings.APR.ErrNo
+import Bindings.APR.File.Types
+import Bindings.APR.Pools
+import Bindings.APR.Tables
+import Bindings.APR.XLate
+
+#starttype struct apr_text
+#  field text, Ptr CChar
+#  field next, Ptr <apr_text>
+#stoptype
+
+#starttype struct apr_text_header
+#  field first, Ptr <apr_text>
+#  field last , Ptr <apr_text>
+#stoptype
+
+#ccall apr_text_append, Ptr <apr_pool_t> -> Ptr <apr_text_header> -> Ptr CChar -> IO ()
+
+#num APR_XML_NS_DAV_ID
+#num APR_XML_NS_NONE
+
+#num APR_XML_NS_ERROR_BASE
+#cinline APR_XML_NS_IS_ERROR, CInt -> IO CInt
+
+#starttype struct apr_xml_attr
+#  field name , Ptr CChar
+#  field ns   , CInt
+#  field value, Ptr CChar
+#  field next , Ptr <apr_xml_attr>
+#stoptype
+
+#opaque_t apr_xml_ns_scope
+
+#starttype struct apr_xml_elem
+#  field name, Ptr CChar
+#  field ns  , CInt
+#  field lang, Ptr CChar
+
+#  field first_cdata    , <apr_text_header>
+#  field following_cdata, <apr_text_header>
+
+#  field parent     , Ptr <apr_xml_elem>
+#  field next       , Ptr <apr_xml_elem>
+#  field first_child, Ptr <apr_xml_elem>
+#  field attr       , Ptr <apr_xml_elem>
+
+#  field last_child , Ptr <apr_xml_elem>
+#  field ns_scope   , Ptr <apr_xml_ns_scope>
+
+#  field priv, Ptr ()
+#stoptype
+
+#cinline APR_XML_ELEM_IS_EMPTY, Ptr <apr_xml_elem> -> IO CInt
+
+#starttype struct apr_xml_doc
+#  field root      , Ptr <apr_xml_elem>
+#  field namespaces, Ptr <apr_array_header_t>
+#stoptype
+
+#opaque_t apr_xml_parser
+
+#ccall apr_xml_parser_create  , Ptr <apr_pool_t> -> IO (Ptr <apr_xml_parser>)
+#ccall apr_xml_parse_file     , Ptr <apr_pool_t> -> Ptr (Ptr <apr_xml_parser>) -> Ptr (Ptr <apr_xml_doc>) -> Ptr <apr_file_t> -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_xml_parser_feed    , Ptr <apr_xml_parser> -> Ptr CChar -> <apr_size_t> -> IO <apr_status_t>
+#ccall apr_xml_parser_done    , Ptr <apr_xml_parser> -> Ptr (Ptr <apr_xml_doc>) -> IO <apr_status_t>
+#ccall apr_xml_parser_geterror, Ptr <apr_xml_parser> -> Ptr CChar -> <apr_size_t> -> IO (Ptr CChar)
+
+#ccall apr_xml_to_text, Ptr <apr_pool_t> -> Ptr <apr_xml_elem> -> CInt -> Ptr <apr_array_header_t> -> Ptr CInt -> Ptr (Ptr CChar) -> Ptr <apr_size_t> -> IO ()
+
+#num APR_XML_X2T_FULL
+#num APR_XML_X2T_INNER
+#num APR_XML_X2T_LANG_INNER
+#num APR_XML_X2T_FULL_NS_LANG
+
+#ccall apr_xml_empty_elem  , Ptr <apr_pool_t> -> Ptr <apr_xml_elem> -> IO (Ptr CChar)
+#ccall apr_xml_quote_string, Ptr <apr_pool_t> -> Ptr CChar -> CInt -> IO (Ptr CChar)
+#ccall apr_xml_quote_elem  , Ptr <apr_pool_t> -> Ptr <apr_xml_elem> -> IO ()
+#ccall apr_xml_insert_uri  , Ptr <apr_array_header_t> -> Ptr CChar -> IO CInt
+
+#cinline APR_XML_GET_URI_ITEM, Ptr <apr_array_header_t> -> CInt -> IO (Ptr CChar)
+
+#if APR_CHARSET_EBCDIC
+#  ccall apr_xml_parser_convert_doc, Ptr <apr_pool_t> -> Ptr <apr_xml_doc> -> Ptr <apr_xlate_t> -> IO <apr_status_t>
+#endif
diff --git a/Bindings/APU.hsc b/Bindings/APU.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APU.hsc
@@ -0,0 +1,26 @@
+#include <bindings.dsl.h>
+#include <apu.h>
+
+module Bindings.APU where
+#strict_import
+
+#num APU_HAVE_SDBM
+#num APU_HAVE_GDBM
+#num APU_HAVE_NDBM
+#num APU_HAVE_DB
+
+#if APU_HAVE_DB
+#  num APU_HAVE_DB_VERSION
+#endif
+
+#num APU_HAVE_PGSQL
+#num APU_HAVE_MYSQL
+#num APU_HAVE_SQLITE3
+#num APU_HAVE_SQLITE2
+#num APU_HAVE_ORACLE
+#num APU_HAVE_FREETDS
+#num APU_HAVE_ODBC
+
+#num APU_HAVE_APR_ICONV
+#num APU_HAVE_ICONV
+#num APR_HAS_XLATE
diff --git a/Bindings/APU/Version.hsc b/Bindings/APU/Version.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/APU/Version.hsc
@@ -0,0 +1,17 @@
+#include <bindings.dsl.h>
+#include <apu_version.h>
+
+module Bindings.APU.Version where
+#strict_import
+import Bindings.APR.Version
+
+#num APU_MAJOR_VERSION
+#num APU_MINOR_VERSION
+#num APU_PATCH_VERSION
+
+#globalarray APU_VERSION_STRING, CChar
+
+#ifndef APU_VERSION_ONLY
+#  ccall apu_version       , Ptr <apr_version_t> -> IO ()
+#  ccall apu_version_string, IO (Ptr CChar)
+#endif
diff --git a/COPYING b/COPYING
new file mode 100644
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,29 @@
+<!-- -*- xml -*-
+
+bindings-apr-util はパブリックドメインに在ります。
+bindings-apr-util is in the public domain.
+
+See http://creativecommons.org/licenses/publicdomain/
+
+-->
+
+<rdf:RDF xmlns="http://web.resource.org/cc/"
+	     xmlns:dc="http://purl.org/dc/elements/1.1/"
+	     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+  <Work rdf:about="http://cielonegro.org/Bindings-APR.html">
+	<dc:title>bindings-apr-util</dc:title>
+	<dc:rights>
+      <Agent>
+	    <dc:title>PHO</dc:title>
+	  </Agent>
+    </dc:rights>
+	<license rdf:resource="http://web.resource.org/cc/PublicDomain" />
+  </Work>
+      
+  <License rdf:about="http://web.resource.org/cc/PublicDomain">
+	<permits rdf:resource="http://web.resource.org/cc/Reproduction" />
+	<permits rdf:resource="http://web.resource.org/cc/Distribution" />
+	<permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+  </License>
+
+</rdf:RDF>
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,4 @@
+#!/usr/bin/env runghc
+
+import Distribution.Simple
+main = defaultMain
diff --git a/bindings-apr-util.cabal b/bindings-apr-util.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-apr-util.cabal
@@ -0,0 +1,75 @@
+Name: bindings-apr-util
+Synopsis: Low level bindings to Apache Portable Runtime Utility (APR Utility)
+Description:
+        Bindings to APR Utility: <http://apr.apache.org/>
+Version: 0.1
+License: PublicDomain
+License-File: COPYING
+Author: PHO <pho at cielonegro dot org>
+Maintainer: PHO <pho at cielonegro dot org>
+Stability: experimental
+Homepage: http://cielonegro.org/Bindings-APR.html
+Category: FFI
+Tested-With: GHC == 6.12.3
+Cabal-Version: >= 1.6
+Build-Type: Simple
+Extra-Source-Files:
+
+Source-Repository head
+    Type: git
+    Location: git://git.cielonegro.org/bindings-apr-util.git
+
+Library
+    Build-Depends:
+        base         == 4.2.*,
+        bindings-DSL == 1.0.*,
+        bindings-apr == 0.1.*
+
+    PkgConfig-Depends:
+        apr-util-1 >= 1.3
+
+    Exposed-Modules:
+        Bindings.APR.AnyLock
+        Bindings.APR.Base64
+        Bindings.APR.Buckets
+        Bindings.APR.Date
+        Bindings.APR.DBD
+        Bindings.APR.DBM
+        Bindings.APR.Hooks
+        Bindings.APR.LDAP
+        Bindings.APR.LDAP.Init
+        Bindings.APR.LDAP.Option
+        Bindings.APR.LDAP.Rebind
+        Bindings.APR.LDAP.URL
+        Bindings.APR.MD4
+        Bindings.APR.MD5
+        Bindings.APR.MemCache
+        Bindings.APR.Queue
+        Bindings.APR.RMM
+        Bindings.APR.ResList
+        Bindings.APR.SDBM
+        Bindings.APR.SHA1
+        Bindings.APR.StrMatch
+        Bindings.APR.Thread.Pool
+        Bindings.APR.URI
+        Bindings.APR.UUID
+        Bindings.APR.XLate
+        Bindings.APR.XML
+        Bindings.APU
+        Bindings.APU.Version
+
+    C-Sources:
+        cbits/helper_apr_anylock.c
+        cbits/helper_apr_buckets.c
+        cbits/helper_apr_dbm.c
+        cbits/helper_apr_ldap.c
+        cbits/helper_apr_ldap_init.c
+        cbits/helper_apr_md4.c
+        cbits/helper_apr_sdbm.c
+        cbits/helper_apr_sha1.c
+        cbits/helper_apr_strmatch.c
+        cbits/helper_apr_xml.c
+        cbits/helper_apu_version.c
+
+    Extensions:
+        ForeignFunctionInterface
diff --git a/cbits/helper_apr_anylock.c b/cbits/helper_apr_anylock.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_anylock.c
@@ -0,0 +1,6 @@
+#include <bindings.cmacros.h>
+#include <apr_anylock.h>
+
+BC_INLINE1(APR_ANYLOCK_LOCK   , apr_anylock_t*, apr_status_t)
+BC_INLINE1(APR_ANYLOCK_TRYLOCK, apr_anylock_t*, apr_status_t)
+BC_INLINE1(APR_ANYLOCK_UNLOCK , apr_anylock_t*, apr_status_t)
diff --git a/cbits/helper_apr_buckets.c b/cbits/helper_apr_buckets.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_buckets.c
@@ -0,0 +1,41 @@
+#include <bindings.cmacros.h>
+#include <apr_buckets.h>
+
+BC_INLINE1VOID(APR_BRIGADE_CHECK_CONSISTENCY, apr_bucket_brigade*)
+BC_INLINE1VOID(APR_BUCKET_CHECK_CONSISTENCY , apr_bucket*)
+
+BC_INLINE1(APR_BRIGADE_SENTINEL, apr_bucket_brigade*, apr_bucket*)
+BC_INLINE1(APR_BRIGADE_EMPTY   , apr_bucket_brigade*, int)
+BC_INLINE1(APR_BRIGADE_FIRST   , apr_bucket_brigade*, apr_bucket*)
+BC_INLINE1(APR_BRIGADE_LAST    , apr_bucket_brigade*, apr_bucket*)
+BC_INLINE2VOID(APR_BRIGADE_INSERT_HEAD, apr_bucket_brigade*, apr_bucket*)
+BC_INLINE2VOID(APR_BRIGADE_INSERT_TAIL, apr_bucket_brigade*, apr_bucket*)
+BC_INLINE2VOID(APR_BRIGADE_CONCAT     , apr_bucket_brigade*, apr_bucket_brigade*)
+BC_INLINE2VOID(APR_BRIGADE_PREPEND    , apr_bucket_brigade*, apr_bucket_brigade*)
+
+BC_INLINE2VOID(APR_BUCKET_INSERT_BEFORE, apr_bucket*, apr_bucket*)
+BC_INLINE2VOID(APR_BUCKET_INSERT_AFTER , apr_bucket*, apr_bucket*)
+BC_INLINE1    (APR_BUCKET_NEXT         , apr_bucket*, apr_bucket*)
+BC_INLINE1    (APR_BUCKET_PREV         , apr_bucket*, apr_bucket*)
+BC_INLINE1VOID(APR_BUCKET_REMOVE       , apr_bucket*)
+BC_INLINE1VOID(APR_BUCKET_INIT         , apr_bucket*)
+BC_INLINE1    (APR_BUCKET_IS_METADATA  , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_FLUSH     , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_EOS       , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_FILE      , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_PIPE      , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_SOCKET    , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_HEAP      , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_TRANSIENT , apr_bucket*, int)
+BC_INLINE1    (APR_BUCKET_IS_IMMORTAL  , apr_bucket*, int)
+#if APR_HAS_MMAP
+  BC_INLINE1  (APR_BUCKET_IS_MMAP      , apr_bucket*, int)
+#endif
+BC_INLINE1    (APR_BUCKET_IS_POOL      , apr_bucket*, int)
+
+BC_INLINE1VOID(apr_bucket_destroy , apr_bucket*)
+BC_INLINE1VOID(apr_bucket_delete  , apr_bucket*)
+BC_INLINE4    (apr_bucket_read    , apr_bucket*, const char**, apr_size_t*, apr_read_type_e, apr_status_t)
+BC_INLINE2    (apr_bucket_setaside, apr_bucket*, apr_pool_t*, apr_status_t)
+BC_INLINE2    (apr_bucket_split   , apr_bucket*, apr_size_t, apr_status_t)
+BC_INLINE2    (apr_bucket_copy    , apr_bucket*, apr_bucket**, apr_status_t)
diff --git a/cbits/helper_apr_dbm.c b/cbits/helper_apr_dbm.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_dbm.c
@@ -0,0 +1,22 @@
+#include <bindings.cmacros.h>
+#include <apr_dbm.h>
+
+apr_status_t inline_apr_dbm_fetch(apr_dbm_t* dbm, apr_datum_t* key, apr_datum_t* pvalue) {
+    return apr_dbm_fetch(dbm, *key, pvalue);
+}
+
+apr_status_t inline_apr_dbm_store(apr_dbm_t* dbm, apr_datum_t* key, apr_datum_t* value) {
+    return apr_dbm_store(dbm, *key, *value);
+}
+
+apr_status_t inline_apr_dbm_delete(apr_dbm_t* dbm, apr_datum_t* key) {
+    return apr_dbm_delete(dbm, *key);
+}
+
+int inline_apr_dbm_exists(apr_dbm_t* dbm, apr_datum_t* key) {
+    return apr_dbm_exists(dbm, *key);
+}
+
+void inline_apr_dbm_freedatum(apr_dbm_t* dbm, apr_datum_t* data) {
+    apr_dbm_freedatum(dbm, *data);
+}
diff --git a/cbits/helper_apr_ldap.c b/cbits/helper_apr_ldap.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_ldap.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <apr_ldap.h>
+
+BC_INLINE1(APR_LDAP_IS_SERVER_DOWN, int, int)
diff --git a/cbits/helper_apr_ldap_init.c b/cbits/helper_apr_ldap_init.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_ldap_init.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <apr_ldap.h>
+
+BC_INLINE1(APU_LDAP_SECURITY_ERROR, int, int)
diff --git a/cbits/helper_apr_md4.c b/cbits/helper_apr_md4.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_md4.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <apr_md4.h>
+
+BC_INLINE2(apr_md4_set_xlate, apr_md4_ctx_t*, apr_xlate_t*, apr_status_t)
diff --git a/cbits/helper_apr_sdbm.c b/cbits/helper_apr_sdbm.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_sdbm.c
@@ -0,0 +1,23 @@
+#include <bindings.cmacros.h>
+#include <apr_sdbm.h>
+
+BC_GLOBALARRAY(APR_SDBM_DIRFEXT, char)
+BC_GLOBALARRAY(APR_SDBM_PAGFEXT, char)
+
+apr_status_t inline_apr_sdbm_fetch(apr_sdbm_t* db,
+                                   apr_sdbm_datum_t* value,
+                                   apr_sdbm_datum_t* key) {
+    return apr_sdbm_fetch(db, value, *key);
+}
+
+apr_status_t inline_apr_sdbm_store(apr_sdbm_t* db,
+                                   apr_sdbm_datum_t* key,
+                                   apr_sdbm_datum_t* value,
+                                   int opt) {
+    return apr_sdbm_store(db, *key, *value, opt);
+}
+
+apr_status_t inline_apr_sdbm_delete(apr_sdbm_t* db,
+                                    const apr_sdbm_datum_t* key) {
+    return apr_sdbm_delete(db, *key);
+}
diff --git a/cbits/helper_apr_sha1.c b/cbits/helper_apr_sha1.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_sha1.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <apr_sha1.h>
+
+BC_GLOBALARRAY(APR_SHA1PW_ID, char)
diff --git a/cbits/helper_apr_strmatch.c b/cbits/helper_apr_strmatch.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_strmatch.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <apr_strmatch.h>
+
+BC_INLINE3(apr_strmatch, const apr_strmatch_pattern*, const char*, apr_size_t, const char*)
diff --git a/cbits/helper_apr_xml.c b/cbits/helper_apr_xml.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apr_xml.c
@@ -0,0 +1,6 @@
+#include <bindings.cmacros.h>
+#include <apr_xml.h>
+
+BC_INLINE1(APR_XML_NS_IS_ERROR  , int, int)
+BC_INLINE1(APR_XML_ELEM_IS_EMPTY, apr_xml_elem*, int)
+BC_INLINE2(APR_XML_GET_URI_ITEM , apr_array_header_t*, int, const char*)
diff --git a/cbits/helper_apu_version.c b/cbits/helper_apu_version.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_apu_version.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <apu_version.h>
+
+BC_GLOBALARRAY(APU_VERSION_STRING, char)
