diff --git a/bindings-sqlite3.cabal b/bindings-sqlite3.cabal
--- a/bindings-sqlite3.cabal
+++ b/bindings-sqlite3.cabal
@@ -1,28 +1,25 @@
 cabal-version: >= 1.2.3
 name: bindings-sqlite3
-homepage: http://bitbucket.org/mauricio/bindings
+homepage: http://bitbucket.org/mauricio/bindings-sqlite3
 synopsis:
-  Check bindings-common package for directions.
-version: 0.0.2
+  Low level bindings to sqlite3.
+version: 1.0
 license: BSD3
 license-file: LICENSE
 maintainer: Maurício C. Antunes
 author: Maurício C. Antunes
 build-type: Simple
 category: FFI
+bug-reports: http://bitbucket.org/mauricio/bindings-sqlite3/issues
 library
   hs-source-dirs: src
   extensions:
     ForeignFunctionInterface
-    TypeSynonymInstances
-    ScopedTypeVariables
-    EmptyDataDecls
-  build-depends: base, bindings-common
+  build-depends:
+    base >=3 && < 5,
+    bindings-common >= 1.3 && < 1.4
   exposed-modules:
     Bindings.Sqlite3
   pkgconfig-depends:
     sqlite3 >= 3.6.10
-  other-modules:
-    Sqlite3Constants
-    Sqlite3Functions
-    Sqlite3Types
+  c-sources: src/inlines.c
diff --git a/src/Bindings/Sqlite3.hs b/src/Bindings/Sqlite3.hs
deleted file mode 100644
--- a/src/Bindings/Sqlite3.hs
+++ /dev/null
@@ -1,790 +0,0 @@
-module Bindings.Sqlite3 (
-
-    -- * Run-Time Library Version Numbers
-
-    -- | <http://sqlite.org/c3ref/libversion.html>
-
-    sqlite3_version,
-    sqlite3_libversion,
-    sqlite3_libversion_number,
-
-    -- * Test To See If The Library Is Threadsafe
-
-    -- | <http://sqlite.org/c3ref/threadsafe.html>
-
-    sqlite3_threadsafe,
-
-    -- * Database Connection Handle
-
-    -- | <http://sqlite.org/c3ref/sqlite3.html>
-
-    Sqlite3,
-
-    -- * Closing A Database Connection
-
-    -- | <http://sqlite.org/c3ref/close.html>
-
-    sqlite3_close,
-
-    -- * One-Step Query Execution Interface
-
-    -- | <http://sqlite.org/c3ref/exec.html>
-
-    sqlite3_exec,
-
-    -- * Result Codes
-
-    -- | <http://sqlite.org/c3ref/c_abort.html>
-
-    _SQLITE_OK,
-    _SQLITE_ERROR,
-    _SQLITE_INTERNAL,
-    _SQLITE_PERM,
-    _SQLITE_ABORT,
-    _SQLITE_BUSY,
-    _SQLITE_LOCKED,
-    _SQLITE_NOMEM,
-    _SQLITE_READONLY,
-    _SQLITE_INTERRUPT,
-    _SQLITE_IOERR,
-    _SQLITE_CORRUPT,
-    _SQLITE_NOTFOUND,
-    _SQLITE_FULL,
-    _SQLITE_CANTOPEN,
-    _SQLITE_PROTOCOL,
-    _SQLITE_EMPTY,
-    _SQLITE_SCHEMA,
-    _SQLITE_TOOBIG,
-    _SQLITE_CONSTRAINT,
-    _SQLITE_MISMATCH,
-    _SQLITE_MISUSE,
-    _SQLITE_NOLFS,
-    _SQLITE_AUTH,
-    _SQLITE_FORMAT,
-    _SQLITE_RANGE,
-    _SQLITE_NOTADB,
-    _SQLITE_ROW,
-    _SQLITE_DONE,
-
-    -- * Extended Result Codes
-
-    -- | <http://sqlite.org/c3ref/c_ioerr_access.html>
-
-    _SQLITE_IOERR_READ,
-    _SQLITE_IOERR_SHORT_READ,
-    _SQLITE_IOERR_WRITE,
-    _SQLITE_IOERR_FSYNC,
-    _SQLITE_IOERR_DIR_FSYNC,
-    _SQLITE_IOERR_TRUNCATE,
-    _SQLITE_IOERR_FSTAT,
-    _SQLITE_IOERR_UNLOCK,
-    _SQLITE_IOERR_RDLOCK,
-    _SQLITE_IOERR_DELETE,
-    _SQLITE_IOERR_BLOCKED,
-    _SQLITE_IOERR_NOMEM,
-    _SQLITE_IOERR_ACCESS,
-    _SQLITE_IOERR_CHECKRESERVEDLOCK,
-    _SQLITE_IOERR_LOCK,
-    _SQLITE_IOERR_CLOSE,
-    _SQLITE_IOERR_DIR_CLOSE,
-
-    -- * Flags For File Open Operations
-
-    -- | <http://sqlite.org/c3ref/c_open_create.html>
-
-    _SQLITE_OPEN_READONLY,
-    _SQLITE_OPEN_READWRITE,
-    _SQLITE_OPEN_CREATE,
-    _SQLITE_OPEN_DELETEONCLOSE,
-    _SQLITE_OPEN_EXCLUSIVE,
-    _SQLITE_OPEN_MAIN_DB,
-    _SQLITE_OPEN_TEMP_DB,
-    _SQLITE_OPEN_TRANSIENT_DB,
-    _SQLITE_OPEN_MAIN_JOURNAL,
-    _SQLITE_OPEN_TEMP_JOURNAL,
-    _SQLITE_OPEN_SUBJOURNAL,
-    _SQLITE_OPEN_MASTER_JOURNAL,
-    _SQLITE_OPEN_NOMUTEX,
-    _SQLITE_OPEN_FULLMUTEX,
-
-    -- * Device Characteristics
-
-    -- | <http://sqlite.org/c3ref/c_iocap_atomic.html>
-
-    _SQLITE_IOCAP_ATOMIC,
-    _SQLITE_IOCAP_ATOMIC512,
-    _SQLITE_IOCAP_ATOMIC1K,
-    _SQLITE_IOCAP_ATOMIC2K,
-    _SQLITE_IOCAP_ATOMIC4K,
-    _SQLITE_IOCAP_ATOMIC8K,
-    _SQLITE_IOCAP_ATOMIC16K,
-    _SQLITE_IOCAP_ATOMIC32K,
-    _SQLITE_IOCAP_ATOMIC64K,
-    _SQLITE_IOCAP_SAFE_APPEND,
-    _SQLITE_IOCAP_SEQUENTIAL,
-
-    -- * File Locking Levels
-
-    -- | <http://sqlite.org/c3ref/c_lock_exclusive.html>
-
-    _SQLITE_LOCK_NONE,
-    _SQLITE_LOCK_SHARED,
-    _SQLITE_LOCK_RESERVED,
-    _SQLITE_LOCK_PENDING,
-    _SQLITE_LOCK_EXCLUSIVE,
-
-    -- * Synchronization Type Flags
-
-    -- | <http://sqlite.org/c3ref/c_sync_dataonly.html>
-
-    _SQLITE_SYNC_NORMAL,
-    _SQLITE_SYNC_FULL,
-    _SQLITE_SYNC_DATAONLY,
-
-    -- * OS Interface Open File Handle
-
-    -- | <http://sqlite.org/c3ref/file.html>
-
-    Sqlite3_file,
-
-    -- * OS Interface File Virtual Methods Object
-
-    -- | <http://sqlite.org/c3ref/io_methods.html>
-
-    Sqlite3_io_methods,
-
-    -- * Standard File Control Opcodes
-
-    -- | <http://sqlite.org/c3ref/c_fcntl_lockstate.html>
-
-    _SQLITE_FCNTL_LOCKSTATE,
-    _SQLITE_GET_LOCKPROXYFILE,
-    _SQLITE_SET_LOCKPROXYFILE,
-    _SQLITE_LAST_ERRNO,
-
-    -- * Mutex Handle
-
-    -- | <http://sqlite.org/c3ref/mutex.html>
-
-    Sqlite3_mutex,
-
-    -- * OS Interface Object
-
-    -- | <http://sqlite.org/c3ref/vfs.html>
-
-    Sqlite3_vfs,
-
-    -- * Flags for the xAccess VFS method
-
-    -- | <http://sqlite.org/c3ref/c_access_exists.html>
-
-    _SQLITE_ACCESS_EXISTS,
-    _SQLITE_ACCESS_READWRITE,
-    _SQLITE_ACCESS_READ,
-
-    -- * Initialize The SQLite Library
-
-    -- | <http://sqlite.org/c3ref/initialize.html>
-
-    sqlite3_initialize,
-    sqlite3_shutdown,
-    sqlite3_os_init,
-    sqlite3_os_end,
-
-    -- * Enable Or Disable Extended Result Codes
-
-    -- | <http://sqlite.org/c3ref/extended_result_codes.html>
-
-    sqlite3_extended_result_codes,
-
-    -- * Last Insert Rowid
-
-    -- | <http://sqlite.org/c3ref/last_insert_rowid.html>
-
-    sqlite3_last_insert_rowid,
-
-    -- * Count The Number Of Rows Modified
-
-    -- | <http://sqlite.org/c3ref/changes.html>
-
-    sqlite3_changes,
-
-    -- * Total Number Of Rows Modified
-
-    -- | <http://sqlite.org/c3ref/total_changes.html>
-
-    sqlite3_total_changes,
-
-    -- * Interrupt A Long-Running Query
-
-    -- | <http://sqlite.org/c3ref/interrupt.html>
-
-    sqlite3_interrupt,
-
-    -- * Determine If An SQL Statement Is Complete
-
-    -- | <http://sqlite.org/c3ref/complete.html>
-
-    sqlite3_complete,
-    sqlite3_complete16,
-
-    -- * Register A Callback To Handle SQLITE_BUSY Errors
-
-    -- | <http://sqlite.org/c3ref/busy_handler.html>
-
-    sqlite3_busy_handler,
-
-    -- * Set A Busy Timeout
-
-    -- | <http://sqlite.org/c3ref/busy_timeout.html>
-
-    sqlite3_busy_timeout,
-
-    -- * Convenience Routines For Running Queries
-
-    -- | <http://sqlite.org/c3ref/free_table.html>
-
-    sqlite3_get_table,
-    sqlite3_free_table,
-
-    -- * Memory Allocation Subsystem
-
-    -- | <http://sqlite.org/c3ref/free.html>
-
-    sqlite3_malloc,
-    sqlite3_realloc,
-    sqlite3_free,
-
-    -- * Memory Allocator Statistics
-
-    -- | <http://sqlite.org/c3ref/memory_highwater.html>
-
-    sqlite3_memory_used,
-    sqlite3_memory_highwater,
-
-    -- * Pseudo-Random Number Generator
-
-    -- | <http://sqlite.org/c3ref/randomness.html>
-
-    sqlite3_randomness,
-
-    -- * Compile-Time Authorization Callbacks
-
-    -- | <http://sqlite.org/c3ref/set_authorizer.html>
-
-    sqlite3_set_authorizer,
-
-    -- * Authorizer Return Codes
-
-    -- | <http://sqlite.org/c3ref/c_deny.html>
-
-    _SQLITE_DENY,
-    _SQLITE_IGNORE,
-
-    -- * Authorizer Action Codes
-
-    -- | <http://sqlite.org/c3ref/c_alter_table.html>
-
-    _SQLITE_CREATE_INDEX,
-    _SQLITE_CREATE_TABLE,
-    _SQLITE_CREATE_TEMP_INDEX,
-    _SQLITE_CREATE_TEMP_TABLE,
-    _SQLITE_CREATE_TEMP_TRIGGER,
-    _SQLITE_CREATE_TEMP_VIEW,
-    _SQLITE_CREATE_TRIGGER,
-    _SQLITE_CREATE_VIEW,
-    _SQLITE_DELETE,
-    _SQLITE_DROP_INDEX,
-    _SQLITE_DROP_TABLE,
-    _SQLITE_DROP_TEMP_INDEX,
-    _SQLITE_DROP_TEMP_TABLE,
-    _SQLITE_DROP_TEMP_TRIGGER,
-    _SQLITE_DROP_TEMP_VIEW,
-    _SQLITE_DROP_TRIGGER,
-    _SQLITE_DROP_VIEW,
-    _SQLITE_INSERT,
-    _SQLITE_PRAGMA,
-    _SQLITE_READ,
-    _SQLITE_SELECT,
-    _SQLITE_TRANSACTION,
-    _SQLITE_UPDATE,
-    _SQLITE_ATTACH,
-    _SQLITE_DETACH,
-    _SQLITE_ALTER_TABLE,
-    _SQLITE_REINDEX,
-    _SQLITE_ANALYZE,
-    _SQLITE_CREATE_VTABLE,
-    _SQLITE_DROP_VTABLE,
-    _SQLITE_FUNCTION,
-    _SQLITE_SAVEPOINT,
-    _SQLITE_COPY,
-
-    -- * Query Progress Callbacks
-
-    -- | <http://sqlite.org/c3ref/progress_handler.html>
-
-    sqlite3_progress_handler,
-
-    -- * Opening A New Database Connection
-
-    -- | <http://sqlite.org/c3ref/open.html>
-
-    sqlite3_open,
-    sqlite3_open16,
-    sqlite3_open_v2,
-
-    -- * Error Codes And Messages
-
-    -- | <http://sqlite.org/c3ref/errcode.html>
-
-    sqlite3_errcode,
-    sqlite3_extended_errcode,
-    sqlite3_errmsg,
-    sqlite3_errmsg16,
-
-    -- * SQL Statement Object
-
-    -- | <http://sqlite.org/c3ref/stmt.html>
-
-    Sqlite3_stmt,
-
-    -- * Run-time Limits
-
-    -- | <http://sqlite.org/c3ref/limit.html>
-
-    sqlite3_limit,
-
-    -- * Run-Time Limit Categories
-
-    -- | <http://sqlite.org/c3ref/c_limit_attached.html>
-
-    _SQLITE_LIMIT_LENGTH,
-    _SQLITE_LIMIT_SQL_LENGTH,
-    _SQLITE_LIMIT_COLUMN,
-    _SQLITE_LIMIT_EXPR_DEPTH,
-    _SQLITE_LIMIT_COMPOUND_SELECT,
-    _SQLITE_LIMIT_VDBE_OP,
-    _SQLITE_LIMIT_FUNCTION_ARG,
-    _SQLITE_LIMIT_ATTACHED,
-    _SQLITE_LIMIT_LIKE_PATTERN_LENGTH,
-    _SQLITE_LIMIT_VARIABLE_NUMBER,
-
-    -- * Compiling An SQL Statement
-
-    -- | <http://sqlite.org/c3ref/prepare.html>
-
-    sqlite3_prepare,
-    sqlite3_prepare_v2,
-    sqlite3_prepare16,
-    sqlite3_prepare16_v2,
-
-    -- * Retrieving Statement SQL
-
-    -- | <http://sqlite.org/c3ref/sql.html>
-
-    sqlite3_sql,
-
-    -- * Dynamically Typed Value Object
-
-    -- | <http://sqlite.org/c3ref/value.html>
-
-    Sqlite3_value,
-
-    -- * SQL Function Context Object
-
-    -- | <http://sqlite.org/c3ref/context.html>
-
-    Sqlite3_context,
-
-    -- * Binding Values To Prepared Statements
-
-    -- | <http://sqlite.org/c3ref/bind_blob.html>
-
-    sqlite3_bind_blob,
-    sqlite3_bind_double,
-    sqlite3_bind_int,
-    sqlite3_bind_int64,
-    sqlite3_bind_null,
-    sqlite3_bind_text,
-    sqlite3_bind_text16,
-    sqlite3_bind_value,
-    sqlite3_bind_zeroblob,
-
-    -- * Number Of SQL Parameters
-
-    -- | <http://sqlite.org/c3ref/bind_parameter_count.html>
-
-    sqlite3_bind_parameter_count,
-
-    -- * Name Of A Host Parameter
-
-    -- | <http://sqlite.org/c3ref/bind_parameter_name.html>
-
-    sqlite3_bind_parameter_name,
-
-    -- * Index Of A Parameter With A Given Name
-
-    -- | <http://sqlite.org/c3ref/bind_parameter_index.html>
-
-    sqlite3_bind_parameter_index,
-
-    -- * Reset All Bindings On A Prepared Statement
-
-    -- | <http://sqlite.org/c3ref/clear_bindings.html>
-
-    sqlite3_clear_bindings,
-
-    -- * Number Of Columns In A Result Set
-
-    -- | <http://sqlite.org/c3ref/column_count.html>
-
-    sqlite3_column_count,
-
-    -- * Column Names In A Result Set
-
-    -- | <http://sqlite.org/c3ref/column_name.html>
-
-    sqlite3_column_name,
-    sqlite3_column_name16,
-
-    -- * Source Of Data In A Query Result
-
-    -- | <http://sqlite.org/c3ref/column_database_name.html>
-
-    sqlite3_column_database_name,
-    sqlite3_column_database_name16,
-    sqlite3_column_table_name,
-    sqlite3_column_table_name16,
-    sqlite3_column_origin_name,
-    sqlite3_column_origin_name16,
-
-    -- * Declared Datatype Of A Query Result
-
-    -- | <http://sqlite.org/c3ref/column_decltype.html>
-
-    sqlite3_column_decltype,
-    sqlite3_column_decltype16,
-
-    -- * Evaluate An SQL Statement
-
-    -- | <http://sqlite.org/c3ref/step.html>
-
-    sqlite3_step,
-
-    -- * Number of columns in a result set
-
-    -- | <http://sqlite.org/c3ref/data_count.html>
-
-    sqlite3_data_count,
-
-    -- * Fundamental Datatypes
-
-    -- | <http://sqlite.org/c3ref/c_blob.html>
-
-    _SQLITE_INTEGER,
-    _SQLITE_FLOAT,
-    _SQLITE_BLOB,
-    _SQLITE_NULL,
-    _SQLITE3_TEXT,
-
-    -- * Result Values From A Query
-
-    -- | <http://sqlite.org/c3ref/column_blob.html>
-
-    sqlite3_column_blob,
-    sqlite3_column_bytes,
-    sqlite3_column_bytes16,
-    sqlite3_column_double,
-    sqlite3_column_int,
-    sqlite3_column_int64,
-    sqlite3_column_text,
-    sqlite3_column_text16,
-    sqlite3_column_type,
-    sqlite3_column_value,
-
-    -- * Destroy A Prepared Statement Object
-
-    -- | <http://sqlite.org/c3ref/finalize.html>
-
-    sqlite3_finalize,
-
-    -- * Reset A Prepared Statement Object
-
-    -- | <http://sqlite.org/c3ref/create_function.html>
-
-    sqlite3_create_function,
-    sqlite3_create_function16,
-
-    -- * Text Encodings
-
-    -- | <http://sqlite.org/c3ref/c_any.html>
-
-    _SQLITE_UTF8,
-    _SQLITE_UTF16LE,
-    _SQLITE_UTF16BE,
-    _SQLITE_UTF16,
-    _SQLITE_ANY,
-    _SQLITE_UTF16_ALIGNED,
-
-    -- * Obtaining SQL Function Parameter Values
-
-    -- | <http://sqlite.org/c3ref/value_blob.html>
-
-    sqlite3_value_blob,
-    sqlite3_value_bytes,
-    sqlite3_value_bytes16,
-    sqlite3_value_double,
-    sqlite3_value_int,
-    sqlite3_value_int64,
-    sqlite3_value_text,
-    sqlite3_value_text16,
-    sqlite3_value_text16le,
-    sqlite3_value_text16be,
-    sqlite3_value_type,
-    sqlite3_value_numeric_type,
-
-    -- * Obtain Aggregate Function Context
-
-    -- | <http://sqlite.org/c3ref/aggregate_context.html>
-
-    sqlite3_aggregate_context,
-
-    -- * User Data For Functions
-
-    -- | <http://sqlite.org/c3ref/user_data.html>
-
-    sqlite3_user_data,
-
-    -- * Database Connection For Functions
-
-    -- | <http://sqlite.org/c3ref/context_db_handle.html>
-
-    sqlite3_context_db_handle,
-
-    -- * Function Auxiliary Data
-
-    -- | <http://sqlite.org/c3ref/get_auxdata.html>
-
-    sqlite3_get_auxdata,
-    sqlite3_set_auxdata,
-
-    -- * Constants Defining Special Destructor Behavior
-
-    -- | <http://sqlite.org/c3ref/c_static.html>
-
-    Sqlite3_destructor_type,
-    _SQLITE_STATIC,
-    _SQLITE_TRANSIENT,
-
-    -- * Setting The Result Of An SQL Function
-
-    -- | <http://sqlite.org/c3ref/result_blob.html>
-
-    sqlite3_result_blob,
-    sqlite3_result_double,
-    sqlite3_result_error,
-    sqlite3_result_error16,
-    sqlite3_result_error_toobig,
-    sqlite3_result_error_nomem,
-    sqlite3_result_error_code,
-    sqlite3_result_int,
-    sqlite3_result_int64,
-    sqlite3_result_null,
-    sqlite3_result_text,
-    sqlite3_result_text16,
-    sqlite3_result_text16le,
-    sqlite3_result_text16be,
-    sqlite3_result_value,
-    sqlite3_result_zeroblob,
-
-    -- * Define New Collating Sequences
-
-    -- | <http://sqlite.org/c3ref/create_collation.html>
-
-    sqlite3_create_collation,
-    sqlite3_create_collation_v2,
-    sqlite3_create_collation16,
-
-    -- * Collation Needed Callbacks
-
-    -- | <http://sqlite.org/c3ref/collation_needed.html>
-
-    sqlite3_collation_needed,
-    sqlite3_collation_needed16,
-
-    -- * Suspend Execution For A Short Time
-
-    -- | <http://sqlite.org/c3ref/sleep.html>
-
-    sqlite3_sleep,
-
-    -- * Name Of The Folder Holding Temporary Files
-
-    -- | <http://sqlite.org/c3ref/temp_directory.html>
-
-    sqlite_temp_directory,
-
-    -- * Test For Auto-Commit Mode
-
-    -- | <http://sqlite.org/c3ref/get_autocommit.html>
-
-    sqlite3_get_autocommit,
-
-    -- * Find The Database Handle Of A Prepared Statement
-
-    -- | <http://sqlite.org/c3ref/db_handle.html>
-
-    sqlite3_db_handle,
-
-    -- * Find the next prepared statement
-
-    -- | <http://sqlite.org/c3ref/next_stmt.html>
-
-    sqlite3_next_stmt,
-
-    -- * Commit And Rollback Notification Callbacks
-
-    -- | <http://sqlite.org/c3ref/commit_hook.html>
-
-    sqlite3_commit_hook,
-    sqlite3_rollback_hook,
-
-    -- * Data Change Notification Callbacks
-
-    -- | <http://sqlite.org/c3ref/update_hook.html>
-
-    sqlite3_update_hook,
-
-    -- * Enable Or Disable Shared Pager Cache
-
-    -- | <http://sqlite.org/c3ref/enable_shared_cache.html>
-
-    sqlite3_enable_shared_cache,
-
-    -- * Attempt To Free Heap Memory
-
-    -- | <http://sqlite.org/c3ref/release_memory.html>
-
-    sqlite3_release_memory,
-
-    -- * Impose A Limit On Heap Size
-
-    -- | <http://sqlite.org/c3ref/soft_heap_limit.html>
-
-    sqlite3_soft_heap_limit,
-
-    -- * Load An Extension
-
-    -- | <http://sqlite.org/c3ref/load_extension.html>
-
-    sqlite3_load_extension,
-
-    -- * Enable Or Disable Extension Loading
-
-    -- | <http://sqlite.org/c3ref/enable_load_extension.html>
-
-    sqlite3_enable_load_extension,
-
-    -- * Automatically Load An Extensions
-
-    -- | <http://sqlite.org/c3ref/auto_extension.html>
-
-    sqlite3_auto_extension,
-
-    -- * Reset Automatic Extension Loading
-
-    -- | <http://sqlite.org/c3ref/reset_auto_extension.html>
-
-    sqlite3_reset_auto_extension,
-
-    -- * A Handle To An Open BLOB
-
-    -- | <http://sqlite.org/c3ref/blob.html>
-
-    Sqlite3_blob,
-
-    -- * Open A BLOB For Incremental I/O
-
-    -- | <http://sqlite.org/c3ref/blob_open.html>
-
-    sqlite3_blob_open,
-
-    -- * Close A BLOB Handle
-
-    -- | <http://sqlite.org/c3ref/blob_close.html>
-
-    sqlite3_blob_close,
-
-    -- * Return The Size Of An Open BLOB
-
-    -- | <http://sqlite.org/c3ref/blob_bytes.html>
-
-    sqlite3_blob_bytes,
-
-    -- * Read Data From A BLOB Incrementally
-
-    -- | <http://sqlite.org/c3ref/blob_read.html>
-
-    sqlite3_blob_read,
-
-    -- * Write Data Into A BLOB Incrementally
-
-    -- | <http://sqlite.org/c3ref/blob_write.html>
-
-    sqlite3_blob_write,
-
-    -- * Virtual File System Objects
-
-    -- | <http://sqlite.org/c3ref/vfs_find.html>
-
-    sqlite3_vfs_find,
-    sqlite3_vfs_register,
-    sqlite3_vfs_unregister,
-
-    -- * Mutexes
-
-    -- | <http://sqlite.org/c3ref/mutex_alloc.html>
-
-    sqlite3_mutex_alloc,
-    sqlite3_mutex_free,
-    sqlite3_mutex_enter,
-    sqlite3_mutex_try,
-    sqlite3_mutex_leave,
-
-    -- * Mutex Verification Routines
-
-    -- | <http://sqlite.org/c3ref/mutex_held.html>
-
-    sqlite3_mutex_held,
-    sqlite3_mutex_notheld,
-
-    -- * Mutex Types
-
-    -- | <http://sqlite.org/c3ref/c_mutex_fast.html>
-
-    _SQLITE_MUTEX_FAST,
-    _SQLITE_MUTEX_RECURSIVE,
-    _SQLITE_MUTEX_STATIC_MASTER,
-    _SQLITE_MUTEX_STATIC_MEM,
-    _SQLITE_MUTEX_STATIC_MEM2,
-    _SQLITE_MUTEX_STATIC_PRNG,
-    _SQLITE_MUTEX_STATIC_LRU,
-    _SQLITE_MUTEX_STATIC_LRU2,
-
-    -- * Retrieve the mutex for a database connection
-
-    -- | <http://sqlite.org/c3ref/db_mutex.html>
-
-    sqlite3_db_mutex,
-
-    -- * Low-Level Control Of Database Files
-
-    -- | <http://sqlite.org/c3ref/file_control.html>
-
-    sqlite3_file_control
-
- ) where
-
-import Sqlite3Constants
-import Sqlite3Types
-import Sqlite3Functions
diff --git a/src/Bindings/Sqlite3.hsc b/src/Bindings/Sqlite3.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Sqlite3.hsc
@@ -0,0 +1,516 @@
+#include <bindings.macros.h>
+#include <sqlite3.h>
+
+-- | <http://www.sqlite.org/capi3ref.html>
+
+module Bindings.Sqlite3 where
+#strict_import
+
+#opaque_t sqlite3_context
+
+#starttype sqlite3_file
+#field pMethods , Ptr <sqlite3_io_methods>
+#stoptype
+
+#starttype sqlite3_io_methods
+#field iVersion , CInt
+#field xClose , FunPtr (Ptr <sqlite3_file> -> IO CInt)
+#field xRead , FunPtr (Ptr <sqlite3_file> -> Ptr () -> \
+ CInt -> Int64 -> IO CInt)
+#field xWrite , FunPtr (Ptr <sqlite3_file> -> Ptr () -> \
+ CInt -> Int64 -> IO ())
+#field xTruncate , FunPtr (Ptr <sqlite3_file> -> \
+ Int64 -> IO CInt)
+#field xSync , FunPtr (Ptr <sqlite3_file> -> CInt -> IO CInt)
+#field xFileSize , FunPtr (Ptr <sqlite3_file> -> \
+ Ptr Int64 -> IO CInt)
+#field xLock , FunPtr (Ptr <sqlite3_file> -> CInt -> IO CInt)
+#field xUnlock , FunPtr (Ptr <sqlite3_file> -> CInt -> IO CInt)
+#field xCheckReservedLock , FunPtr (Ptr <sqlite3_file> -> \
+ Ptr CInt -> IO CInt)
+#field xFileControl , FunPtr (Ptr <sqlite3_file> -> \
+ CInt -> Ptr () -> IO CInt)
+#field xSectorSize , FunPtr (Ptr <sqlite3_file> -> IO CInt)
+#field xDeviceCharacteristics , FunPtr (Ptr <sqlite3_file> -> \
+ IO CInt)
+#stoptype
+
+#opaque_t sqlite3_mutex
+
+#globalvar sqlite3_temp_directory , CString
+
+#starttype sqlite3_vfs
+#field iVersion , CInt
+#field szOsFile , CInt
+#field mxPathname , CInt
+#field pNext , Ptr <sqlite3_vfs>
+#field zName , CString
+#field pAppData , Ptr ()
+#field xOpen , FunPtr (Ptr <sqlite3_vfs> -> CString -> \
+ Ptr <sqlite3_file> -> CInt -> Ptr CInt -> IO CInt)
+#field xDelete , FunPtr (Ptr <sqlite3_vfs> -> \
+ CString -> CInt -> IO CInt)
+#field xAccess , FunPtr (Ptr <sqlite3_vfs> -> CString -> \
+ CInt -> Ptr CInt -> IO CInt)
+#field xFullPathname , FunPtr (Ptr <sqlite3_vfs> -> \
+ CString -> CInt -> CString -> IO CInt)
+#field xDlOpen , FunPtr (Ptr <sqlite3_vfs> -> CString -> IO (Ptr ()))
+#field xDlError , FunPtr (Ptr <sqlite3_vfs> -> \
+ CInt -> CString -> IO ())
+#field xDlSym , FunPtr (Ptr <sqlite3_vfs> -> \
+ Ptr () -> CString -> IO (FunPtr (IO ())))
+#field xDlClose , FunPtr (Ptr <sqlite3_vfs> -> Ptr () -> IO ())
+#field xRandomness , FunPtr (Ptr <sqlite3_vfs> -> \
+ CInt -> CString -> IO CInt)
+#field xSleep , FunPtr (Ptr <sqlite3_vfs> -> CInt -> IO CInt)
+#field xCurrentTime , FunPtr (Ptr <sqlite3_vfs> -> \
+ Ptr CDouble -> IO CInt)
+#field xGetLastError , FunPtr (Ptr <sqlite3_vfs> -> \
+ CInt -> CString -> IO CInt)
+#stoptype
+
+#ccall sqlite3_aggregate_context , Ptr <sqlite3_context> -> \
+  CInt -> IO (Ptr ())
+#ccall sqlite3_auto_extension , FunPtr (IO ()) -> IO CInt
+#ccall sqlite3_bind_parameter_count , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_bind_parameter_index , Ptr <sqlite3_stmt> -> \
+  CString -> IO CInt
+#ccall sqlite3_bind_parameter_name , Ptr <sqlite3_stmt> -> \
+  CInt -> IO CString
+#ccall sqlite3_blob_bytes , Ptr <sqlite3_blob> -> IO CInt
+#ccall sqlite3_blob_close , Ptr <sqlite3_blob> -> IO CInt
+#ccall sqlite3_blob_open , Ptr <sqlite3> -> CString -> CString -> \
+  CString -> Int64 -> CInt -> Ptr (Ptr <sqlite3_blob>) -> \
+  IO CInt
+
+#ccall sqlite3_blob_read , Ptr <sqlite3_blob> -> Ptr () -> \
+    CInt -> CInt -> IO CInt
+#ccall sqlite3_blob_write , Ptr <sqlite3_blob> -> Ptr () -> \
+    CInt -> CInt -> IO CInt
+#ccall sqlite3_busy_handler , Ptr <sqlite3> -> FunPtr (Ptr () -> \
+    CInt -> IO CInt) -> Ptr () -> IO CInt
+#ccall sqlite3_busy_timeout , Ptr <sqlite3> -> CInt -> IO CInt
+#ccall sqlite3_changes , Ptr <sqlite3> -> IO CInt
+#ccall sqlite3_clear_bindings , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_close , Ptr <sqlite3> -> IO CInt
+#ccall sqlite3_column_count , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_context_db_handle , Ptr <sqlite3_context> -> \
+    IO (Ptr <sqlite3>)
+#ccall sqlite3_data_count , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_db_handle , Ptr <sqlite3_stmt> -> IO (Ptr <sqlite3>)
+#ccall sqlite3_db_mutex , Ptr <sqlite3> -> IO (Ptr <sqlite3_mutex>)
+#ccall sqlite3_enable_load_extension , Ptr <sqlite3> -> CInt -> IO CInt
+#ccall sqlite3_exec , Ptr <sqlite3> -> CString -> FunPtr (Ptr () -> \
+    CInt -> Ptr CString -> Ptr CString -> IO CInt) -> Ptr () -> \
+    Ptr CString -> IO CInt
+#ccall sqlite3_extended_result_codes , Ptr <sqlite3> -> CInt -> IO CInt
+#ccall sqlite3_file_control , Ptr <sqlite3> -> CString -> CInt -> \
+    Ptr () -> IO CInt
+#ccall sqlite3_finalize , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_interrupt , Ptr <sqlite3> -> IO ()
+#ccall sqlite3_last_insert_rowid , Ptr <sqlite3> -> IO Int64
+#ccall sqlite3_limit , Ptr <sqlite3> -> CInt -> CInt -> IO CInt
+#ccall sqlite3_load_extension , Ptr <sqlite3> -> CString -> \
+    CString -> Ptr CString -> IO CInt
+#ccall sqlite3_next_stmt , Ptr <sqlite3> -> Ptr <sqlite3_stmt> -> \
+    IO (Ptr <sqlite3_stmt>)
+#ccall sqlite3_progress_handler , Ptr <sqlite3> -> CInt -> \
+    FunPtr (Ptr () -> IO CInt) -> Ptr () -> IO ()
+#ccall sqlite3_randomness , CInt -> Ptr () -> IO ()
+#ccall sqlite3_release_memory , CInt -> IO CInt
+#ccall sqlite3_reset , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_reset_auto_extension , IO ()
+#ccall sqlite3_set_authorizer , Ptr <sqlite3> -> FunPtr (Ptr () -> \
+    CInt -> CString -> CString -> CString -> CString -> IO CInt) -> \
+    Ptr () -> IO CInt
+#ccall sqlite3_sleep , CInt -> IO CInt
+#ccall sqlite3_soft_heap_limit , CInt -> IO ()
+#ccall sqlite3_sql , Ptr <sqlite3_stmt> -> IO CString
+#ccall sqlite3_step , Ptr <sqlite3_stmt> -> IO CInt
+#ccall sqlite3_table_column_metadata , Ptr <sqlite3> -> CString -> \
+    CString -> CString -> Ptr CString -> Ptr CString -> Ptr CInt -> \
+    Ptr CInt -> Ptr CInt -> IO CInt
+#ccall sqlite3_threadsafe , IO CInt
+#ccall sqlite3_total_changes , Ptr <sqlite3> -> IO CInt
+#ccall sqlite3_update_hook , Ptr <sqlite3> -> FunPtr (Ptr () -> \
+    CInt -> CString -> CString -> Int64 -> IO ()) -> \
+    Ptr () -> IO (Ptr ())
+#ccall sqlite3_user_data , Ptr <sqlite3_context> -> IO (Ptr ())
+
+#num SQLITE_OK
+#num SQLITE_ERROR
+#num SQLITE_INTERNAL
+#num SQLITE_PERM
+#num SQLITE_ABORT
+#num SQLITE_BUSY
+#num SQLITE_LOCKED
+#num SQLITE_NOMEM
+#num SQLITE_READONLY
+#num SQLITE_INTERRUPT
+#num SQLITE_IOERR
+#num SQLITE_CORRUPT
+#num SQLITE_NOTFOUND
+#num SQLITE_FULL
+#num SQLITE_CANTOPEN
+#num SQLITE_PROTOCOL
+#num SQLITE_EMPTY
+#num SQLITE_SCHEMA
+#num SQLITE_TOOBIG
+#num SQLITE_CONSTRAINT
+#num SQLITE_MISMATCH
+#num SQLITE_MISUSE
+#num SQLITE_NOLFS
+#num SQLITE_AUTH
+#num SQLITE_FORMAT
+#num SQLITE_RANGE
+#num SQLITE_NOTADB
+#num SQLITE_ROW
+#num SQLITE_DONE
+#num SQLITE_ACCESS_EXISTS
+#num SQLITE_ACCESS_READWRITE
+#num SQLITE_ACCESS_READ
+#num SQLITE_CREATE_INDEX
+#num SQLITE_CREATE_TABLE
+#num SQLITE_CREATE_TEMP_INDEX
+#num SQLITE_CREATE_TEMP_TABLE
+#num SQLITE_CREATE_TEMP_TRIGGER
+#num SQLITE_CREATE_TEMP_VIEW
+#num SQLITE_CREATE_TRIGGER
+#num SQLITE_CREATE_VIEW
+#num SQLITE_DELETE
+#num SQLITE_DROP_INDEX
+#num SQLITE_DROP_TABLE
+#num SQLITE_DROP_TEMP_INDEX
+#num SQLITE_DROP_TEMP_TABLE
+#num SQLITE_DROP_TEMP_TRIGGER
+#num SQLITE_DROP_TEMP_VIEW
+#num SQLITE_DROP_TRIGGER
+#num SQLITE_DROP_VIEW
+#num SQLITE_INSERT
+#num SQLITE_PRAGMA
+#num SQLITE_READ
+#num SQLITE_SELECT
+#num SQLITE_TRANSACTION
+#num SQLITE_UPDATE
+#num SQLITE_ATTACH
+#num SQLITE_DETACH
+#num SQLITE_ALTER_TABLE
+#num SQLITE_REINDEX
+#num SQLITE_ANALYZE
+#num SQLITE_CREATE_VTABLE
+#num SQLITE_DROP_VTABLE
+#num SQLITE_FUNCTION
+#num SQLITE_SAVEPOINT
+#num SQLITE_COPY
+#num SQLITE_UTF8
+#num SQLITE_UTF16LE
+#num SQLITE_UTF16BE
+#num SQLITE_UTF16
+#num SQLITE_ANY
+#num SQLITE_UTF16_ALIGNED
+#num SQLITE_INTEGER
+#num SQLITE_FLOAT
+#num SQLITE_BLOB
+#num SQLITE_NULL
+#num SQLITE_TEXT
+#num SQLITE3_TEXT
+#num SQLITE_DENY
+#num SQLITE_IGNORE
+#num SQLITE_FCNTL_LOCKSTATE
+#num SQLITE_GET_LOCKPROXYFILE
+#num SQLITE_SET_LOCKPROXYFILE
+#num SQLITE_LAST_ERRNO
+#num SQLITE_IOCAP_ATOMIC
+#num SQLITE_IOCAP_ATOMIC512
+#num SQLITE_IOCAP_ATOMIC1K
+#num SQLITE_IOCAP_ATOMIC2K
+#num SQLITE_IOCAP_ATOMIC4K
+#num SQLITE_IOCAP_ATOMIC8K
+#num SQLITE_IOCAP_ATOMIC16K
+#num SQLITE_IOCAP_ATOMIC32K
+#num SQLITE_IOCAP_ATOMIC64K
+#num SQLITE_IOCAP_SAFE_APPEND
+#num SQLITE_IOCAP_SEQUENTIAL
+#num SQLITE_IOERR_READ
+#num SQLITE_IOERR_SHORT_READ
+#num SQLITE_IOERR_WRITE
+#num SQLITE_IOERR_FSYNC
+#num SQLITE_IOERR_DIR_FSYNC
+#num SQLITE_IOERR_TRUNCATE
+#num SQLITE_IOERR_FSTAT
+#num SQLITE_IOERR_UNLOCK
+#num SQLITE_IOERR_RDLOCK
+#num SQLITE_IOERR_DELETE
+#num SQLITE_IOERR_BLOCKED
+#num SQLITE_IOERR_NOMEM
+#num SQLITE_IOERR_ACCESS
+#num SQLITE_IOERR_CHECKRESERVEDLOCK
+#num SQLITE_IOERR_LOCK
+#num SQLITE_IOERR_CLOSE
+#num SQLITE_IOERR_DIR_CLOSE
+-- num SQLITE_LOCKED_SHAREDCACHE
+#num SQLITE_LIMIT_LENGTH
+#num SQLITE_LIMIT_SQL_LENGTH
+#num SQLITE_LIMIT_COLUMN
+#num SQLITE_LIMIT_EXPR_DEPTH
+#num SQLITE_LIMIT_COMPOUND_SELECT
+#num SQLITE_LIMIT_VDBE_OP
+#num SQLITE_LIMIT_FUNCTION_ARG
+#num SQLITE_LIMIT_ATTACHED
+#num SQLITE_LIMIT_LIKE_PATTERN_LENGTH
+#num SQLITE_LIMIT_VARIABLE_NUMBER
+-- num SQLITE_LIMIT_TRIGGER_DEPTH
+#num SQLITE_LOCK_NONE
+#num SQLITE_LOCK_SHARED
+#num SQLITE_LOCK_RESERVED
+#num SQLITE_LOCK_PENDING
+#num SQLITE_LOCK_EXCLUSIVE
+#num SQLITE_MUTEX_FAST
+#num SQLITE_MUTEX_RECURSIVE
+#num SQLITE_MUTEX_STATIC_MASTER
+#num SQLITE_MUTEX_STATIC_MEM
+#num SQLITE_MUTEX_STATIC_MEM2
+-- num SQLITE_MUTEX_STATIC_OPEN
+#num SQLITE_MUTEX_STATIC_PRNG
+#num SQLITE_MUTEX_STATIC_LRU
+#num SQLITE_MUTEX_STATIC_LRU2
+#num SQLITE_OPEN_READONLY
+#num SQLITE_OPEN_READWRITE
+#num SQLITE_OPEN_CREATE
+#num SQLITE_OPEN_DELETEONCLOSE
+#num SQLITE_OPEN_EXCLUSIVE
+#num SQLITE_OPEN_MAIN_DB
+#num SQLITE_OPEN_TEMP_DB
+#num SQLITE_OPEN_TRANSIENT_DB
+#num SQLITE_OPEN_MAIN_JOURNAL
+#num SQLITE_OPEN_TEMP_JOURNAL
+#num SQLITE_OPEN_SUBJOURNAL
+#num SQLITE_OPEN_MASTER_JOURNAL
+#num SQLITE_OPEN_NOMUTEX
+#num SQLITE_OPEN_FULLMUTEX
+-- num SQLITE_OPEN_SHAREDCACHE
+-- num SQLITE_OPEN_PRIVATECACHE
+
+#pointer SQLITE_VERSION
+#num SQLITE_VERSION_NUMBER
+-- pointer SQLITE_SOURCE_ID
+
+#callback sqlite3_destructor_type , FunPtr (Ptr () -> IO ())
+
+#function_pointer SQLITE_STATIC
+#function_pointer SQLITE_TRANSIENT
+
+#num SQLITE_SYNC_NORMAL
+#num SQLITE_SYNC_FULL
+#num SQLITE_SYNC_DATAONLY
+#num SQLITE_TESTCTRL_PRNG_SAVE
+#num SQLITE_TESTCTRL_PRNG_RESTORE
+#num SQLITE_TESTCTRL_PRNG_RESET
+#num SQLITE_TESTCTRL_BITVEC_TEST
+#num SQLITE_TESTCTRL_FAULT_INSTALL
+#num SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS
+-- num SQLITE_TESTCTRL_PENDING_BYTE
+-- num SQLITE_TESTCTRL_ASSERT
+-- num SQLITE_TESTCTRL_ALWAYS
+-- num SQLITE_TESTCTRL_RESERVE
+
+#opaque_t sqlite3_blob
+#opaque_t sqlite3
+#opaque_t sqlite3_stmt
+#opaque_t sqlite3_value
+
+#ccall sqlite3_collation_needed , Ptr <sqlite3> -> \
+  Ptr () -> FunPtr (Ptr () -> Ptr <sqlite3> -> CInt -> \
+  CString -> IO ()) -> IO CInt
+#ccall sqlite3_collation_needed16 , Ptr <sqlite3> -> \
+  Ptr () -> FunPtr (Ptr () -> Ptr <sqlite3> -> CInt -> \
+  Ptr () -> IO ()) -> IO CInt
+
+#ccall sqlite3_column_database_name , Ptr <sqlite3_stmt> -> \
+    CInt -> IO CString 
+#ccall sqlite3_column_database_name16 , Ptr <sqlite3_stmt> -> \
+    CInt -> IO (Ptr ())
+#ccall sqlite3_column_table_name , Ptr <sqlite3_stmt> -> \
+    CInt -> IO CString 
+#ccall sqlite3_column_table_name16 , Ptr <sqlite3_stmt> -> \
+    CInt -> IO (Ptr ())
+#ccall sqlite3_column_origin_name , Ptr <sqlite3_stmt> -> \
+    CInt -> IO CString 
+#ccall sqlite3_column_origin_name16 , Ptr <sqlite3_stmt> -> \
+    CInt -> IO (Ptr ())
+#ccall sqlite3_column_decltype , Ptr <sqlite3_stmt> -> \
+    CInt -> IO CString 
+#ccall sqlite3_column_decltype16 , Ptr <sqlite3_stmt> -> \
+    CInt -> IO (Ptr ())
+#ccall sqlite3_column_name , Ptr <sqlite3_stmt> -> CInt -> \
+    IO CString 
+#ccall sqlite3_column_name16 , Ptr <sqlite3_stmt> -> CInt -> \
+    IO (Ptr ())
+
+#ccall sqlite3_commit_hook , Ptr <sqlite3> -> FunPtr (Ptr () -> \
+    IO CInt) -> Ptr () -> IO (Ptr ())
+#ccall sqlite3_rollback_hook , Ptr <sqlite3> -> FunPtr (Ptr () -> \
+    IO ()) -> Ptr () -> IO (Ptr ())
+
+#ccall sqlite3_complete , CString -> IO CInt
+#ccall sqlite3_complete16 , Ptr () -> IO CInt
+
+#ccall sqlite3_create_collation , Ptr <sqlite3> -> CString -> \
+    CInt -> Ptr () -> FunPtr (Ptr () -> CInt -> Ptr () -> \
+    CInt -> Ptr () -> IO CInt) -> IO CInt
+#ccall sqlite3_create_collation_v2 , Ptr <sqlite3> -> CString -> \
+    CInt -> Ptr () -> FunPtr (Ptr () -> CInt -> Ptr () -> \
+    CInt -> Ptr () -> IO CInt) -> FunPtr (Ptr () -> IO ()) -> IO CInt
+#ccall sqlite3_create_collation16 , Ptr <sqlite3> -> Ptr () -> \
+    CInt -> Ptr () -> FunPtr (Ptr () -> CInt -> Ptr () -> \
+    CInt -> Ptr () -> IO CInt) -> IO CInt
+
+#ccall sqlite3_errcode , Ptr <sqlite3> -> IO CInt
+#ccall sqlite3_extended_errcode , Ptr <sqlite3> -> IO CInt
+#ccall sqlite3_errmsg , Ptr <sqlite3> -> IO CString
+#ccall sqlite3_errmsg16 , Ptr <sqlite3> -> IO (Ptr ())
+
+#ccall sqlite3_malloc , CInt -> IO (Ptr ())
+#ccall sqlite3_realloc , Ptr () -> CInt -> IO (Ptr ())
+#ccall sqlite3_free , Ptr () -> IO ()
+
+#ccall sqlite3_get_table , Ptr <sqlite3> -> CString -> \
+    Ptr (Ptr CString) -> Ptr CInt -> Ptr CInt -> \
+    Ptr CString -> IO CInt
+#ccall sqlite3_free_table , Ptr CString -> IO ()
+
+#ccall sqlite3_get_auxdata , Ptr <sqlite3_context> -> \
+    CInt -> IO (Ptr ())
+#ccall sqlite3_set_auxdata , Ptr <sqlite3_context> -> CInt -> \
+    Ptr () -> FunPtr (Ptr () -> IO ()) -> IO ()
+
+#ccall sqlite3_initialize , IO CInt
+#ccall sqlite3_shutdown , IO CInt
+#ccall sqlite3_os_init , IO CInt
+#ccall sqlite3_os_end , IO CInt
+
+#globalarray sqlite3_version , CChar
+#ccall sqlite3_libversion , IO CString
+-- ccall sqlite3_sourceid , IO CString
+#ccall sqlite3_libversion_number , IO CInt
+
+#ccall sqlite3_memory_used , IO Int64
+#ccall sqlite3_memory_highwater , CInt  -> IO Int64
+
+#ccall sqlite3_mutex_alloc , CInt -> IO (Ptr <sqlite3_mutex>)
+#ccall sqlite3_mutex_free , Ptr <sqlite3_mutex> -> IO ()
+#ccall sqlite3_mutex_enter , Ptr <sqlite3_mutex> -> IO ()
+#ccall sqlite3_mutex_try , Ptr <sqlite3_mutex> -> IO CInt
+#ccall sqlite3_mutex_leave , Ptr <sqlite3_mutex> -> IO ()
+
+-- ccall sqlite3_mutex_held , Ptr <sqlite3_mutex> -> IO CInt
+-- ccall sqlite3_mutex_notheld , Ptr <sqlite3_mutex> -> IO CInt
+
+#ccall sqlite3_open , CString -> Ptr (Ptr <sqlite3>) -> IO CInt
+#ccall sqlite3_open16 , Ptr () -> Ptr (Ptr <sqlite3>) -> IO CInt
+#ccall sqlite3_open_v2 , CString -> Ptr (Ptr <sqlite3>) -> \
+    CInt -> CString -> IO CInt
+
+#ccall sqlite3_result_blob , Ptr <sqlite3_context> -> Ptr () -> \
+    CInt -> FunPtr (Ptr () -> IO ()) -> IO ()
+#ccall sqlite3_result_double , Ptr <sqlite3_context> -> \
+    CDouble -> IO ()
+#ccall sqlite3_result_error , Ptr <sqlite3_context> -> \
+    CString -> CInt -> IO ()
+#ccall sqlite3_result_error16 , Ptr <sqlite3_context> -> \
+    Ptr () -> CInt -> IO ()
+#ccall sqlite3_result_error_toobig , Ptr <sqlite3_context> -> IO ()
+#ccall sqlite3_result_error_nomem , Ptr <sqlite3_context> -> IO ()
+#ccall sqlite3_result_error_code , Ptr <sqlite3_context> -> \
+    CInt -> IO ()
+#ccall sqlite3_result_int , Ptr <sqlite3_context> -> CInt -> IO ()
+#ccall sqlite3_result_int64 , Ptr <sqlite3_context> -> Int64 -> IO ()
+#ccall sqlite3_result_null , Ptr <sqlite3_context> -> IO ()
+#ccall sqlite3_result_text , Ptr <sqlite3_context> -> CString -> \
+    CInt -> FunPtr (Ptr () -> IO ()) -> IO ()
+#ccall sqlite3_result_text16 , Ptr <sqlite3_context> -> Ptr () -> \
+    CInt -> FunPtr (Ptr () -> IO ()) -> IO ()
+#ccall sqlite3_result_text16le , Ptr <sqlite3_context> -> Ptr () -> \
+    CInt -> FunPtr (Ptr () -> IO ()) -> IO ()
+#ccall sqlite3_result_text16be , Ptr <sqlite3_context> -> Ptr () -> \
+    CInt -> FunPtr (Ptr () -> IO ()) -> IO ()
+#ccall sqlite3_result_value , Ptr <sqlite3_context> -> \
+    Ptr <sqlite3_value> -> IO ()
+#ccall sqlite3_result_zeroblob , Ptr <sqlite3_context> -> \
+    CInt -> IO ()
+
+#ccall sqlite3_value_blob , Ptr <sqlite3_value> -> IO (Ptr ())
+#ccall sqlite3_value_bytes , Ptr <sqlite3_value> -> IO CInt
+#ccall sqlite3_value_bytes16 , Ptr <sqlite3_value> -> IO CInt
+#ccall sqlite3_value_double , Ptr <sqlite3_value> -> IO CDouble
+#ccall sqlite3_value_int , Ptr <sqlite3_value> -> IO CInt
+#ccall sqlite3_value_int64 , Ptr <sqlite3_value> -> IO Int64
+#ccall sqlite3_value_text , Ptr <sqlite3_value> -> IO (Ptr CUChar)
+#ccall sqlite3_value_text16 , Ptr <sqlite3_value> -> IO (Ptr ())
+#ccall sqlite3_value_text16le , Ptr <sqlite3_value> -> IO (Ptr ())
+#ccall sqlite3_value_text16be , Ptr <sqlite3_value> -> IO (Ptr ())
+#ccall sqlite3_value_type , Ptr <sqlite3_value> -> IO CInt
+#ccall sqlite3_value_numeric_type , Ptr <sqlite3_value> -> IO CInt
+
+#ccall sqlite3_vfs_find , CString -> IO (Ptr <sqlite3_vfs>)
+#ccall sqlite3_vfs_register , Ptr <sqlite3_vfs> -> CInt -> IO CInt
+#ccall sqlite3_vfs_unregister , Ptr <sqlite3_vfs> -> IO CInt
+
+#ccall sqlite3_bind_blob , Ptr <sqlite3_stmt> -> CInt -> \
+    Ptr () -> CInt -> FunPtr (Ptr () -> IO ()) -> IO CInt
+#ccall sqlite3_bind_double , Ptr <sqlite3_stmt> -> CInt -> \
+    CDouble -> IO CInt
+#ccall sqlite3_bind_int , Ptr <sqlite3_stmt> -> CInt -> \
+    CInt -> IO CInt
+#ccall sqlite3_bind_int64 , Ptr <sqlite3_stmt> -> CInt -> \
+    Int64 -> IO CInt
+#ccall sqlite3_bind_null , Ptr <sqlite3_stmt> -> CInt -> IO CInt
+#ccall sqlite3_bind_text , Ptr <sqlite3_stmt> -> CInt -> \
+    CString -> CInt -> FunPtr (Ptr () -> IO ()) -> IO CInt
+#ccall sqlite3_bind_text16 , Ptr <sqlite3_stmt> -> CInt -> \
+    Ptr () -> CInt -> FunPtr (Ptr () -> IO ()) -> IO CInt
+#ccall sqlite3_bind_value , Ptr <sqlite3_stmt> -> CInt -> \
+    Ptr <sqlite3_value> -> IO CInt
+#ccall sqlite3_bind_zeroblob , Ptr <sqlite3_stmt> -> CInt -> \
+    CInt -> IO CInt
+
+#ccall sqlite3_prepare , Ptr <sqlite3> -> CString -> CInt -> \
+    Ptr (Ptr <sqlite3_stmt>) -> Ptr CString -> IO CInt
+#ccall sqlite3_prepare_v2 , Ptr <sqlite3> -> CString -> CInt -> \
+    Ptr (Ptr <sqlite3_stmt>) -> Ptr CString -> IO CInt
+#ccall sqlite3_prepare16 , Ptr <sqlite3> -> Ptr () -> CInt -> \
+    Ptr (Ptr <sqlite3_stmt>) -> Ptr (Ptr ()) -> IO CInt
+#ccall sqlite3_prepare16_v2 , Ptr <sqlite3> -> Ptr () -> CInt -> \
+    Ptr (Ptr <sqlite3_stmt>) -> Ptr (Ptr ()) -> IO CInt
+
+#ccall sqlite3_create_function , Ptr <sqlite3> -> CString -> \
+    CInt -> CInt -> Ptr () -> FunPtr (Ptr <sqlite3_context> -> \
+    CInt -> Ptr (Ptr <sqlite3_value>) -> IO ()) -> \
+    FunPtr (Ptr <sqlite3_context> -> CInt -> \
+    Ptr (Ptr <sqlite3_value>) -> IO ()) -> \
+    FunPtr (Ptr <sqlite3_context> -> IO ()) -> IO CInt
+#ccall sqlite3_create_function16 , Ptr <sqlite3> -> Ptr () -> CInt -> \
+    CInt -> Ptr () -> FunPtr (Ptr <sqlite3_context> -> CInt -> \
+    Ptr (Ptr <sqlite3_value>) -> IO ()) -> \
+    FunPtr (Ptr <sqlite3_context> -> CInt -> \
+    Ptr (Ptr <sqlite3_value>) -> IO ()) -> \
+    FunPtr (Ptr <sqlite3_context> -> IO ()) -> IO CInt
+
+#ccall sqlite3_get_autocommit , Ptr <sqlite3> -> IO CInt
+
+#ccall sqlite3_column_blob , Ptr <sqlite3_stmt> -> CInt -> IO (Ptr ())
+#ccall sqlite3_column_bytes , Ptr <sqlite3_stmt> -> CInt -> IO CInt
+#ccall sqlite3_column_bytes16 , Ptr <sqlite3_stmt> -> CInt -> IO CInt
+#ccall sqlite3_column_double , Ptr <sqlite3_stmt> -> CInt -> IO CDouble
+#ccall sqlite3_column_int , Ptr <sqlite3_stmt> -> CInt -> IO CInt
+#ccall sqlite3_column_int64 , Ptr <sqlite3_stmt> -> \
+  CInt -> IO Int64
+#ccall sqlite3_column_text , Ptr <sqlite3_stmt> -> \
+  CInt -> IO (Ptr CUChar)
+#ccall sqlite3_column_text16 , Ptr <sqlite3_stmt> -> CInt -> IO (Ptr ())
+#ccall sqlite3_column_type , Ptr <sqlite3_stmt> -> CInt -> IO CInt
+#ccall sqlite3_column_value , Ptr <sqlite3_stmt> -> \
+  CInt -> IO (Ptr <sqlite3_value>)
+
+#ccall sqlite3_enable_shared_cache , CInt -> IO CInt
+
diff --git a/src/Sqlite3Constants.hs b/src/Sqlite3Constants.hs
deleted file mode 100644
--- a/src/Sqlite3Constants.hs
+++ /dev/null
@@ -1,474 +0,0 @@
-module Sqlite3Constants where
-import Foreign
-import Foreign.C
-import Sqlite3Types
-
-foreign import ccall "_SQLITE_OK" _SQLITE_OK
-    :: CInt
-
-foreign import ccall "_SQLITE_ERROR" _SQLITE_ERROR
-    :: CInt
-
-foreign import ccall "_SQLITE_INTERNAL" _SQLITE_INTERNAL
-    :: CInt
-
-foreign import ccall "_SQLITE_PERM" _SQLITE_PERM
-    :: CInt
-
-foreign import ccall "_SQLITE_ABORT" _SQLITE_ABORT
-    :: CInt
-
-foreign import ccall "_SQLITE_BUSY" _SQLITE_BUSY
-    :: CInt
-
-foreign import ccall "_SQLITE_LOCKED" _SQLITE_LOCKED
-    :: CInt
-
-foreign import ccall "_SQLITE_NOMEM" _SQLITE_NOMEM
-    :: CInt
-
-foreign import ccall "_SQLITE_READONLY" _SQLITE_READONLY
-    :: CInt
-
-foreign import ccall "_SQLITE_INTERRUPT" _SQLITE_INTERRUPT
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR" _SQLITE_IOERR
-    :: CInt
-
-foreign import ccall "_SQLITE_CORRUPT" _SQLITE_CORRUPT
-    :: CInt
-
-foreign import ccall "_SQLITE_NOTFOUND" _SQLITE_NOTFOUND
-    :: CInt
-
-foreign import ccall "_SQLITE_FULL" _SQLITE_FULL
-    :: CInt
-
-foreign import ccall "_SQLITE_CANTOPEN" _SQLITE_CANTOPEN
-    :: CInt
-
-foreign import ccall "_SQLITE_PROTOCOL" _SQLITE_PROTOCOL
-    :: CInt
-
-foreign import ccall "_SQLITE_EMPTY" _SQLITE_EMPTY
-    :: CInt
-
-foreign import ccall "_SQLITE_SCHEMA" _SQLITE_SCHEMA
-    :: CInt
-
-foreign import ccall "_SQLITE_TOOBIG" _SQLITE_TOOBIG
-    :: CInt
-
-foreign import ccall "_SQLITE_CONSTRAINT" _SQLITE_CONSTRAINT
-    :: CInt
-
-foreign import ccall "_SQLITE_MISMATCH" _SQLITE_MISMATCH
-    :: CInt
-
-foreign import ccall "_SQLITE_MISUSE" _SQLITE_MISUSE
-    :: CInt
-
-foreign import ccall "_SQLITE_NOLFS" _SQLITE_NOLFS
-    :: CInt
-
-foreign import ccall "_SQLITE_AUTH" _SQLITE_AUTH
-    :: CInt
-
-foreign import ccall "_SQLITE_FORMAT" _SQLITE_FORMAT
-    :: CInt
-
-foreign import ccall "_SQLITE_RANGE" _SQLITE_RANGE
-    :: CInt
-
-foreign import ccall "_SQLITE_NOTADB" _SQLITE_NOTADB
-    :: CInt
-
-foreign import ccall "_SQLITE_ROW" _SQLITE_ROW
-    :: CInt
-
-foreign import ccall "_SQLITE_DONE" _SQLITE_DONE
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_READ" _SQLITE_IOERR_READ
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_SHORT_READ" _SQLITE_IOERR_SHORT_READ
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_WRITE" _SQLITE_IOERR_WRITE
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_FSYNC" _SQLITE_IOERR_FSYNC
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_DIR_FSYNC" _SQLITE_IOERR_DIR_FSYNC
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_TRUNCATE" _SQLITE_IOERR_TRUNCATE
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_FSTAT" _SQLITE_IOERR_FSTAT
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_UNLOCK" _SQLITE_IOERR_UNLOCK
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_RDLOCK" _SQLITE_IOERR_RDLOCK
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_DELETE" _SQLITE_IOERR_DELETE
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_BLOCKED" _SQLITE_IOERR_BLOCKED
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_NOMEM" _SQLITE_IOERR_NOMEM
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_ACCESS" _SQLITE_IOERR_ACCESS
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_CHECKRESERVEDLOCK"
- _SQLITE_IOERR_CHECKRESERVEDLOCK
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_LOCK" _SQLITE_IOERR_LOCK
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_CLOSE" _SQLITE_IOERR_CLOSE
-    :: CInt
-
-foreign import ccall "_SQLITE_IOERR_DIR_CLOSE" _SQLITE_IOERR_DIR_CLOSE
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_READONLY" _SQLITE_OPEN_READONLY
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_READWRITE" _SQLITE_OPEN_READWRITE
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_CREATE" _SQLITE_OPEN_CREATE
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_DELETEONCLOSE"
- _SQLITE_OPEN_DELETEONCLOSE
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_EXCLUSIVE" _SQLITE_OPEN_EXCLUSIVE
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_MAIN_DB" _SQLITE_OPEN_MAIN_DB
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_TEMP_DB" _SQLITE_OPEN_TEMP_DB
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_TRANSIENT_DB"
- _SQLITE_OPEN_TRANSIENT_DB
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_MAIN_JOURNAL"
- _SQLITE_OPEN_MAIN_JOURNAL
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_TEMP_JOURNAL" _SQLITE_OPEN_TEMP_JOURNAL
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_SUBJOURNAL" _SQLITE_OPEN_SUBJOURNAL
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_MASTER_JOURNAL"
- _SQLITE_OPEN_MASTER_JOURNAL
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_NOMUTEX" _SQLITE_OPEN_NOMUTEX
-    :: CInt
-
-foreign import ccall "_SQLITE_OPEN_FULLMUTEX" _SQLITE_OPEN_FULLMUTEX
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC" _SQLITE_IOCAP_ATOMIC
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC512" _SQLITE_IOCAP_ATOMIC512
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC1K" _SQLITE_IOCAP_ATOMIC1K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC2K" _SQLITE_IOCAP_ATOMIC2K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC4K" _SQLITE_IOCAP_ATOMIC4K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC8K" _SQLITE_IOCAP_ATOMIC8K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC16K" _SQLITE_IOCAP_ATOMIC16K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC32K" _SQLITE_IOCAP_ATOMIC32K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_ATOMIC64K" _SQLITE_IOCAP_ATOMIC64K
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_SAFE_APPEND"
- _SQLITE_IOCAP_SAFE_APPEND
-    :: CInt
-
-foreign import ccall "_SQLITE_IOCAP_SEQUENTIAL" _SQLITE_IOCAP_SEQUENTIAL
-    :: CInt
-
-foreign import ccall "_SQLITE_LOCK_NONE" _SQLITE_LOCK_NONE
-    :: CInt
-
-foreign import ccall "_SQLITE_LOCK_SHARED" _SQLITE_LOCK_SHARED
-    :: CInt
-
-foreign import ccall "_SQLITE_LOCK_RESERVED" _SQLITE_LOCK_RESERVED
-    :: CInt
-
-foreign import ccall "_SQLITE_LOCK_PENDING" _SQLITE_LOCK_PENDING
-    :: CInt
-
-foreign import ccall "_SQLITE_LOCK_EXCLUSIVE" _SQLITE_LOCK_EXCLUSIVE
-    :: CInt
-
-foreign import ccall "_SQLITE_SYNC_NORMAL" _SQLITE_SYNC_NORMAL
-    :: CInt
-
-foreign import ccall "_SQLITE_SYNC_FULL" _SQLITE_SYNC_FULL
-    :: CInt
-
-foreign import ccall "_SQLITE_SYNC_DATAONLY" _SQLITE_SYNC_DATAONLY
-    :: CInt
-
-foreign import ccall "_SQLITE_FCNTL_LOCKSTATE" _SQLITE_FCNTL_LOCKSTATE
-  
-    :: CInt
-
-foreign import ccall "_SQLITE_GET_LOCKPROXYFILE"
- _SQLITE_GET_LOCKPROXYFILE
-    :: CInt
-
-foreign import ccall "_SQLITE_SET_LOCKPROXYFILE"
- _SQLITE_SET_LOCKPROXYFILE
-    :: CInt
-
-foreign import ccall "_SQLITE_LAST_ERRNO" _SQLITE_LAST_ERRNO
-    :: CInt
-
-foreign import ccall "_SQLITE_ACCESS_EXISTS" _SQLITE_ACCESS_EXISTS
-    :: CInt
-
-foreign import ccall "_SQLITE_ACCESS_READWRITE" _SQLITE_ACCESS_READWRITE
-    :: CInt
-
-foreign import ccall "_SQLITE_ACCESS_READ" _SQLITE_ACCESS_READ
-    :: CInt
-
-foreign import ccall "_SQLITE_DENY" _SQLITE_DENY
-    :: CInt
-
-foreign import ccall "_SQLITE_IGNORE" _SQLITE_IGNORE
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_INDEX" _SQLITE_CREATE_INDEX
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_TABLE" _SQLITE_CREATE_TABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_TEMP_INDEX" _SQLITE_CREATE_TEMP_INDEX
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_TEMP_TABLE" _SQLITE_CREATE_TEMP_TABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_TEMP_TRIGGER"
- _SQLITE_CREATE_TEMP_TRIGGER
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_TEMP_VIEW" _SQLITE_CREATE_TEMP_VIEW
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_TRIGGER" _SQLITE_CREATE_TRIGGER
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_VIEW" _SQLITE_CREATE_VIEW
-    :: CInt
-
-foreign import ccall "_SQLITE_DELETE" _SQLITE_DELETE
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_INDEX" _SQLITE_DROP_INDEX
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_TABLE" _SQLITE_DROP_TABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_TEMP_INDEX" _SQLITE_DROP_TEMP_INDEX
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_TEMP_TABLE" _SQLITE_DROP_TEMP_TABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_TEMP_TRIGGER" _SQLITE_DROP_TEMP_TRIGGER
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_TEMP_VIEW" _SQLITE_DROP_TEMP_VIEW
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_TRIGGER" _SQLITE_DROP_TRIGGER
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_VIEW" _SQLITE_DROP_VIEW
-    :: CInt
-
-foreign import ccall "_SQLITE_INSERT" _SQLITE_INSERT
-    :: CInt
-
-foreign import ccall "_SQLITE_PRAGMA" _SQLITE_PRAGMA
-    :: CInt
-
-foreign import ccall "_SQLITE_READ" _SQLITE_READ
-    :: CInt
-
-foreign import ccall "_SQLITE_SELECT" _SQLITE_SELECT
-    :: CInt
-
-foreign import ccall "_SQLITE_TRANSACTION" _SQLITE_TRANSACTION
-    :: CInt
-
-foreign import ccall "_SQLITE_UPDATE" _SQLITE_UPDATE
-    :: CInt
-
-foreign import ccall "_SQLITE_ATTACH" _SQLITE_ATTACH
-    :: CInt
-
-foreign import ccall "_SQLITE_DETACH" _SQLITE_DETACH
-    :: CInt
-
-foreign import ccall "_SQLITE_ALTER_TABLE" _SQLITE_ALTER_TABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_REINDEX" _SQLITE_REINDEX
-    :: CInt
-
-foreign import ccall "_SQLITE_ANALYZE" _SQLITE_ANALYZE
-    :: CInt
-
-foreign import ccall "_SQLITE_CREATE_VTABLE" _SQLITE_CREATE_VTABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_DROP_VTABLE" _SQLITE_DROP_VTABLE
-    :: CInt
-
-foreign import ccall "_SQLITE_FUNCTION" _SQLITE_FUNCTION
-    :: CInt
-
-foreign import ccall "_SQLITE_SAVEPOINT" _SQLITE_SAVEPOINT
-    :: CInt
-
-foreign import ccall "_SQLITE_COPY" _SQLITE_COPY
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_LENGTH" _SQLITE_LIMIT_LENGTH
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_SQL_LENGTH" _SQLITE_LIMIT_SQL_LENGTH
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_COLUMN" _SQLITE_LIMIT_COLUMN
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_EXPR_DEPTH" _SQLITE_LIMIT_EXPR_DEPTH
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_COMPOUND_SELECT" _SQLITE_LIMIT_COMPOUND_SELECT
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_VDBE_OP" _SQLITE_LIMIT_VDBE_OP
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_FUNCTION_ARG" _SQLITE_LIMIT_FUNCTION_ARG
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_ATTACHED" _SQLITE_LIMIT_ATTACHED
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_LIKE_PATTERN_LENGTH"
- _SQLITE_LIMIT_LIKE_PATTERN_LENGTH
-    :: CInt
-
-foreign import ccall "_SQLITE_LIMIT_VARIABLE_NUMBER"
- _SQLITE_LIMIT_VARIABLE_NUMBER
-    :: CInt
-
-foreign import ccall "_SQLITE_INTEGER" _SQLITE_INTEGER
-    :: CInt
-
-foreign import ccall "_SQLITE_FLOAT" _SQLITE_FLOAT
-    :: CInt
-
-foreign import ccall "_SQLITE_BLOB" _SQLITE_BLOB
-    :: CInt
-
-foreign import ccall "_SQLITE_NULL" _SQLITE_NULL
-    :: CInt
-
-foreign import ccall "_SQLITE3_TEXT" _SQLITE3_TEXT
-    :: CInt
-
-foreign import ccall "_SQLITE_UTF8" _SQLITE_UTF8
-    :: CInt
-
-foreign import ccall "_SQLITE_UTF16LE" _SQLITE_UTF16LE
-    :: CInt
-
-foreign import ccall "_SQLITE_UTF16BE" _SQLITE_UTF16BE
-    :: CInt
-
-foreign import ccall "_SQLITE_UTF16" _SQLITE_UTF16
-    :: CInt
-
-foreign import ccall "_SQLITE_ANY" _SQLITE_ANY
-    :: CInt
-
-foreign import ccall "_SQLITE_UTF16_ALIGNED" _SQLITE_UTF16_ALIGNED
-    :: CInt
-
-foreign import ccall "_SQLITE_STATIC" _SQLITE_STATIC
-    :: Sqlite3_destructor_type a
-
-foreign import ccall "_SQLITE_TRANSIENT" _SQLITE_TRANSIENT
-    :: Sqlite3_destructor_type a
-
-foreign import ccall "_SQLITE_MUTEX_FAST" _SQLITE_MUTEX_FAST
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_RECURSIVE" _SQLITE_MUTEX_RECURSIVE
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_STATIC_MASTER"
- _SQLITE_MUTEX_STATIC_MASTER
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_STATIC_MEM" _SQLITE_MUTEX_STATIC_MEM
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_STATIC_MEM2" _SQLITE_MUTEX_STATIC_MEM2
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_STATIC_PRNG" _SQLITE_MUTEX_STATIC_PRNG
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_STATIC_LRU" _SQLITE_MUTEX_STATIC_LRU
-    :: CInt
-
-foreign import ccall "_SQLITE_MUTEX_STATIC_LRU2" _SQLITE_MUTEX_STATIC_LRU2
-    :: CInt
-
diff --git a/src/Sqlite3Functions.hs b/src/Sqlite3Functions.hs
deleted file mode 100644
--- a/src/Sqlite3Functions.hs
+++ /dev/null
@@ -1,521 +0,0 @@
-module Sqlite3Functions where
-import Foreign
-import Foreign.C
-import Bindings.Utilities
-import Sqlite3Types
-
-foreign import ccall "_sqlite3_version" sqlite3_version
-    :: CString
-
-foreign import ccall "sqlite3_libversion" sqlite3_libversion
-    :: IO CString
-
-foreign import ccall "sqlite3_libversion_number" sqlite3_libversion_number
-    :: CInt
-
-foreign import ccall "sqlite3_threadsafe" sqlite3_threadsafe
-    :: IO CInt
-
-foreign import ccall "sqlite3_close" sqlite3_close
-    :: Ptr Sqlite3 -> CInt
-
-foreign import ccall "sqlite3_exec" sqlite3_exec
-    :: Ptr Sqlite3 -> CString -> FunPtr (Ptr a -> CInt ->
-       Ptr CString -> Ptr CString -> IO CInt) -> Ptr a ->
-       Ptr CString -> IO CInt
-
-foreign import ccall "sqlite3_initialize" sqlite3_initialize
-    :: CInt
-
-foreign import ccall "sqlite3_shutdown" sqlite3_shutdown
-    :: CInt
-
-foreign import ccall "sqlite3_os_init" sqlite3_os_init
-    :: CInt
-
-foreign import ccall "sqlite3_os_end" sqlite3_os_end
-    :: CInt
-
-foreign import ccall "sqlite3_extended_result_codes" 
- sqlite3_extended_result_codes
-    :: Ptr Sqlite3 -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_last_insert_rowid" 
- sqlite3_last_insert_rowid
-    :: Ptr Sqlite3 -> IO Int64
-
-foreign import ccall "sqlite3_changes" sqlite3_changes
-    :: Ptr Sqlite3 -> IO CInt
-
-foreign import ccall "sqlite3_total_changes" sqlite3_total_changes
-    :: Ptr Sqlite3 -> IO CInt
-
-foreign import ccall "sqlite3_interrupt" sqlite3_interrupt
-    :: Ptr Sqlite3 -> IO ()
-
-foreign import ccall "sqlite3_complete" sqlite3_complete
-    :: CString -> IO CInt
-
-foreign import ccall "sqlite3_complete16" sqlite3_complete16
-    :: Ptr () -> IO CInt
-
-foreign import ccall "sqlite3_busy_handler" sqlite3_busy_handler
-    :: Ptr Sqlite3 -> FunPtr (Ptr a -> CInt -> IO CInt) ->
-       Ptr a -> IO CInt
-
-foreign import ccall "sqlite3_busy_timeout" sqlite3_busy_timeout
-    :: Ptr Sqlite3 -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_get_table" sqlite3_get_table
-    :: Ptr Sqlite3 -> CString -> Ptr (Ptr CString) ->
-       Ptr CInt -> Ptr CInt -> Ptr CString -> IO CInt
-
-foreign import ccall "sqlite3_free_table" sqlite3_free_table
-    :: Ptr CString -> IO ()
-
-foreign import ccall "sqlite3_malloc" sqlite3_malloc
-    :: CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_realloc" sqlite3_realloc
-    :: Ptr () -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_free" sqlite3_free
-    :: Ptr () -> IO ()
-
-foreign import ccall "sqlite3_memory_used" sqlite3_memory_used
-    :: IO Int64
-
-foreign import ccall "sqlite3_memory_highwater" sqlite3_memory_highwater
-    :: CInt -> IO Int64
-
-foreign import ccall "sqlite3_randomness" sqlite3_randomness
-    :: CInt -> Ptr () -> IO ()
-
-foreign import ccall "sqlite3_set_authorizer" sqlite3_set_authorizer
-    :: Ptr Sqlite3 -> FunPtr (Ptr a -> CInt -> CString ->
-       CString -> CString -> CString -> IO CInt) -> Ptr a -> IO CInt
-
-foreign import ccall "sqlite3_progress_handler" sqlite3_progress_handler
-    :: Ptr Sqlite3 -> CInt -> FunPtr (Ptr a -> IO CInt) ->
-       Ptr a -> IO ()
-
-foreign import ccall "sqlite3_open" sqlite3_open
-    :: CString -> Ptr (Ptr Sqlite3) -> IO CInt
-
-foreign import ccall "sqlite3_open16" sqlite3_open16
-    :: Ptr () -> Ptr (Ptr Sqlite3) -> IO CInt
-
-foreign import ccall "sqlite3_open_v2" sqlite3_open_v2
-    :: CString -> Ptr (Ptr Sqlite3) -> CInt -> CString -> IO CInt
-
-foreign import ccall "sqlite3_errcode" sqlite3_errcode
-    :: Ptr Sqlite3 -> IO CInt
-
-foreign import ccall "sqlite3_extended_errcode" sqlite3_extended_errcode
-    :: Ptr Sqlite3 -> IO CInt
-
-foreign import ccall "sqlite3_errmsg" sqlite3_errmsg
-    :: Ptr Sqlite3 -> IO CString
-
-foreign import ccall "sqlite3_errmsg16" sqlite3_errmsg16
-    :: Ptr Sqlite3 -> IO (Ptr ())
-
-foreign import ccall "sqlite3_limit" sqlite3_limit
-    :: Ptr Sqlite3 -> CInt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_prepare" sqlite3_prepare
-    :: Ptr Sqlite3 -> CString -> CInt -> Ptr (Ptr Sqlite3_stmt) ->
-       Ptr CString -> IO CInt
-
-foreign import ccall "sqlite3_prepare_v2" sqlite3_prepare_v2
-    :: Ptr Sqlite3 -> CString -> CInt -> Ptr (Ptr Sqlite3) ->
-       Ptr CString -> IO CInt
-
-foreign import ccall "sqlite3_prepare16" sqlite3_prepare16
-    :: Ptr Sqlite3 -> Ptr () -> CInt -> Ptr (Ptr Sqlite3_stmt) ->
-       Ptr (Ptr ()) -> IO CInt
-
-foreign import ccall "sqlite3_prepare16_v2" sqlite3_prepare16_v2
-    :: Ptr Sqlite3 -> Ptr () -> CInt -> Ptr (Ptr Sqlite3_stmt) ->
-       Ptr (Ptr ()) -> IO CInt
-
-foreign import ccall "sqlite3_sql" sqlite3_sql
-    :: Ptr Sqlite3_stmt -> IO CString
-
-foreign import ccall "sqlite3_bind_blob" sqlite3_bind_blob
-    :: Ptr Sqlite3_stmt -> CInt -> Ptr () ->
-       CInt -> Sqlite3_destructor_type ()-> IO CInt
-
-foreign import ccall "sqlite3_bind_double" sqlite3_bind_double
-    :: Ptr Sqlite3_stmt -> CInt -> CDouble -> IO CInt
-
-foreign import ccall "sqlite3_bind_int" sqlite3_bind_int
-    :: Ptr Sqlite3_stmt -> CInt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_bind_int64" sqlite3_bind_int64
-    :: Ptr Sqlite3_stmt -> CInt -> Int64 -> IO CInt
-
-foreign import ccall "sqlite3_bind_null" sqlite3_bind_null
-    :: Ptr Sqlite3_stmt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_bind_text" sqlite3_bind_text
-    :: Ptr Sqlite3_stmt -> CInt -> CString -> CInt ->
-       Sqlite3_destructor_type CString -> IO CInt
-
-foreign import ccall "sqlite3_bind_text16" sqlite3_bind_text16
-    :: Ptr Sqlite3_stmt -> CInt -> Ptr () -> CInt ->
-       Sqlite3_destructor_type ()-> IO CInt
-
-foreign import ccall "sqlite3_bind_value" sqlite3_bind_value
-    :: Ptr Sqlite3_stmt -> CInt -> Ptr Sqlite3_value -> IO CInt
-
-foreign import ccall "sqlite3_bind_zeroblob" sqlite3_bind_zeroblob
-    :: Ptr Sqlite3_stmt -> CInt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_bind_parameter_count"
- sqlite3_bind_parameter_count
-    :: Ptr Sqlite3_stmt -> IO CInt
-
-foreign import ccall "sqlite3_bind_parameter_name"
- sqlite3_bind_parameter_name
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_bind_parameter_index"
- sqlite3_bind_parameter_index
-    :: Ptr Sqlite3_stmt -> CString -> IO CInt
-
-foreign import ccall "sqlite3_clear_bindings" sqlite3_clear_bindings
-    :: Ptr Sqlite3_stmt -> IO CInt
-
-foreign import ccall "sqlite3_column_count" sqlite3_column_count
-    :: Ptr Sqlite3_stmt -> IO CInt
-
-foreign import ccall "sqlite3_column_name" sqlite3_column_name
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_column_name16" sqlite3_column_name16
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_column_database_name"
- sqlite3_column_database_name
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_column_database_name16"
- sqlite3_column_database_name16
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_column_table_name"
- sqlite3_column_table_name
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_column_table_name16"
- sqlite3_column_table_name16
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_column_origin_name"
- sqlite3_column_origin_name
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_column_origin_name16"
- sqlite3_column_origin_name16
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_column_decltype"
- sqlite3_column_decltype
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_column_decltype16"
- sqlite3_column_decltype16
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_step" sqlite3_step
-    :: Ptr Sqlite3_stmt -> IO CInt
-
-foreign import ccall "sqlite3_data_count" sqlite3_data_count
-    :: Ptr Sqlite3_stmt -> IO CInt
-
-foreign import ccall "sqlite3_column_blob" sqlite3_column_blob
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_column_bytes" sqlite3_column_bytes
-    :: Ptr Sqlite3_stmt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_column_bytes16" sqlite3_column_bytes16
-    :: Ptr Sqlite3_stmt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_column_double" sqlite3_column_double
-    :: Ptr Sqlite3_stmt -> CInt -> IO CDouble
-
-foreign import ccall "sqlite3_column_int" sqlite3_column_int
-    :: Ptr Sqlite3_stmt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_column_int64" sqlite3_column_int64
-    :: Ptr Sqlite3_stmt -> CInt -> IO Int64
-
-foreign import ccall "sqlite3_column_text" sqlite3_column_text
-    :: Ptr Sqlite3_stmt -> CInt -> IO CString
-
-foreign import ccall "sqlite3_column_text16" sqlite3_column_text16
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_column_type" sqlite3_column_type
-    :: Ptr Sqlite3_stmt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_column_value" sqlite3_column_value
-    :: Ptr Sqlite3_stmt -> CInt -> IO (Ptr Sqlite3_value)
-
-foreign import ccall "sqlite3_finalize" sqlite3_finalize
-    :: Ptr Sqlite3_stmt -> IO CInt
-
-foreign import ccall "sqlite3_create_function" sqlite3_create_function
-    :: Ptr Sqlite3 -> CString -> CInt -> CInt -> Ptr () ->
-       FunPtr (Ptr Sqlite3_context -> CInt -> Ptr (Ptr Sqlite3_value) ->
-       IO ()) -> FunPtr (Ptr Sqlite3_context -> CInt -> Ptr
-       (Ptr Sqlite3_value) -> IO ()) -> FunPtr (Ptr Sqlite3_context ->
-       IO ()) -> IO CInt
-
-foreign import ccall "sqlite3_create_function16" sqlite3_create_function16
-    :: Ptr Sqlite3 -> Ptr () -> CInt -> CInt -> Ptr () ->
-       FunPtr (Ptr Sqlite3_context -> CInt -> Ptr (Ptr Sqlite3_value) ->
-       IO ()) -> FunPtr (Ptr Sqlite3_context -> CInt -> Ptr 
-       (Ptr Sqlite3_value) -> IO ()) -> FunPtr (Ptr Sqlite3_context ->
-       IO ()) -> IO CInt
-
-foreign import ccall "sqlite3_value_blob" sqlite3_value_blob
-    :: Ptr Sqlite3_value -> IO (Ptr ())
-
-foreign import ccall "sqlite3_value_bytes" sqlite3_value_bytes
-    :: Ptr Sqlite3_value -> IO CInt
-
-foreign import ccall "sqlite3_value_bytes16" sqlite3_value_bytes16
-    :: Ptr Sqlite3_value -> IO CInt
-
-foreign import ccall "sqlite3_value_double" sqlite3_value_double
-    :: Ptr Sqlite3_value -> IO CDouble
-
-foreign import ccall "sqlite3_value_int" sqlite3_value_int
-    :: Ptr Sqlite3_value -> IO CInt
-
-foreign import ccall "sqlite3_value_int64" sqlite3_value_int64
-    :: Ptr Sqlite3_value -> IO Int64
-
-foreign import ccall "sqlite3_value_text" sqlite3_value_text
-    :: Ptr Sqlite3_value -> IO CString
-
-foreign import ccall "sqlite3_value_text16" sqlite3_value_text16
-    :: Ptr Sqlite3_value -> IO (Ptr ())
-
-foreign import ccall "sqlite3_value_text16le" sqlite3_value_text16le
-    :: Ptr Sqlite3_value -> IO (Ptr ())
-
-foreign import ccall "sqlite3_value_text16be" sqlite3_value_text16be
-    :: Ptr Sqlite3_value -> IO (Ptr ())
-
-foreign import ccall "sqlite3_value_type" sqlite3_value_type
-    :: Ptr Sqlite3_value -> IO CInt
-
-foreign import ccall "sqlite3_value_numeric_type"
- sqlite3_value_numeric_type
-    :: Ptr Sqlite3_value -> IO CInt
-
-foreign import ccall "sqlite3_aggregate_context"
- sqlite3_aggregate_context
-    :: Ptr Sqlite3_context -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_user_data" sqlite3_user_data
-    :: Ptr Sqlite3_context -> IO (Ptr ())
-
-foreign import ccall "sqlite3_context_db_handle"
- sqlite3_context_db_handle
-    :: Ptr Sqlite3_context -> IO (Ptr Sqlite3)
-
-foreign import ccall "sqlite3_get_auxdata" sqlite3_get_auxdata
-    :: Ptr Sqlite3_context -> CInt -> IO (Ptr ())
-
-foreign import ccall "sqlite3_set_auxdata" sqlite3_set_auxdata
-    :: Ptr Sqlite3_context -> CInt -> Ptr () ->
-       Sqlite3_destructor_type ()-> IO ()
-
-foreign import ccall "sqlite3_result_blob" sqlite3_result_blob
-    :: Ptr Sqlite3_context -> Ptr () -> CInt ->
-       Sqlite3_destructor_type ()-> IO ()
-
-foreign import ccall "sqlite3_result_double" sqlite3_result_double
-    :: Ptr Sqlite3_context -> CDouble -> IO ()
-
-foreign import ccall "sqlite3_result_error" sqlite3_result_error
-    :: Ptr Sqlite3_context -> CString -> CInt -> IO ()
-
-foreign import ccall "sqlite3_result_error16" sqlite3_result_error16
-    :: Ptr Sqlite3_context -> Ptr () -> CInt -> IO ()
-
-foreign import ccall "sqlite3_result_error_toobig"
- sqlite3_result_error_toobig
-    :: Ptr Sqlite3_context -> IO ()
-
-foreign import ccall "sqlite3_result_error_nomem"
- sqlite3_result_error_nomem
-    :: Ptr Sqlite3_context -> IO ()
-
-foreign import ccall "sqlite3_result_error_code" sqlite3_result_error_code
-    :: Ptr Sqlite3_context -> CInt -> IO ()
-
-foreign import ccall "sqlite3_result_int" sqlite3_result_int
-    :: Ptr Sqlite3_context -> CInt -> IO ()
-
-foreign import ccall "sqlite3_result_int64" sqlite3_result_int64
-    :: Ptr Sqlite3_context -> Int64 -> IO ()
-
-foreign import ccall "sqlite3_result_null" sqlite3_result_null
-    :: Ptr Sqlite3_context -> IO ()
-
-foreign import ccall "sqlite3_result_text" sqlite3_result_text
-    :: Ptr Sqlite3_context -> CString -> CInt ->
-       Sqlite3_destructor_type CString -> IO ()
-
-foreign import ccall "sqlite3_result_text16" sqlite3_result_text16
-    :: Ptr Sqlite3_context -> Ptr () -> CInt ->
-       Sqlite3_destructor_type ()-> IO ()
-
-foreign import ccall "sqlite3_result_text16le" sqlite3_result_text16le
-    :: Ptr Sqlite3_context -> Ptr () -> CInt ->
-       Sqlite3_destructor_type ()-> IO ()
-
-foreign import ccall "sqlite3_result_text16be" sqlite3_result_text16be
-    :: Ptr Sqlite3_context -> Ptr () -> CInt ->
-       Sqlite3_destructor_type ()-> IO ()
-
-foreign import ccall "sqlite3_result_value" sqlite3_result_value
-    :: Ptr Sqlite3_context -> Ptr Sqlite3_value -> IO ()
-
-foreign import ccall "sqlite3_result_zeroblob" sqlite3_result_zeroblob
-    :: Ptr Sqlite3_context -> CInt -> IO ()
-
-foreign import ccall "sqlite3_create_collation"
- sqlite3_create_collation
-    :: Ptr Sqlite3 -> CString -> CInt -> Ptr a ->
-       FunPtr (Ptr a -> CInt -> Ptr () -> CInt -> Ptr () -> IO CInt) ->
-       IO CInt
-
-foreign import ccall "sqlite3_create_collation_v2"
- sqlite3_create_collation_v2
-    :: Ptr Sqlite3 -> CString -> CInt -> Ptr a ->
-       FunPtr (Ptr a -> CInt -> Ptr () -> CInt -> Ptr () -> IO CInt) ->
-       Sqlite3_destructor_type a -> IO CInt
-
-foreign import ccall "sqlite3_create_collation16"
- sqlite3_create_collation16
-    :: Ptr Sqlite3 -> Ptr () -> CInt -> Ptr a ->
-       FunPtr (Ptr a -> CInt -> Ptr () -> CInt -> Ptr () -> IO CInt) ->
-       IO CInt
-
-foreign import ccall "sqlite3_collation_needed"
- sqlite3_collation_needed
-    :: Ptr Sqlite3 -> Ptr a -> FunPtr (Ptr a -> Ptr Sqlite3 ->
-       CInt -> CString -> IO ()) -> IO CInt
-
-foreign import ccall "sqlite3_collation_needed16"
- sqlite3_collation_needed16
-    :: Ptr Sqlite3 -> Ptr a -> FunPtr (Ptr a -> Ptr Sqlite3 ->
-       CInt -> Ptr () -> IO ()) -> IO CInt
-
-foreign import ccall "sqlite3_sleep" sqlite3_sleep
-    :: CInt -> IO CInt
-
-foreign import ccall "&sqlite_temp_directory" sqlite_temp_directory
-    :: GlobalVariable CString
-
-foreign import ccall "sqlite3_get_autocommit" sqlite3_get_autocommit
-    :: Ptr Sqlite3 -> IO CInt
-
-foreign import ccall "sqlite3_db_handle" sqlite3_db_handle
-    :: Ptr Sqlite3_stmt -> IO (Ptr Sqlite3)
-
-foreign import ccall "sqlite3_next_stmt" sqlite3_next_stmt
-    :: Ptr Sqlite3 -> Ptr Sqlite3_stmt -> IO (Ptr Sqlite3_stmt)
-
-foreign import ccall "sqlite3_commit_hook" sqlite3_commit_hook
-    :: Ptr Sqlite3 -> FunPtr (Ptr a -> IO CInt) -> Ptr a -> IO (Ptr ())
-
-foreign import ccall "sqlite3_rollback_hook" sqlite3_rollback_hook
-    :: Ptr Sqlite3 -> FunPtr (Ptr a -> IO ()) -> Ptr a -> IO (Ptr ())
-
-foreign import ccall "sqlite3_update_hook" sqlite3_update_hook
-    :: Ptr Sqlite3 -> FunPtr (Ptr a -> CInt -> CString -> CString ->
-       Int64 -> IO ()) -> Ptr a -> IO (Ptr ())
-
-foreign import ccall "sqlite3_enable_shared_cache"
- sqlite3_enable_shared_cache
-    :: CInt -> IO CInt
-
-foreign import ccall "sqlite3_release_memory" sqlite3_release_memory
-    :: CInt -> IO CInt
-
-foreign import ccall "sqlite3_soft_heap_limit" sqlite3_soft_heap_limit
-    :: CInt -> IO ()
-
-foreign import ccall "sqlite3_load_extension" sqlite3_load_extension
-    :: Ptr Sqlite3 -> CString -> CString -> Ptr CString -> IO CInt
-
-foreign import ccall "sqlite3_enable_load_extension"
- sqlite3_enable_load_extension
-    :: Ptr Sqlite3 -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_auto_extension" sqlite3_auto_extension
-    :: FunPtr (IO ()) -> IO CInt
-
-foreign import ccall "sqlite3_reset_auto_extension"
- sqlite3_reset_auto_extension
-    :: IO ()
-
-foreign import ccall "sqlite3_blob_open" sqlite3_blob_open
-    :: Ptr Sqlite3 -> CString -> CString -> CString -> Int64 -> CInt ->
-       Ptr (Ptr Sqlite3_blob) -> IO CInt
-
-foreign import ccall "sqlite3_blob_close" sqlite3_blob_close
-    :: Ptr Sqlite3_blob -> IO CInt
-
-foreign import ccall "sqlite3_blob_bytes" sqlite3_blob_bytes
-    :: Ptr Sqlite3_blob -> IO CInt
-
-foreign import ccall "sqlite3_blob_read" sqlite3_blob_read
-    :: Ptr Sqlite3_blob -> Ptr () -> CInt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_blob_write" sqlite3_blob_write
-    :: Ptr Sqlite3_blob -> Ptr () -> CInt -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_vfs_find" sqlite3_vfs_find
-    :: CString -> Ptr Sqlite3_vfs
-
-foreign import ccall "sqlite3_vfs_register" sqlite3_vfs_register
-    :: Ptr Sqlite3_vfs -> CInt -> IO CInt
-
-foreign import ccall "sqlite3_vfs_unregister" sqlite3_vfs_unregister
-    :: Ptr Sqlite3_vfs -> IO CInt
-
-foreign import ccall "sqlite3_mutex_alloc" sqlite3_mutex_alloc
-    :: CInt -> IO (Ptr Sqlite3_mutex)
-
-foreign import ccall "sqlite3_mutex_free" sqlite3_mutex_free
-    :: Ptr Sqlite3_mutex -> IO ()
-
-foreign import ccall "sqlite3_mutex_enter" sqlite3_mutex_enter
-    :: Ptr Sqlite3_mutex -> IO ()
-
-foreign import ccall "sqlite3_mutex_try" sqlite3_mutex_try
-    :: Ptr Sqlite3_mutex -> IO CInt
-
-foreign import ccall "sqlite3_mutex_leave" sqlite3_mutex_leave
-    :: Ptr Sqlite3_mutex -> IO ()
-
-foreign import ccall "sqlite3_mutex_held" sqlite3_mutex_held
-    :: Ptr Sqlite3_mutex -> IO CInt
-
-foreign import ccall "sqlite3_mutex_notheld" sqlite3_mutex_notheld
-    :: Ptr Sqlite3_mutex -> IO CInt
-
-foreign import ccall "sqlite3_db_mutex" sqlite3_db_mutex
-    :: Ptr Sqlite3 -> IO (Ptr Sqlite3_mutex)
-
-foreign import ccall "sqlite3_file_control" sqlite3_file_control
-    :: Ptr Sqlite3 -> CString -> CInt -> Ptr () -> IO CInt
diff --git a/src/Sqlite3Types.hs b/src/Sqlite3Types.hs
deleted file mode 100644
--- a/src/Sqlite3Types.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-module Sqlite3Types where
-import Foreign
-import Foreign.C
-data Sqlite3
-
-data Sqlite3_file = Sqlite3_file
-    {sqlite3_file'pMethods    :: Ptr Sqlite3_io_methods}
-
-instance Storable Sqlite3_file where
-    sizeOf _ = fromIntegral size_of_sqlite3_file
-
-    alignment = sizeOf
-
-    peek p =
-        with nullPtr $ \p1 ->
-        c2hs_sqlite3_file p p1 >>
-        peek p1 >>= \v1 ->
-        return $ Sqlite3_file {sqlite3_file'pMethods = v1}
-
-    poke p v = hs2c_sqlite3_file p (sqlite3_file'pMethods v)
-
-data Sqlite3_io_methods = Sqlite3_io_methods {
-    sqlite3_io_methods'iVersion
-        :: CInt,
-    sqlite3_io_methods'xClose
-        :: FunPtr (Ptr Sqlite3_file -> IO CInt),
-    sqlite3_io_methods'xRead
-        :: FunPtr (Ptr Sqlite3_file -> Ptr () -> CInt -> Int64 -> IO CInt),
-    sqlite3_io_methods'xWrite
-        :: FunPtr (Ptr Sqlite3_file -> Ptr () -> CInt -> Int64 -> IO CInt),
-    sqlite3_io_methods'xTruncate
-        :: FunPtr (Ptr Sqlite3_file -> Int64 -> IO CInt),
-    sqlite3_io_methods'xSync
-        :: FunPtr (Ptr Sqlite3_file -> CInt -> IO CInt),
-    sqlite3_io_methods'xFileSize
-        :: FunPtr (Ptr Sqlite3_file -> Int64 -> IO CInt),
-    sqlite3_io_methods'xLock
-        :: FunPtr (Ptr Sqlite3_file -> CInt -> IO CInt),
-    sqlite3_io_methods'xUnlock
-        :: FunPtr (Ptr Sqlite3_file -> CInt -> IO CInt),
-    sqlite3_io_methods'xCheckReservedLock
-        :: FunPtr (Ptr Sqlite3_file -> CInt -> IO CInt),
-    sqlite3_io_methods'xFileControl
-        :: FunPtr (Ptr Sqlite3_file -> CInt -> Ptr () -> IO CInt),
-    sqlite3_io_methods'xSectorSize
-        :: FunPtr (Ptr Sqlite3_file -> IO CInt),
-    sqlite3_io_methods'xDeviceCharacteristics
-        :: FunPtr (Ptr Sqlite3_file -> IO CInt)}
-
-instance Storable Sqlite3_io_methods where
-    sizeOf _ = fromIntegral size_of_sqlite3_io_methods
-
-    alignment = sizeOf
-
-    peek p =
-        with 0 $ \p1 ->
-        with nullFunPtr $ \p2 ->
-        with nullFunPtr $ \p3 ->
-        with nullFunPtr $ \p4 ->
-        with nullFunPtr $ \p5 ->
-        with nullFunPtr $ \p6 ->
-        with nullFunPtr $ \p7 ->
-        with nullFunPtr $ \p8 ->
-        with nullFunPtr $ \p9 ->
-        with nullFunPtr $ \p10 ->
-        with nullFunPtr $ \p11 ->
-        with nullFunPtr $ \p12 ->
-        with nullFunPtr $ \p13 ->
-
-        c2hs_sqlite3_io_methods p p1 p2 p3 p4 p5 p6 p7 p8 p9
-            p10 p11 p12 p13 >>
-
-        peek p1 >>= \v1 ->
-        peek p2 >>= \v2 ->
-        peek p3 >>= \v3 ->
-        peek p4 >>= \v4 ->
-        peek p5 >>= \v5 ->
-        peek p6 >>= \v6 ->
-        peek p7 >>= \v7 ->
-        peek p8 >>= \v8 ->
-        peek p9 >>= \v9 ->
-        peek p10 >>= \v10 ->
-        peek p11 >>= \v11 ->
-        peek p12 >>= \v12 ->
-        peek p13 >>= \v13 ->
-
-        return $ Sqlite3_io_methods {
-            sqlite3_io_methods'iVersion = v1,
-            sqlite3_io_methods'xClose = v2,
-            sqlite3_io_methods'xRead = v3,
-            sqlite3_io_methods'xWrite = v4,
-            sqlite3_io_methods'xTruncate = v5,
-            sqlite3_io_methods'xSync = v6,
-            sqlite3_io_methods'xFileSize = v7,
-            sqlite3_io_methods'xLock = v8,
-            sqlite3_io_methods'xUnlock = v9,
-            sqlite3_io_methods'xCheckReservedLock = v10,
-            sqlite3_io_methods'xFileControl = v11,
-            sqlite3_io_methods'xSectorSize = v12,
-            sqlite3_io_methods'xDeviceCharacteristics = v13}
-
-    poke p v = hs2c_sqlite3_io_methods p
-        (sqlite3_io_methods'iVersion v)
-        (sqlite3_io_methods'xClose v)
-        (sqlite3_io_methods'xRead v)
-        (sqlite3_io_methods'xWrite v)
-        (sqlite3_io_methods'xTruncate v)
-        (sqlite3_io_methods'xSync v)
-        (sqlite3_io_methods'xFileSize v)
-        (sqlite3_io_methods'xLock v)
-        (sqlite3_io_methods'xUnlock v)
-        (sqlite3_io_methods'xCheckReservedLock v)
-        (sqlite3_io_methods'xFileControl v)
-        (sqlite3_io_methods'xSectorSize v)
-        (sqlite3_io_methods'xDeviceCharacteristics v)
-
-data Sqlite3_mutex
-
-data Sqlite3_vfs
-
-data Sqlite3_stmt
-
-data Sqlite3_value
-
-data Sqlite3_context
-
-newtype Sqlite3_destructor_type a =
-    Sqlite3_destructor_type (FunPtr (Ptr a -> IO ()))
-
-data Sqlite3_blob
-
-foreign import ccall "size_of_sqlite3_file" size_of_sqlite3_file
-    :: CInt
-
-foreign import ccall "size_of_sqlite3_io_methods"
- size_of_sqlite3_io_methods
-    :: CInt
-
-foreign import ccall "hs2c_sqlite3_file" hs2c_sqlite3_file
-    :: Ptr a -> Ptr b -> IO ()
-
-foreign import ccall "c2hs_sqlite3_file" c2hs_sqlite3_file
-    :: Ptr a -> Ptr b -> IO ()
-
-foreign import ccall "hs2c_sqlite3_io_methods"
- hs2c_sqlite3_io_methods
-    :: Ptr a -> CInt -> FunPtr b1 -> FunPtr b2 -> FunPtr b3 ->
-       FunPtr b4 -> FunPtr b5 -> FunPtr b6 -> FunPtr b7 ->
-       FunPtr b8 -> FunPtr b9 -> FunPtr b10 -> FunPtr b11 ->
-       FunPtr b12 -> IO ()
-
-foreign import ccall "c2hs_sqlite3_io_methods"
- c2hs_sqlite3_io_methods
-    :: Ptr a -> Ptr CInt -> Ptr b1 -> Ptr b2 -> Ptr b3 ->
-       Ptr b4 -> Ptr b5 -> Ptr b6 -> Ptr b7 ->
-       Ptr b8 -> Ptr b9 -> Ptr b10 -> Ptr b11 ->
-       Ptr b12 -> IO ()
diff --git a/src/constants.c b/src/constants.c
deleted file mode 100644
--- a/src/constants.c
+++ /dev/null
@@ -1,767 +0,0 @@
-#include <sqlite3.h>
-
-char *_sqlite_version(void)
-{
-    return sqlite_version;
-}
-
-int _SQLITE_OK (void)
-{
-    return SQLITE_OK;
-}
-
-int _SQLITE_ERROR (void)
-{
-    return SQLITE_ERROR;
-}
-
-int _SQLITE_INTERNAL (void)
-{
-    return SQLITE_INTERNAL;
-}
-
-int _SQLITE_PERM (void)
-{
-    return SQLITE_PERM;
-}
-
-int _SQLITE_ABORT (void)
-{
-    return SQLITE_ABORT;
-}
-
-int _SQLITE_BUSY (void)
-{
-    return SQLITE_BUSY;
-}
-
-int _SQLITE_LOCKED (void)
-{
-    return SQLITE_LOCKED;
-}
-
-int _SQLITE_NOMEM (void)
-{
-    return SQLITE_NOMEM;
-}
-
-int _SQLITE_READONLY (void)
-{
-    return SQLITE_READONLY;
-}
-
-int _SQLITE_INTERRUPT (void)
-{
-    return SQLITE_INTERRUPT;
-}
-
-int _SQLITE_IOERR (void)
-{
-    return SQLITE_IOERR;
-}
-
-int _SQLITE_CORRUPT (void)
-{
-    return SQLITE_CORRUPT;
-}
-
-int _SQLITE_NOTFOUND (void)
-{
-    return SQLITE_NOTFOUND;
-}
-
-int _SQLITE_FULL (void)
-{
-    return SQLITE_FULL;
-}
-
-int _SQLITE_CANTOPEN (void)
-{
-    return SQLITE_CANTOPEN;
-}
-
-int _SQLITE_PROTOCOL (void)
-{
-    return SQLITE_PROTOCOL;
-}
-
-int _SQLITE_EMPTY (void)
-{
-    return SQLITE_EMPTY;
-}
-
-int _SQLITE_SCHEMA (void)
-{
-    return SQLITE_SCHEMA;
-}
-
-int _SQLITE_TOOBIG (void)
-{
-    return SQLITE_TOOBIG;
-}
-
-int _SQLITE_CONSTRAINT (void)
-{
-    return SQLITE_CONSTRAINT;
-}
-
-int _SQLITE_MISMATCH (void)
-{
-    return SQLITE_MISMATCH;
-}
-
-int _SQLITE_MISUSE (void)
-{
-    return SQLITE_MISUSE;
-}
-
-int _SQLITE_NOLFS (void)
-{
-    return SQLITE_NOLFS;
-}
-
-int _SQLITE_AUTH (void)
-{
-    return SQLITE_AUTH;
-}
-
-int _SQLITE_FORMAT (void)
-{
-    return SQLITE_FORMAT;
-}
-
-int _SQLITE_RANGE (void)
-{
-    return SQLITE_RANGE;
-}
-
-int _SQLITE_NOTADB (void)
-{
-    return SQLITE_NOTADB;
-}
-
-int _SQLITE_ROW (void)
-{
-    return SQLITE_ROW;
-}
-
-int _SQLITE_DONE (void)
-{
-    return SQLITE_DONE;
-}
-
-int _SQLITE_IOERR_READ (void)
-{
-    return SQLITE_IOERR_READ;
-}
-
-int _SQLITE_IOERR_SHORT_READ (void)
-{
-    return SQLITE_IOERR_SHORT_READ;
-}
-
-int _SQLITE_IOERR_WRITE (void)
-{
-    return SQLITE_IOERR_WRITE;
-}
-
-int _SQLITE_IOERR_FSYNC (void)
-{
-    return SQLITE_IOERR_FSYNC;
-}
-
-int _SQLITE_IOERR_DIR_FSYNC (void)
-{
-    return SQLITE_IOERR_DIR_FSYNC;
-}
-
-int _SQLITE_IOERR_TRUNCATE (void)
-{
-    return SQLITE_IOERR_TRUNCATE;
-}
-
-int _SQLITE_IOERR_FSTAT (void)
-{
-    return SQLITE_IOERR_FSTAT;
-}
-
-int _SQLITE_IOERR_UNLOCK (void)
-{
-    return SQLITE_IOERR_UNLOCK;
-}
-
-int _SQLITE_IOERR_RDLOCK (void)
-{
-    return SQLITE_IOERR_RDLOCK;
-}
-
-int _SQLITE_IOERR_DELETE (void)
-{
-    return SQLITE_IOERR_DELETE;
-}
-
-int _SQLITE_IOERR_BLOCKED (void)
-{
-    return SQLITE_IOERR_BLOCKED;
-}
-
-int _SQLITE_IOERR_NOMEM (void)
-{
-    return SQLITE_IOERR_NOMEM;
-}
-
-int _SQLITE_IOERR_ACCESS (void)
-{
-    return SQLITE_IOERR_ACCESS;
-}
-
-int _SQLITE_IOERR_CHECKRESERVEDLOCK (void)
-{
-    return SQLITE_IOERR_CHECKRESERVEDLOCK;
-}
-
-int _SQLITE_IOERR_LOCK (void)
-{
-    return SQLITE_IOERR_LOCK;
-}
-
-int _SQLITE_IOERR_CLOSE (void)
-{
-    return SQLITE_IOERR_CLOSE;
-}
-
-int _SQLITE_IOERR_DIR_CLOSE (void)
-{
-    return SQLITE_IOERR_DIR_CLOSE;
-}
-
-int _SQLITE_OPEN_READONLY (void)
-{
-    return SQLITE_OPEN_READONLY;
-}
-
-int _SQLITE_OPEN_READWRITE (void)
-{
-    return SQLITE_OPEN_READWRITE;
-}
-
-int _SQLITE_OPEN_CREATE (void)
-{
-    return SQLITE_OPEN_CREATE;
-}
-
-int _SQLITE_OPEN_DELETEONCLOSE (void)
-{
-    return SQLITE_OPEN_DELETEONCLOSE;
-}
-
-int _SQLITE_OPEN_EXCLUSIVE (void)
-{
-    return SQLITE_OPEN_EXCLUSIVE;
-}
-
-int _SQLITE_OPEN_MAIN_DB (void)
-{
-    return SQLITE_OPEN_MAIN_DB;
-}
-
-int _SQLITE_OPEN_TEMP_DB (void)
-{
-    return SQLITE_OPEN_TEMP_DB;
-}
-
-int _SQLITE_OPEN_TRANSIENT_DB (void)
-{
-    return SQLITE_OPEN_TRANSIENT_DB;
-}
-
-int _SQLITE_OPEN_MAIN_JOURNAL (void)
-{
-    return SQLITE_OPEN_MAIN_JOURNAL;
-}
-
-int _SQLITE_OPEN_TEMP_JOURNAL (void)
-{
-    return SQLITE_OPEN_TEMP_JOURNAL;
-}
-
-int _SQLITE_OPEN_SUBJOURNAL (void)
-{
-    return SQLITE_OPEN_SUBJOURNAL;
-}
-
-int _SQLITE_OPEN_MASTER_JOURNAL (void)
-{
-    return SQLITE_OPEN_MASTER_JOURNAL;
-}
-
-int _SQLITE_OPEN_NOMUTEX (void)
-{
-    return SQLITE_OPEN_NOMUTEX;
-}
-
-int _SQLITE_OPEN_FULLMUTEX (void)
-{
-    return SQLITE_OPEN_FULLMUTEX;
-}
-
-int _SQLITE_IOCAP_ATOMIC (void)
-{
-    return SQLITE_IOCAP_ATOMIC;
-}
-
-int _SQLITE_IOCAP_ATOMIC512 (void)
-{
-    return SQLITE_IOCAP_ATOMIC512;
-}
-
-int _SQLITE_IOCAP_ATOMIC1K (void)
-{
-    return SQLITE_IOCAP_ATOMIC1K;
-}
-
-int _SQLITE_IOCAP_ATOMIC2K (void)
-{
-    return SQLITE_IOCAP_ATOMIC2K;
-}
-
-int _SQLITE_IOCAP_ATOMIC4K (void)
-{
-    return SQLITE_IOCAP_ATOMIC4K;
-}
-
-int _SQLITE_IOCAP_ATOMIC8K (void)
-{
-    return SQLITE_IOCAP_ATOMIC8K;
-}
-
-int _SQLITE_IOCAP_ATOMIC16K (void)
-{
-    return SQLITE_IOCAP_ATOMIC16K;
-}
-
-int _SQLITE_IOCAP_ATOMIC32K (void)
-{
-    return SQLITE_IOCAP_ATOMIC32K;
-}
-
-int _SQLITE_IOCAP_ATOMIC64K (void)
-{
-    return SQLITE_IOCAP_ATOMIC64K;
-}
-
-int _SQLITE_IOCAP_SAFE_APPEND (void)
-{
-    return SQLITE_IOCAP_SAFE_APPEND;
-}
-
-int _SQLITE_IOCAP_SEQUENTIAL (void)
-{
-    return SQLITE_IOCAP_SEQUENTIAL;
-}
-
-int _SQLITE_LOCK_NONE (void)
-{
-    return SQLITE_LOCK_NONE;
-}
-
-int _SQLITE_LOCK_SHARED (void)
-{
-    return SQLITE_LOCK_SHARED;
-}
-
-int _SQLITE_LOCK_RESERVED (void)
-{
-    return SQLITE_LOCK_RESERVED;
-}
-
-int _SQLITE_LOCK_PENDING (void)
-{
-    return SQLITE_LOCK_PENDING;
-}
-
-int _SQLITE_LOCK_EXCLUSIVE (void)
-{
-    return SQLITE_LOCK_EXCLUSIVE;
-}
-
-int _SQLITE_SYNC_NORMAL (void)
-{
-    return SQLITE_SYNC_NORMAL;
-}
-
-int _SQLITE_SYNC_FULL (void)
-{
-    return SQLITE_SYNC_FULL;
-}
-
-int _SQLITE_SYNC_DATAONLY (void)
-{
-    return SQLITE_SYNC_DATAONLY;
-}
-
-int _SQLITE_FCNTL_LOCKSTATE (void)
-{
-    return SQLITE_FCNTL_LOCKSTATE;
-}
-
-int _SQLITE_GET_LOCKPROXYFILE (void)
-{
-    return SQLITE_GET_LOCKPROXYFILE;
-}
-
-int _SQLITE_SET_LOCKPROXYFILE (void)
-{
-    return SQLITE_SET_LOCKPROXYFILE;
-}
-
-int _SQLITE_LAST_ERRNO (void)
-{
-    return SQLITE_LAST_ERRNO;
-}
-
-int _SQLITE_ACCESS_EXISTS (void)
-{
-    return SQLITE_ACCESS_EXISTS;
-}
-
-int _SQLITE_ACCESS_READWRITE (void)
-{
-    return SQLITE_ACCESS_READWRITE;
-}
-
-int _SQLITE_ACCESS_READ (void)
-{
-    return SQLITE_ACCESS_READ;
-}
-
-int _SQLITE_DENY (void)
-{
-    return SQLITE_DENY;
-}
-
-int _SQLITE_IGNORE (void)
-{
-    return SQLITE_IGNORE;
-}
-
-int _SQLITE_CREATE_INDEX (void)
-{
-    return SQLITE_CREATE_INDEX;
-}
-
-int _SQLITE_CREATE_TABLE (void)
-{
-    return SQLITE_CREATE_TABLE;
-}
-
-int _SQLITE_CREATE_TEMP_INDEX (void)
-{
-    return SQLITE_CREATE_TEMP_INDEX;
-}
-
-int _SQLITE_CREATE_TEMP_TABLE (void)
-{
-    return SQLITE_CREATE_TEMP_TABLE;
-}
-
-int _SQLITE_CREATE_TEMP_TRIGGER (void)
-{
-    return SQLITE_CREATE_TEMP_TRIGGER;
-}
-
-int _SQLITE_CREATE_TEMP_VIEW (void)
-{
-    return SQLITE_CREATE_TEMP_VIEW;
-}
-
-int _SQLITE_CREATE_TRIGGER (void)
-{
-    return SQLITE_CREATE_TRIGGER;
-}
-
-int _SQLITE_CREATE_VIEW (void)
-{
-    return SQLITE_CREATE_VIEW;
-}
-
-int _SQLITE_DELETE (void)
-{
-    return SQLITE_DELETE;
-}
-
-int _SQLITE_DROP_INDEX (void)
-{
-    return SQLITE_DROP_INDEX;
-}
-
-int _SQLITE_DROP_TABLE (void)
-{
-    return SQLITE_DROP_TABLE;
-}
-
-int _SQLITE_DROP_TEMP_INDEX (void)
-{
-    return SQLITE_DROP_TEMP_INDEX;
-}
-
-int _SQLITE_DROP_TEMP_TABLE (void)
-{
-    return SQLITE_DROP_TEMP_TABLE;
-}
-
-int _SQLITE_DROP_TEMP_TRIGGER (void)
-{
-    return SQLITE_DROP_TEMP_TRIGGER;
-}
-
-int _SQLITE_DROP_TEMP_VIEW (void)
-{
-    return SQLITE_DROP_TEMP_VIEW;
-}
-
-int _SQLITE_DROP_TRIGGER (void)
-{
-    return SQLITE_DROP_TRIGGER;
-}
-
-int _SQLITE_DROP_VIEW (void)
-{
-    return SQLITE_DROP_VIEW;
-}
-
-int _SQLITE_INSERT (void)
-{
-    return SQLITE_INSERT;
-}
-
-int _SQLITE_PRAGMA (void)
-{
-    return SQLITE_PRAGMA;
-}
-
-int _SQLITE_READ (void)
-{
-    return SQLITE_READ;
-}
-
-int _SQLITE_SELECT (void)
-{
-    return SQLITE_SELECT;
-}
-
-int _SQLITE_TRANSACTION (void)
-{
-    return SQLITE_TRANSACTION;
-}
-
-int _SQLITE_UPDATE (void)
-{
-    return SQLITE_UPDATE;
-}
-
-int _SQLITE_ATTACH (void)
-{
-    return SQLITE_ATTACH;
-}
-
-int _SQLITE_DETACH (void)
-{
-    return SQLITE_DETACH;
-}
-
-int _SQLITE_ALTER_TABLE (void)
-{
-    return SQLITE_ALTER_TABLE;
-}
-
-int _SQLITE_REINDEX (void)
-{
-    return SQLITE_REINDEX;
-}
-
-int _SQLITE_ANALYZE (void)
-{
-    return SQLITE_ANALYZE;
-}
-
-int _SQLITE_CREATE_VTABLE (void)
-{
-    return SQLITE_CREATE_VTABLE;
-}
-
-int _SQLITE_DROP_VTABLE (void)
-{
-    return SQLITE_DROP_VTABLE;
-}
-
-int _SQLITE_FUNCTION (void)
-{
-    return SQLITE_FUNCTION;
-}
-
-int _SQLITE_SAVEPOINT (void)
-{
-    return SQLITE_SAVEPOINT;
-}
-
-int _SQLITE_COPY (void)
-{
-    return SQLITE_COPY;
-}
-
-int _SQLITE_LIMIT_LENGTH (void)
-{
-    return SQLITE_LIMIT_LENGTH;
-}
-
-int _SQLITE_LIMIT_SQL_LENGTH (void)
-{
-    return SQLITE_LIMIT_SQL_LENGTH;
-}
-
-int _SQLITE_LIMIT_COLUMN (void)
-{
-    return SQLITE_LIMIT_COLUMN;
-}
-
-int _SQLITE_LIMIT_EXPR_DEPTH (void)
-{
-    return SQLITE_LIMIT_EXPR_DEPTH;
-}
-
-int _SQLITE_LIMIT_COMPOUND_SELECT (void)
-{
-    return SQLITE_LIMIT_COMPOUND_SELECT;
-}
-
-int _SQLITE_LIMIT_VDBE_OP (void)
-{
-    return SQLITE_LIMIT_VDBE_OP;
-}
-
-int _SQLITE_LIMIT_FUNCTION_ARG (void)
-{
-    return SQLITE_LIMIT_FUNCTION_ARG;
-}
-
-int _SQLITE_LIMIT_ATTACHED (void)
-{
-    return SQLITE_LIMIT_ATTACHED;
-}
-
-int _SQLITE_LIMIT_LIKE_PATTERN_LENGTH (void)
-{
-    return SQLITE_LIMIT_LIKE_PATTERN_LENGTH;
-}
-
-int _SQLITE_LIMIT_VARIABLE_NUMBER (void)
-{
-    return SQLITE_LIMIT_VARIABLE_NUMBER;
-}
-
-int _SQLITE_INTEGER (void)
-{
-    return SQLITE_INTEGER;
-}
-
-int _SQLITE_FLOAT (void)
-{
-    return SQLITE_FLOAT;
-}
-
-int _SQLITE_BLOB (void)
-{
-    return SQLITE_BLOB;
-}
-
-int _SQLITE_NULL (void)
-{
-    return SQLITE_NULL;
-}
-
-int _SQLITE3_TEXT (void)
-{
-    return SQLITE3_TEXT;
-}
-
-int _SQLITE_UTF8 (void)
-{
-    return SQLITE_UTF8;
-}
-
-int _SQLITE_UTF16LE (void)
-{
-    return SQLITE_UTF16LE;
-}
-
-int _SQLITE_UTF16BE (void)
-{
-    return SQLITE_UTF16BE;
-}
-
-int _SQLITE_UTF16 (void)
-{
-    return SQLITE_UTF16;
-}
-
-int _SQLITE_ANY (void)
-{
-    return SQLITE_ANY;
-}
-
-int _SQLITE_UTF16_ALIGNED (void)
-{
-    return SQLITE_UTF16_ALIGNED;
-}
-
-sqlite3_destructor_type _SQLITE_STATIC (void)
-{
-    return SQLITE_STATIC;
-}
-
-sqlite3_destructor_type _SQLITE_TRANSIENT (void)
-{
-    return SQLITE_TRANSIENT;
-}
-
-int _SQLITE_MUTEX_FAST (void)
-{
-    return SQLITE_MUTEX_FAST;
-}
-
-int _SQLITE_MUTEX_RECURSIVE (void)
-{
-    return SQLITE_MUTEX_RECURSIVE;
-}
-
-int _SQLITE_MUTEX_STATIC_MASTER (void)
-{
-    return SQLITE_MUTEX_STATIC_MASTER;
-}
-
-int _SQLITE_MUTEX_STATIC_MEM (void)
-{
-    return SQLITE_MUTEX_STATIC_MEM;
-}
-
-int _SQLITE_MUTEX_STATIC_MEM2 (void)
-{
-    return SQLITE_MUTEX_STATIC_MEM2;
-}
-
-int _SQLITE_MUTEX_STATIC_PRNG (void)
-{
-    return SQLITE_MUTEX_STATIC_PRNG;
-}
-
-int _SQLITE_MUTEX_STATIC_LRU (void)
-{
-    return SQLITE_MUTEX_STATIC_LRU;
-}
-
-int _SQLITE_MUTEX_STATIC_LRU2 (void)
-{
-    return SQLITE_MUTEX_STATIC_LRU2;
-}
-
diff --git a/src/inlines.c b/src/inlines.c
new file mode 100644
--- /dev/null
+++ b/src/inlines.c
@@ -0,0 +1,7 @@
+#include <sqlite3.h>
+
+const char *array_sqlite3_version(void)
+{
+  return sqlite3_version;
+}
+
diff --git a/src/types.c b/src/types.c
deleted file mode 100644
--- a/src/types.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <sqlite3.h>
-
-int size_of_sqlite3_file (void)
-{
-    return sizeof sqlite3_file;
-}
-
-int size_of_sqlite3_io_methods (void)
-{
-    return sizeof sqlite3_io_methods;
-}
-
-void hs2c_sqlite3_file (sqlite3_file *p,
-    const struct sqlite3_io_methods *p1)
-{
-    p->pMethods = p1;
-}
-
-void hs2c_sqlite_io_methods (sqlite_io_methods *p,
-    int p1,
-    int (*p2)(sqlite3_file*),
-    int (*p3)(sqlite3_file*,void*,int,sqlite3_int64),
-    int (*p4)(sqlite3_file*,const void*,int,sqlite3_int64),
-    int (*p5)(sqlite3_file*,sqlite3_int64),
-    int (*p6)(sqlite3_file*,int),
-    int (*p7)(sqlite3_file*,sqlite3_int64*),
-    int (*p8)(sqlite3_file*,int),
-    int (*p9)(sqlite3_file*,int),
-    int (*p10)(sqlite3_file*,int*),
-    int (*p11)(sqlite3_file*,int,void*),
-    int (*p12)(sqlite3_file*),
-    int (*p13)(sqlite3_file*))
-{
-    p->iVersion = p1;
-    p->xClose = p2;
-    p->xRead = p3;
-    p->xWrite = p4;
-    p->xTruncate = p5;
-    p->xSync = p6;
-    p->xFileSize = p7;
-    p->xLock = p8;
-    p->xUnlock = p9;
-    p->xCheckReservedLock = p10;
-    p->xFileControl = p11;
-    p->xSectorSize = p12;
-    p->xDeviceCharacteristics = p13;
-}
-
-void c2hs_sqlite3_file (sqlite3_file *p,
-    const struct sqlite3_io_methods **p1)
-{
-    p->pMethods = p1;
-}
-
-void c2hs_sqlite_io_methods (sqlite_io_methods *p,
-    int *p1,
-    int (**p2)(sqlite3_file*),
-    int (**p3)(sqlite3_file*,void*,int,sqlite3_int64),
-    int (**p4)(sqlite3_file*,const void*,int,sqlite3_int64),
-    int (**p5)(sqlite3_file*,sqlite3_int64),
-    int (**p6)(sqlite3_file*,int),
-    int (**p7)(sqlite3_file*,sqlite3_int64*),
-    int (**p8)(sqlite3_file*,int),
-    int (**p9)(sqlite3_file*,int),
-    int (**p10)(sqlite3_file*,int*),
-    int (**p11)(sqlite3_file*,int,void*),
-    int (**p12)(sqlite3_file*),
-    int (**p13)(sqlite3_file*))
-{
-    *p1 = p->iVersion;
-    *p2 = p->xClose;
-    *p3 = p->xRead;
-    *p4 = p->xWrite;
-    *p5 = p->xTruncate;
-    *p6 = p->xSync;
-    *p7 = p->xFileSize;
-    *p8 = p->xLock;
-    *p9 = p->xUnlock;
-    *p10 = p->xCheckReservedLock;
-    *p11 = p->xFileControl;
-    *p12 = p->xSectorSize;
-    *p13 = p->xDeviceCharacteristics;
-}
-
