diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,109 +1,2 @@
-module Main where
-
 import Distribution.Simple
-import Distribution.Simple.Utils
-import Distribution.Simple.PreProcess
-import Distribution.Simple.LocalBuildInfo (LocalBuildInfo, buildDir)
-import Distribution.PackageDescription    (BuildInfo)
-import Distribution.Verbosity             (Verbosity)
-import System.FilePath                    ((</>), replaceExtension)
-import Text.ParserCombinators.ReadP
-import Text.Read.Lex (readDecP)
-import Data.IORef    (IORef, newIORef, readIORef, writeIORef)
-import Data.List     (find, isPrefixOf)
-
-
--------------------------------------------------------------------------------
-main = newIORef Nothing >>= \cvr -> defaultMainWithHooks simpleUserHooks
-  { hookedPreProcessors = ("hs", ppHsX cvr) : ("hsc", ppHscX cvr)
-                        : knownSuffixHandlers }
-
-
--------------------------------------------------------------------------------
-ppHsX :: IORef (Maybe Int) -> BuildInfo -> LocalBuildInfo -> PreProcessor
-ppHsX cvr bi lbi = PreProcessor
-  { platformIndependent = False
-  , runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> do
-      cv <- findCURLVER cvr bi lbi verbosity
-      withUTF8FileContents inFile (writeUTF8File outFile . processFile cv)
-  }
-
--------------------------------------------------------------------------------
-ppHscX :: IORef (Maybe Int) -> BuildInfo -> LocalBuildInfo -> PreProcessor
-ppHscX cvr bi lbi = PreProcessor
-  { platformIndependent = False
-  , runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> do
-      cv <- findCURLVER cvr bi lbi verbosity
-      let hscFile = replaceExtension outFile "hsc"
-      withUTF8FileContents inFile (writeUTF8File hscFile . processFile cv)
-      runSimplePreProcessor (ppHsc2hs bi lbi) hscFile outFile verbosity
-  }
-
--------------------------------------------------------------------------------
-findCURLVER :: IORef (Maybe Int)
-            -> BuildInfo -> LocalBuildInfo -> Verbosity -> IO Int
-findCURLVER cvr bi lbi verbosity = readIORef cvr >>= \mcv -> case mcv of
-  Just cv -> return cv
-  Nothing -> do
-    info verbosity "Looking for LIBCURL_VERSION_NUM in \"curl/curl.h\""
-    let cvFile = buildDir lbi </> "CURLVER"
-    writeUTF8File cvFile curlverFileContent
-    runSimplePreProcessor (ppHsc2hs bi lbi) cvFile cvFile verbosity
-    mcv <- fmap parseCV $ readUTF8File cvFile
-    case mcv of
-      Nothing -> die "Can't find libcurl version info"
-      Just cv -> writeIORef cvr mcv >> return cv
-
-curlverFileContent :: String
-curlverFileContent = unlines
-  [ "#include \"curl/curl.h\""
-  , "CURLVER = #{const LIBCURL_VERSION_NUM}" ]
-
-parseCV :: String -> Maybe Int
-parseCV cvf = do
-  cvl <- find (isPrefixOf "CURLVER") $ lines cvf
-  case (readP_to_S readDecP $ last $ words cvl) of
-    [(cv,[])] -> Just cv
-    _         -> Nothing
-
--------------------------------------------------------------------------------
-processFile :: Int -> String -> String
-processFile cv file = unlines $ map (processLine cv) $ lines file
-
-processLine :: Int -> String -> String
-processLine cv line =
-  case (readP_to_S parseLine $ reverse line) of
-    [((vmin, vmax, text),[])]
-      -> if (vmin <= cv && cv <= vmax) then text else concat ["-- ", line]
-    _ -> line
-
-parseLine :: ReadP (Int, Int, String)
-parseLine =
-  char '|' >> parseVTAG >>= \vmax ->
-  char ':' >> parseVTAG >>= \vmin ->
-  char '|' >> parseTEXT >>= \text ->
-  return (maybe 0x000000 id vmin, maybe 0xFFFFFF id vmax, text)
-
-parseTEXT :: ReadP String
-parseTEXT = skipSpaces >> manyTill get eof >>= return . reverse
-
-parseVTAG :: ReadP (Maybe Int)
-parseVTAG = count 4 get >>= \vtag -> if (vtag == "----") then return Nothing
-  else maybe pfail (return . Just) $ lookup (reverse vtag)
-    [ ("7200", 0x071400)
-    , ("7201", 0x071401)
-    , ("7210", 0x071500)
-    , ("7211", 0x071501)
-    , ("7212", 0x071502)
-    , ("7213", 0x071503)
-    , ("7214", 0x071504)
-    , ("7215", 0x071505)
-    , ("7216", 0x071506)
-    , ("7217", 0x071507)
-    , ("7220", 0x071600)
-    , ("7230", 0x071700)
-    , ("7231", 0x071701)
-    , ("7240", 0x071800)
-    , ("7250", 0x071900)
-    ]
-
+main = defaultMain
diff --git a/VKHS.cabal b/VKHS.cabal
--- a/VKHS.cabal
+++ b/VKHS.cabal
@@ -1,6 +1,6 @@
 
 name:                VKHS
-version:             0.5.1
+version:             0.5.2
 synopsis:            Provides access to Vkontakte social network via public API
 description:
     Provides access to Vkontakte API methods. Library requires no interaction
@@ -12,13 +12,13 @@
 maintainer:          ierton@gmail.com
 copyright:           Copyright (c) 2012, Sergey Mironov
 category:            Web
-build-type:          Custom
+build-type:          Simple
 cabal-version:       >=1.6
-homepage:            http://github.com/ierton/vkhs
+homepage:            http://github.com/grwlf/vkhs
 
 source-repository head
     type:     git
-    location: https://github.com/ierton/vkhs.git
+    location: https://github.com/grwlf/vkhs.git
 
 executable vknews
   extra-libraries: curl
@@ -26,33 +26,12 @@
   main-is:           VKNews.hs
   build-tools:     hsc2hs
   ghc-options:     -Wall -fwarn-tabs
-  other-modules:
-    Network.Curlhs.Base,
-    Network.Curlhs.Core,
-    Network.Curlhs.Easy,
-    Network.Curlhs.Setopt,
-    Network.Curlhs.Errors,
-    Network.Curlhs.Types
 
 executable vkq
-  extra-libraries: curl
   hs-source-dirs:    src
   main-is:           VKQ.hs
-  build-tools:     hsc2hs
-  ghc-options:     -Wall -fwarn-tabs
-  other-modules:
-    Network.Curlhs.Base,
-    Network.Curlhs.Core,
-    Network.Curlhs.Easy,
-    Network.Curlhs.Setopt,
-    Network.Curlhs.Errors,
-    Network.Curlhs.Types
 
-
 library
-  extra-libraries: curl
-  build-tools:     hsc2hs
-  ghc-options:     -Wall -fwarn-tabs
   hs-source-dirs:    src
   other-modules:     Test.Debug, Test.Data, Test.API, Network.Shpider.Forms,
     Network.Protocol.Uri, Network.Protocol.Mime, Network.Protocol.Http,
@@ -64,12 +43,6 @@
     Network.Protocol.Http.Printer, Network.Protocol.Http.Parser,
     Network.Protocol.Http.Headers, Network.Protocol.Http.Data, Text.Namefilter,
     Text.PFormat,
-    Network.Curlhs.Base,
-    Network.Curlhs.Core,
-    Network.Curlhs.Easy,
-    Network.Curlhs.Setopt,
-    Network.Curlhs.Errors,
-    Network.Curlhs.Types,
     Data.Label.Abstract,
     Data.Label.Derive,
     Data.Label.Maybe,
@@ -100,6 +73,7 @@
                      tagsoup-parsec ==0.0.*,
                      tagsoup ==0.12.*,
                      failure ==0.2.*,
+                     curlhs,
                      safe ==0.3.*,
                      parsec ==3.1.*,
                      split ==0.2.*,
diff --git a/src/Network/Curlhs/Base.hsc b/src/Network/Curlhs/Base.hsc
deleted file mode 100644
--- a/src/Network/Curlhs/Base.hsc
+++ /dev/null
@@ -1,1814 +0,0 @@
--------------------------------------------------------------------------------
--- |
--- Module      :  Network.Curlhs.Base
--- Copyright   :  Copyright © 2012 Krzysztof Kardzis
--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)
--- 
--- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
---
--- Module "Network.Curlhs.Base" provides a direct low-level bindings to
--- @libcurl@. It is basically a 1:1 mapping of the @libcurl@'s C API,
--- a direct translation of \"curl/curl.h\" header files to Haskell FFI.
--- A higher level interface, without ubiquitous pointers and all of that
--- C stuff, is provided through the module "Network.Curlhs.Core".
---
--- Documentation about the library and/or particular functions may be found
--- in the @libcurl@'s manual pages or on the @libcurl@'s project site
--- (<http://curl.haxx.se/libcurl/>). Because API of this module mirrors API
--- of the external library, particular symbols may exist or not,
--- dependently of that, which version of @libcurl@ is used during compilation
--- of the package. The module as closely as possible tries to follow
--- the original @libcurl@ API. The main differences are in types of functions
--- such as @curl_easy_setopt@ and @curl_easy_getinfo@. Besides that all
--- symbol names are prefixed with \'c\' or \'C\'. 
---
--- As the name of the module may suggest, this module is a basis for the
--- rest of @curlhs@ package. For now exposed API is somewhat incomplete,
--- still lacks some things (like the \"multi interface\"), but the aim is
--- to provide here a complete API of @libcurl@, as defined in its C headers.
---
--------------------------------------------------------------------------------
-
-{-# LANGUAGE ForeignFunctionInterface #-}
-{-# LANGUAGE EmptyDataDecls           #-}
-
-module Network.Curlhs.Base where
-
-import Foreign.C.Types
-import Foreign.Storable (Storable (..))
-import Foreign.Ptr      (Ptr, FunPtr, castPtr)
-
-import Control.Applicative ((<$>), (<*>))
-
-
--------------------------------------------------------------------------------
-#{let alignof type = "(%ld)", (long) offsetof (struct {char x; type y;}, y)}
-
-#define CURL_NO_OLDIES
-#include "curl/curl.h"
-
-#define hsc_symbol(name, type) \
-  printf("c" #name " :: C" #type "\n"); \
-  printf("c" #name " =  C" #type " "); hsc_const(name);
-
-#define hsc_cconst(name, type) \
-  printf("c" #name " :: " #type "\n"); \
-  printf("c" #name " =  "); hsc_const(name);
-
-
--------------------------------------------------------------------------------
--- * Definitions from \"curl/curlver.h\"
--------------------------------------------------------------------------------
-libCURL_COPYRIGHT :: String
-libCURL_COPYRIGHT = #{const_str LIBCURL_COPYRIGHT}
-
-libCURL_TIMESTAMP :: String
-libCURL_TIMESTAMP = #{const_str LIBCURL_TIMESTAMP}
-
-libCURL_VERSION   :: String
-libCURL_VERSION   = #{const_str LIBCURL_VERSION  }
-
-libCURL_VERSION_NUM   :: Int
-libCURL_VERSION_NUM   = #{const LIBCURL_VERSION_NUM  }
-
-libCURL_VERSION_MAJOR :: Int
-libCURL_VERSION_MAJOR = #{const LIBCURL_VERSION_MAJOR}
-
-libCURL_VERSION_MINOR :: Int
-libCURL_VERSION_MINOR = #{const LIBCURL_VERSION_MINOR}
-
-libCURL_VERSION_PATCH :: Int
-libCURL_VERSION_PATCH = #{const LIBCURL_VERSION_PATCH}
-
-
--------------------------------------------------------------------------------
--- * Definitions from \"curl/curlbuild.h\"
--------------------------------------------------------------------------------
-type CCURL_off_t = CLLong  -- ??
-
-
--------------------------------------------------------------------------------
--- * Definitions from \"curl/curlrules.h\"
--------------------------------------------------------------------------------
--- todo
-
-
--------------------------------------------------------------------------------
--- * Definitions from \"curl/curl.h\"
--------------------------------------------------------------------------------
-data CCURL
-
-
--------------------------------------------------------------------------------
-#if defined(WIN32) && !defined(__LWIP_OPT_H__)
-type CCURL_socket_t = CUIntPtr -- SOCKET??
-#else
-type CCURL_socket_t = CInt
-#endif
-
-#{cconst CURL_SOCKET_BAD, CCURL_socket_t}
-
-
--------------------------------------------------------------------------------
--- ** CURL_httppost
--------------------------------------------------------------------------------
-data CCURL_httppost = CCURL_httppost
-  { ccurl_httppost_next           :: Ptr CCURL_httppost
-  , ccurl_httppost_name           :: Ptr CChar
-  , ccurl_httppost_namelength     :: CLong
-  , ccurl_httppost_contents       :: Ptr CChar
-  , ccurl_httppost_contentslength :: CLong
-  , ccurl_httppost_buffer         :: Ptr CChar
-  , ccurl_httppost_bufferlength   :: CLong
-  , ccurl_httppost_contenttype    :: Ptr CChar
-  , ccurl_httppost_contentheader  :: Ptr CCURL_slist
-  , ccurl_httppost_more           :: Ptr CCURL_httppost
-  , ccurl_httppost_flags          :: CLong
-  , ccurl_httppost_showfilename   :: Ptr CChar
-  , ccurl_httppost_userp          :: Ptr ()
-  } deriving (Show)
-
--- instance Storable CCURL_httppost where
---   sizeOf _    = #{size    struct curl_httppost}
---   alignment _ = #{alignof struct curl_httppost}
---   poke _ _    = undefined
---   peek _      = undefined
-
-#{cconst HTTPPOST_FILENAME   , CLong}
-#{cconst HTTPPOST_READFILE   , CLong}
-#{cconst HTTPPOST_PTRNAME    , CLong}
-#{cconst HTTPPOST_PTRCONTENTS, CLong}
-#{cconst HTTPPOST_BUFFER     , CLong}
-#{cconst HTTPPOST_PTRBUFFER  , CLong}
-#{cconst HTTPPOST_CALLBACK   , CLong}
- 
--------------------------------------------------------------------------------
--- ** Callbacks
--------------------------------------------------------------------------------
--- *** CURL_progress_callback
--------------------------------------------------------------------------------
-type CCURL_progress_callback
-  = Ptr () -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
-
-foreign import ccall "wrapper"
-  wrap_ccurl_progress_callback
-    :: CCURL_progress_callback
-    -> IO (FunPtr CCURL_progress_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_write_callback
--------------------------------------------------------------------------------
-#{cconst CURL_MAX_WRITE_SIZE , CSize}
-#{cconst CURL_MAX_HTTP_HEADER, CSize}
-#{cconst CURL_WRITEFUNC_PAUSE, CSize}
-
-type CCURL_write_callback
-  = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize
-
-foreign import ccall "wrapper"
-  wrap_ccurl_write_callback
-    :: CCURL_write_callback
-    -> IO (FunPtr CCURL_write_callback)
-
-
--------------------------------------------------------------------------------
--- ** CURL_fileinfo
--------------------------------------------------------------------------------
-newtype CCURLfiletype = CCURLfiletype CInt deriving (Eq, Show)   |7210:----|
-
-#{symbol CURLFILETYPE_FILE        , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_DIRECTORY   , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_SYMLINK     , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_DEVICE_BLOCK, CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_DEVICE_CHAR , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_NAMEDPIPE   , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_SOCKET      , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_DOOR        , CURLfiletype}                |7210:----|
-#{symbol CURLFILETYPE_UNKNOWN     , CURLfiletype}                |7210:----|
-
-#{cconst CURLFINFOFLAG_KNOWN_FILENAME  , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_FILETYPE  , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_TIME      , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_PERM      , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_UID       , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_GID       , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_SIZE      , CUInt}                  |7210:----|
-#{cconst CURLFINFOFLAG_KNOWN_HLINKCOUNT, CUInt}                  |7210:----|
-
-data CCURL_fileinfo = CCURL_fileinfo                             |7210:----|
-  { ccurl_fileinfo_filename       :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_filetype       :: CCURLfiletype               |7210:----|
-  , ccurl_fileinfo_time           :: CTime                       |7210:----|
-  , ccurl_fileinfo_perm           :: CUInt                       |7210:----|
-  , ccurl_fileinfo_uid            :: CInt                        |7210:----|
-  , ccurl_fileinfo_gid            :: CInt                        |7210:----|
-  , ccurl_fileinfo_size           :: CCURL_off_t                 |7210:----|
-  , ccurl_fileinfo_hardlinks      :: CLong                       |7210:----|
-  , ccurl_fileinfo_strings_time   :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_strings_perm   :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_strings_user   :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_strings_group  :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_strings_target :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_flags          :: CUInt                       |7210:----|
-  , ccurl_fileinfo_b_data         :: Ptr CChar                   |7210:----|
-  , ccurl_fileinfo_b_size         :: CSize                       |7210:----|
-  , ccurl_fileinfo_b_used         :: CSize                       |7210:----|
-  } deriving (Show)                                              |7210:----|
-
--- instance Storable CCURL_fileinfo where                        |7210:----|
---   sizeOf _    = #{size    struct curl_fileinfo}               |7210:----|
---   alignment _ = #{alignof struct curl_fileinfo}               |7210:----|
---   poke _ _    = undefined                                     |7210:----|
---   peek _      = undefined                                     |7210:----|
-
- 
--------------------------------------------------------------------------------
--- ** Callbacks
--------------------------------------------------------------------------------
--- *** CURL_chunk_bgn_callback
--------------------------------------------------------------------------------
-#{cconst CURL_CHUNK_BGN_FUNC_OK  , CLong}                        |7210:----|
-#{cconst CURL_CHUNK_BGN_FUNC_FAIL, CLong}                        |7210:----|
-#{cconst CURL_CHUNK_BGN_FUNC_SKIP, CLong}                        |7210:----|
-
-type CCURL_chunk_bgn_callback                                    |7210:----|
-  = Ptr () -> Ptr () -> CInt -> IO CLong                         |7210:----|
-
-foreign import ccall "wrapper"                                   |7210:----|
-  wrap_ccurl_chunk_bgn_callback                                  |7210:----|
-    :: CCURL_chunk_bgn_callback                                  |7210:----|
-    -> IO (FunPtr CCURL_chunk_bgn_callback)                      |7210:----|
-
-
--------------------------------------------------------------------------------
--- *** CURL_chunk_end_callback
--------------------------------------------------------------------------------
-#{cconst CURL_CHUNK_END_FUNC_OK  , CLong}                        |7210:----|
-#{cconst CURL_CHUNK_END_FUNC_FAIL, CLong}                        |7210:----|
-
-type CCURL_chunk_end_callback                                    |7210:----|
-  = Ptr () -> IO CLong                                           |7210:----|
-
-foreign import ccall "wrapper"                                   |7210:----|
-  wrap_ccurl_chunk_end_callback                                  |7210:----|
-    :: CCURL_chunk_end_callback                                  |7210:----|
-    -> IO (FunPtr CCURL_chunk_end_callback)                      |7210:----|
-
- 
--------------------------------------------------------------------------------
--- *** CURL_fnmatch_callback
--------------------------------------------------------------------------------
-#{cconst CURL_FNMATCHFUNC_MATCH  , CInt}                         |7210:----|
-#{cconst CURL_FNMATCHFUNC_NOMATCH, CInt}                         |7210:----|
-#{cconst CURL_FNMATCHFUNC_FAIL   , CInt}                         |7210:----|
-
-type CCURL_fnmatch_callback                                      |7210:----|
-  = Ptr () -> Ptr CChar -> Ptr CChar -> IO CInt                  |7210:----|
-
-foreign import ccall "wrapper"                                   |7210:----|
-  wrap_ccurl_fnmatch_callback                                    |7210:----|
-    :: CCURL_fnmatch_callback                                    |7210:----|
-    -> IO (FunPtr CCURL_fnmatch_callback)                        |7210:----|
-
- 
--------------------------------------------------------------------------------
--- *** CURL_seek_callback
--------------------------------------------------------------------------------
-#{cconst CURL_SEEKFUNC_OK      , CInt}
-#{cconst CURL_SEEKFUNC_FAIL    , CInt}
-#{cconst CURL_SEEKFUNC_CANTSEEK, CInt}
-
-type CCURL_seek_callback
-  = Ptr () -> CCURL_off_t -> CInt -> IO CInt
-
-foreign import ccall "wrapper"
-  wrap_ccurl_seek_callback
-    :: CCURL_seek_callback
-    -> IO (FunPtr CCURL_seek_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_read_callback
--------------------------------------------------------------------------------
-#{cconst CURL_READFUNC_ABORT, CSize}
-#{cconst CURL_READFUNC_PAUSE, CSize}
-
-type CCURL_read_callback
-  = Ptr CChar -> CSize -> CSize -> Ptr () -> IO CSize
-
-foreign import ccall "wrapper"
-  wrap_ccurl_read_callback
-    :: CCURL_read_callback
-    -> IO (FunPtr CCURL_read_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_sockopt_callback
--------------------------------------------------------------------------------
-newtype CCURLsocktype = CCURLsocktype CInt deriving (Eq, Show)
-
-#{symbol CURLSOCKTYPE_IPCXN, CURLsocktype}
-
-#{cconst CURL_SOCKOPT_OK               , CInt}                   |7215:----|
-#{cconst CURL_SOCKOPT_ERROR            , CInt}                   |7215:----|
-#{cconst CURL_SOCKOPT_ALREADY_CONNECTED, CInt}                   |7215:----|
-
-type CCURL_sockopt_callback
-  = Ptr () -> CCURL_socket_t -> CCURLsocktype -> IO CInt
-
-foreign import ccall "wrapper"
-  wrap_ccurl_sockopt_callback
-    :: CCURL_sockopt_callback
-    -> IO (FunPtr CCURL_sockopt_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_opensocket_callback
--------------------------------------------------------------------------------
-data CCURL_sockaddr = CCURL_sockaddr
-  { ccurl_sockaddr_family   :: CInt
-  , ccurl_sockaddr_socktype :: CInt
-  , ccurl_sockaddr_protocol :: CInt
-  , ccurl_sockaddr_addrlen  :: CUInt
-  , ccurl_sockaddr_addr     :: Ptr ()  -- sockaddr?? TODO
-  } deriving (Show)
-
--- instance Storable CCURL_sockaddr where
---   sizeOf _    = #{size    struct curl_sockaddr}
---   alignment _ = #{alignof struct curl_sockaddr}
---   poke _ _    = undefined
---   peek _      = undefined
-
-type CCURL_opensocket_callback
-  = Ptr () -> CCURLsocktype -> Ptr CCURL_sockaddr -> IO CCURL_socket_t
-
-foreign import ccall "wrapper"
-  wrap_ccurl_opensocket_callback
-    :: CCURL_opensocket_callback
-    -> IO (FunPtr CCURL_opensocket_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_closesocket_callback
--------------------------------------------------------------------------------
-type CCURL_closesocket_callback                                  |7217:----|
-  = Ptr () -> CCURL_socket_t -> IO CInt                          |7217:----|
-
-foreign import ccall "wrapper"                                   |7217:----|
-  wrap_ccurl_closesocket_callback                                |7217:----|
-    :: CCURL_closesocket_callback                                |7217:----|
-    -> IO (FunPtr CCURL_closesocket_callback)                    |7217:----|
-
- 
--------------------------------------------------------------------------------
--- *** CURL_ioctl_callback
--------------------------------------------------------------------------------
-newtype CCURLioerr = CCURLioerr CInt deriving (Eq, Show)
-
-#{symbol CURLIOE_OK           , CURLioerr}
-#{symbol CURLIOE_UNKNOWNCMD   , CURLioerr}
-#{symbol CURLIOE_FAILRESTART  , CURLioerr}
-
-newtype CCURLiocmd = CCURLiocmd CInt deriving (Eq, Show)
-
-#{symbol CURLIOCMD_NOP        , CURLiocmd}
-#{symbol CURLIOCMD_RESTARTREAD, CURLiocmd}
-
-type CCURL_ioctl_callback
-  = Ptr CCURL -> CCURLiocmd -> Ptr () -> IO CCURLioerr
-
-foreign import ccall "wrapper"
-  wrap_ccurl_ioctl_callback
-    :: CCURL_ioctl_callback
-    -> IO (FunPtr CCURL_ioctl_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_malloc_callback
--------------------------------------------------------------------------------
-type CCURL_malloc_callback
-  = CSize -> IO (Ptr ())
-
-foreign import ccall "wrapper"
-  wrap_ccurl_malloc_callback
-    :: CCURL_malloc_callback
-    -> IO (FunPtr CCURL_malloc_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_free_callback
--------------------------------------------------------------------------------
-type CCURL_free_callback
-  = Ptr () -> IO ()
-
-foreign import ccall "wrapper"
-  wrap_ccurl_free_callback
-    :: CCURL_free_callback
-    -> IO (FunPtr CCURL_free_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_realloc_callback
--------------------------------------------------------------------------------
-type CCURL_realloc_callback
-  = Ptr () -> CSize -> IO (Ptr ())
-
-foreign import ccall "wrapper"
-  wrap_ccurl_realloc_callback
-    :: CCURL_realloc_callback
-    -> IO (FunPtr CCURL_realloc_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_strdup_callback
--------------------------------------------------------------------------------
-type CCURL_strdup_callback
-  = Ptr CChar -> IO (Ptr CChar)
-
-foreign import ccall "wrapper"
-  wrap_ccurl_strdup_callback
-    :: CCURL_strdup_callback
-    -> IO (FunPtr CCURL_strdup_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_calloc_callback
--------------------------------------------------------------------------------
-type CCURL_calloc_callback
-  = CSize -> CSize -> IO (Ptr ())
-
-foreign import ccall "wrapper"
-  wrap_ccurl_calloc_callback
-    :: CCURL_calloc_callback
-    -> IO (FunPtr CCURL_calloc_callback)
-
- 
--------------------------------------------------------------------------------
--- *** CURL_debug_callback
--------------------------------------------------------------------------------
-newtype CCURL_infotype = CCURL_infotype CInt deriving (Eq, Show)
-
-#{symbol CURLINFO_TEXT        , CURL_infotype}
-#{symbol CURLINFO_HEADER_IN   , CURL_infotype}
-#{symbol CURLINFO_HEADER_OUT  , CURL_infotype}
-#{symbol CURLINFO_DATA_IN     , CURL_infotype}
-#{symbol CURLINFO_DATA_OUT    , CURL_infotype}
-#{symbol CURLINFO_SSL_DATA_IN , CURL_infotype}
-#{symbol CURLINFO_SSL_DATA_OUT, CURL_infotype}
-#{symbol CURLINFO_END         , CURL_infotype}
-
-type CCURL_debug_callback
-  = Ptr CCURL -> CCURL_infotype -> Ptr CChar -> CSize -> Ptr () -> IO CInt
-
-foreign import ccall "wrapper"
-  wrap_ccurl_debug_callback
-    :: CCURL_debug_callback
-    -> IO (FunPtr CCURL_debug_callback)
-
-
--------------------------------------------------------------------------------
--- ** Constants
--------------------------------------------------------------------------------
--- *** CURLcode
--------------------------------------------------------------------------------
-newtype CCURLcode = CCURLcode CInt deriving (Eq, Show)
-
-#{symbol CURLE_OK                      , CURLcode}
-#{symbol CURLE_UNSUPPORTED_PROTOCOL    , CURLcode}
-#{symbol CURLE_FAILED_INIT             , CURLcode}
-#{symbol CURLE_URL_MALFORMAT           , CURLcode}
-#{symbol CURLE_NOT_BUILT_IN            , CURLcode} |7215:----|
-#{symbol CURLE_COULDNT_RESOLVE_PROXY   , CURLcode}
-#{symbol CURLE_COULDNT_RESOLVE_HOST    , CURLcode}
-#{symbol CURLE_COULDNT_CONNECT         , CURLcode}
-#{symbol CURLE_FTP_WEIRD_SERVER_REPLY  , CURLcode}
-#{symbol CURLE_REMOTE_ACCESS_DENIED    , CURLcode}
-#{symbol CURLE_FTP_ACCEPT_FAILED       , CURLcode} |7240:----|
-#{symbol CURLE_FTP_WEIRD_PASS_REPLY    , CURLcode}
-#{symbol CURLE_FTP_ACCEPT_TIMEOUT      , CURLcode} |7240:----|
-#{symbol CURLE_FTP_WEIRD_PASV_REPLY    , CURLcode}
-#{symbol CURLE_FTP_WEIRD_227_FORMAT    , CURLcode}
-#{symbol CURLE_FTP_CANT_GET_HOST       , CURLcode}
-#{symbol CURLE_FTP_COULDNT_SET_TYPE    , CURLcode}
-#{symbol CURLE_PARTIAL_FILE            , CURLcode}
-#{symbol CURLE_FTP_COULDNT_RETR_FILE   , CURLcode}
-#{symbol CURLE_QUOTE_ERROR             , CURLcode}
-#{symbol CURLE_HTTP_RETURNED_ERROR     , CURLcode}
-#{symbol CURLE_WRITE_ERROR             , CURLcode}
-#{symbol CURLE_UPLOAD_FAILED           , CURLcode}
-#{symbol CURLE_READ_ERROR              , CURLcode}
-#{symbol CURLE_OUT_OF_MEMORY           , CURLcode}
-#{symbol CURLE_OPERATION_TIMEDOUT      , CURLcode}
-#{symbol CURLE_FTP_PORT_FAILED         , CURLcode}
-#{symbol CURLE_FTP_COULDNT_USE_REST    , CURLcode}
-#{symbol CURLE_RANGE_ERROR             , CURLcode}
-#{symbol CURLE_HTTP_POST_ERROR         , CURLcode}
-#{symbol CURLE_SSL_CONNECT_ERROR       , CURLcode}
-#{symbol CURLE_BAD_DOWNLOAD_RESUME     , CURLcode}
-#{symbol CURLE_FILE_COULDNT_READ_FILE  , CURLcode}
-#{symbol CURLE_LDAP_CANNOT_BIND        , CURLcode}
-#{symbol CURLE_LDAP_SEARCH_FAILED      , CURLcode}
-#{symbol CURLE_FUNCTION_NOT_FOUND      , CURLcode}
-#{symbol CURLE_ABORTED_BY_CALLBACK     , CURLcode}
-#{symbol CURLE_BAD_FUNCTION_ARGUMENT   , CURLcode}
-#{symbol CURLE_INTERFACE_FAILED        , CURLcode}
-#{symbol CURLE_TOO_MANY_REDIRECTS      , CURLcode}
-#{symbol CURLE_UNKNOWN_TELNET_OPTION   , CURLcode} |----:7214|
-#{symbol CURLE_UNKNOWN_OPTION          , CURLcode} |7215:----|
-#{symbol CURLE_TELNET_OPTION_SYNTAX    , CURLcode}
-#{symbol CURLE_PEER_FAILED_VERIFICATION, CURLcode}
-#{symbol CURLE_GOT_NOTHING             , CURLcode}
-#{symbol CURLE_SSL_ENGINE_NOTFOUND     , CURLcode}
-#{symbol CURLE_SSL_ENGINE_SETFAILED    , CURLcode}
-#{symbol CURLE_SEND_ERROR              , CURLcode}
-#{symbol CURLE_RECV_ERROR              , CURLcode}
-#{symbol CURLE_SSL_CERTPROBLEM         , CURLcode}
-#{symbol CURLE_SSL_CIPHER              , CURLcode}
-#{symbol CURLE_SSL_CACERT              , CURLcode}
-#{symbol CURLE_BAD_CONTENT_ENCODING    , CURLcode}
-#{symbol CURLE_LDAP_INVALID_URL        , CURLcode}
-#{symbol CURLE_FILESIZE_EXCEEDED       , CURLcode}
-#{symbol CURLE_USE_SSL_FAILED          , CURLcode}
-#{symbol CURLE_SEND_FAIL_REWIND        , CURLcode}
-#{symbol CURLE_SSL_ENGINE_INITFAILED   , CURLcode}
-#{symbol CURLE_LOGIN_DENIED            , CURLcode}
-#{symbol CURLE_TFTP_NOTFOUND           , CURLcode}
-#{symbol CURLE_TFTP_PERM               , CURLcode}
-#{symbol CURLE_REMOTE_DISK_FULL        , CURLcode}
-#{symbol CURLE_TFTP_ILLEGAL            , CURLcode}
-#{symbol CURLE_TFTP_UNKNOWNID          , CURLcode}
-#{symbol CURLE_REMOTE_FILE_EXISTS      , CURLcode}
-#{symbol CURLE_TFTP_NOSUCHUSER         , CURLcode}
-#{symbol CURLE_CONV_FAILED             , CURLcode}
-#{symbol CURLE_CONV_REQD               , CURLcode}
-#{symbol CURLE_SSL_CACERT_BADFILE      , CURLcode}
-#{symbol CURLE_REMOTE_FILE_NOT_FOUND   , CURLcode}
-#{symbol CURLE_SSH                     , CURLcode}
-#{symbol CURLE_SSL_SHUTDOWN_FAILED     , CURLcode}
-#{symbol CURLE_AGAIN                   , CURLcode}
-#{symbol CURLE_SSL_CRL_BADFILE         , CURLcode}
-#{symbol CURLE_SSL_ISSUER_ERROR        , CURLcode}
-#{symbol CURLE_FTP_PRET_FAILED         , CURLcode}
-#{symbol CURLE_RTSP_CSEQ_ERROR         , CURLcode}
-#{symbol CURLE_RTSP_SESSION_ERROR      , CURLcode}
-#{symbol CURLE_FTP_BAD_FILE_LIST       , CURLcode} |7210:----|
-#{symbol CURLE_CHUNK_FAILED            , CURLcode} |7210:----|
-
-
--------------------------------------------------------------------------------
--- ** Callbacks
--------------------------------------------------------------------------------
--- *** CURL_conv_callback
--------------------------------------------------------------------------------
-type CCURL_conv_callback
-  = Ptr CChar -> CSize -> IO CCURLcode
-
-foreign import ccall "wrapper"
-  wrap_ccurl_conv_callback
-    :: CCURL_conv_callback
-    -> IO (FunPtr CCURL_conv_callback)
-
-
--------------------------------------------------------------------------------
--- *** CURL_ssl_ctx_callback
--------------------------------------------------------------------------------
-type CCURL_ssl_ctx_callback
-  = Ptr CCURL -> Ptr () -> Ptr () -> IO CCURLcode
-
-foreign import ccall "wrapper"
-  wrap_ccurl_ssl_ctx_callback
-    :: CCURL_ssl_ctx_callback
-    -> IO (FunPtr CCURL_ssl_ctx_callback)
-
- 
--------------------------------------------------------------------------------
--- ** Constants
--------------------------------------------------------------------------------
--- *** CURLproxy
--------------------------------------------------------------------------------
-#{cconst CURLPROXY_HTTP           , CLong}
-#{cconst CURLPROXY_HTTP_1_0       , CLong}
-#{cconst CURLPROXY_SOCKS4         , CLong}
-#{cconst CURLPROXY_SOCKS5         , CLong}
-#{cconst CURLPROXY_SOCKS4A        , CLong}
-#{cconst CURLPROXY_SOCKS5_HOSTNAME, CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLauth
--------------------------------------------------------------------------------
-#{cconst CURLAUTH_NONE        , CLong}
-#{cconst CURLAUTH_BASIC       , CLong}
-#{cconst CURLAUTH_DIGEST      , CLong}
-#{cconst CURLAUTH_GSSNEGOTIATE, CLong}
-#{cconst CURLAUTH_NTLM        , CLong}
-#{cconst CURLAUTH_DIGEST_IE   , CLong}
-#{cconst CURLAUTH_NTLM_WB     , CLong} |7220:----|
-#{cconst CURLAUTH_ONLY        , CLong} |7213:----|
-#{cconst CURLAUTH_ANY         , CLong}
-#{cconst CURLAUTH_ANYSAFE     , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLsshauth
--------------------------------------------------------------------------------
-#{cconst CURLSSH_AUTH_ANY      , CLong}
-#{cconst CURLSSH_AUTH_NONE     , CLong}
-#{cconst CURLSSH_AUTH_PUBLICKEY, CLong}
-#{cconst CURLSSH_AUTH_PASSWORD , CLong}
-#{cconst CURLSSH_AUTH_HOST     , CLong}
-#{cconst CURLSSH_AUTH_KEYBOARD , CLong}
-#{cconst CURLSSH_AUTH_DEFAULT  , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLgssapi
--------------------------------------------------------------------------------
-#{cconst CURLGSSAPI_DELEGATION_NONE       , CLong}               |7220:----|
-#{cconst CURLGSSAPI_DELEGATION_POLICY_FLAG, CLong}               |7220:----|
-#{cconst CURLGSSAPI_DELEGATION_FLAG       , CLong}               |7220:----|
-
-
--------------------------------------------------------------------------------
--- *** CURL_error_size
--------------------------------------------------------------------------------
-#{cconst CURL_ERROR_SIZE, CLong}
-
-
--------------------------------------------------------------------------------
--- ** Callbacks
--------------------------------------------------------------------------------
--- *** CURL_sshkey_callback
--------------------------------------------------------------------------------
-data CCURL_khkey = CCURL_khkey
-  { ccurl_khkey_key     :: Ptr CChar
-  , ccurl_khkey_len     :: CSize
-  , ccurl_khkey_keytype :: CCURL_khtype
-  } deriving (Show)
-
--- instance Storable CCURL_khkey where
---   sizeOf _    = #{size    struct curl_khkey}
---   alignment _ = #{alignof struct curl_khkey}
---   poke _ _    = undefined
---   peek _      = undefined
-
-newtype CCURL_khtype = CCURL_khtype CInt deriving (Eq, Show)
-
-#{symbol CURLKHTYPE_UNKNOWN, CURL_khtype}
-#{symbol CURLKHTYPE_RSA1   , CURL_khtype}
-#{symbol CURLKHTYPE_RSA    , CURL_khtype}
-#{symbol CURLKHTYPE_DSS    , CURL_khtype}
- 
-newtype CCURL_khstat = CCURL_khstat CInt deriving (Eq, Show)
-
-#{symbol CURLKHSTAT_FINE_ADD_TO_FILE, CURL_khstat}
-#{symbol CURLKHSTAT_FINE            , CURL_khstat}
-#{symbol CURLKHSTAT_REJECT          , CURL_khstat}
-#{symbol CURLKHSTAT_DEFER           , CURL_khstat}
-
-newtype CCURL_khmatch = CCURL_khmatch CInt deriving (Eq, Show)
-
-#{symbol CURLKHMATCH_OK      , CURL_khmatch}
-#{symbol CURLKHMATCH_MISMATCH, CURL_khmatch}
-#{symbol CURLKHMATCH_MISSING , CURL_khmatch}
- 
-type CCURL_sshkey_callback
-  = Ptr CCURL -> Ptr CCURL_khkey -> Ptr CCURL_khkey
-    -> CCURL_khmatch -> Ptr () -> IO CCURL_khstat
-
-foreign import ccall "wrapper"
-  wrap_ccurl_sshkey_callback
-    :: CCURL_sshkey_callback
-    -> IO (FunPtr CCURL_sshkey_callback)
-
- 
--------------------------------------------------------------------------------
--- ** Constants
--------------------------------------------------------------------------------
--- *** CURLusessl
--------------------------------------------------------------------------------
-#{cconst CURLUSESSL_NONE   , CLong}
-#{cconst CURLUSESSL_TRY    , CLong}
-#{cconst CURLUSESSL_CONTROL, CLong}
-#{cconst CURLUSESSL_ALL    , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLsslopt
--------------------------------------------------------------------------------
-#{cconst CURLSSLOPT_ALLOW_BEAST, CLong}                          |7250:----|
-
-
--------------------------------------------------------------------------------
--- *** CURLftpssl
--------------------------------------------------------------------------------
-#{cconst CURLFTPSSL_CCC_NONE   , CLong}
-#{cconst CURLFTPSSL_CCC_PASSIVE, CLong}
-#{cconst CURLFTPSSL_CCC_ACTIVE , CLong}
- 
-
--------------------------------------------------------------------------------
--- *** CURLftpauth
--------------------------------------------------------------------------------
-#{cconst CURLFTPAUTH_DEFAULT, CLong}
-#{cconst CURLFTPAUTH_SSL    , CLong}
-#{cconst CURLFTPAUTH_TLS    , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLftpcreate
--------------------------------------------------------------------------------
-#{cconst CURLFTP_CREATE_DIR_NONE , CLong}
-#{cconst CURLFTP_CREATE_DIR      , CLong}
-#{cconst CURLFTP_CREATE_DIR_RETRY, CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLftpmethod
--------------------------------------------------------------------------------
-#{cconst CURLFTPMETHOD_DEFAULT  , CLong}
-#{cconst CURLFTPMETHOD_MULTICWD , CLong}
-#{cconst CURLFTPMETHOD_NOCWD    , CLong}
-#{cconst CURLFTPMETHOD_SINGLECWD, CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLproto
--------------------------------------------------------------------------------
-#{cconst CURLPROTO_HTTP  , CLong}
-#{cconst CURLPROTO_HTTPS , CLong}
-#{cconst CURLPROTO_FTP   , CLong}
-#{cconst CURLPROTO_FTPS  , CLong}
-#{cconst CURLPROTO_SCP   , CLong}
-#{cconst CURLPROTO_SFTP  , CLong}
-#{cconst CURLPROTO_TELNET, CLong}
-#{cconst CURLPROTO_LDAP  , CLong}
-#{cconst CURLPROTO_LDAPS , CLong}
-#{cconst CURLPROTO_DICT  , CLong}
-#{cconst CURLPROTO_FILE  , CLong}
-#{cconst CURLPROTO_TFTP  , CLong}
-#{cconst CURLPROTO_IMAP  , CLong}
-#{cconst CURLPROTO_IMAPS , CLong}
-#{cconst CURLPROTO_POP3  , CLong}
-#{cconst CURLPROTO_POP3S , CLong}
-#{cconst CURLPROTO_SMTP  , CLong}
-#{cconst CURLPROTO_SMTPS , CLong}
-#{cconst CURLPROTO_RTSP  , CLong}
-#{cconst CURLPROTO_RTMP  , CLong} |7210:----|
-#{cconst CURLPROTO_RTMPT , CLong} |7210:----|
-#{cconst CURLPROTO_RTMPE , CLong} |7210:----|
-#{cconst CURLPROTO_RTMPTE, CLong} |7210:----|
-#{cconst CURLPROTO_RTMPS , CLong} |7210:----|
-#{cconst CURLPROTO_RTMPTS, CLong} |7210:----|
-#{cconst CURLPROTO_GOPHER, CLong} |7212:----|
-#{cconst CURLPROTO_ALL   , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLoption
--------------------------------------------------------------------------------
-newtype CCURLoption'CLong   = CCURLoption'CLong   CInt deriving (Eq, Show)
-newtype CCURLoption'Int64   = CCURLoption'Int64   CInt deriving (Eq, Show)
-newtype CCURLoption'CString = CCURLoption'CString CInt deriving (Eq, Show)
-newtype CCURLoption'CFile   = CCURLoption'CFile   CInt deriving (Eq, Show)
-newtype CCURLoption'SList   = CCURLoption'SList   CInt deriving (Eq, Show)
-newtype CCURLoption'HTTPP   = CCURLoption'HTTPP   CInt deriving (Eq, Show)
-newtype CCURLoption'CURLSH  = CCURLoption'CURLSH  CInt deriving (Eq, Show)
-newtype CCURLoption'UsrPtr  = CCURLoption'UsrPtr  CInt deriving (Eq, Show)
-newtype CCURLoption'FunPtr  = CCURLoption'FunPtr  CInt deriving (Eq, Show)
-
-#define hsc_curlopt(name, type) \
-  printf("c" #name " :: CCURLoption'" #type "\n"); \
-  printf("c" #name " =  CCURLoption'" #type " "); hsc_const(name);
-
-#{curlopt CURLOPT_FILE                       , CFile   }
-#{curlopt CURLOPT_URL                        , CString }
-#{curlopt CURLOPT_PORT                       , CLong   }
-#{curlopt CURLOPT_PROXY                      , CString }
-#{curlopt CURLOPT_USERPWD                    , CString }
-#{curlopt CURLOPT_PROXYUSERPWD               , CString }
-#{curlopt CURLOPT_RANGE                      , CString }
-#{curlopt CURLOPT_INFILE                     , CFile   }
-#{curlopt CURLOPT_ERRORBUFFER                , CString }
-#{curlopt CURLOPT_WRITEFUNCTION              , FunPtr  }
-#{curlopt CURLOPT_READFUNCTION               , FunPtr  }
-#{curlopt CURLOPT_TIMEOUT                    , CLong   }
-#{curlopt CURLOPT_INFILESIZE                 , CLong   }
-#{curlopt CURLOPT_POSTFIELDS                 , CString }  -- UsrPtr??
-#{curlopt CURLOPT_REFERER                    , CString }
-#{curlopt CURLOPT_FTPPORT                    , CString }
-#{curlopt CURLOPT_USERAGENT                  , CString }
-#{curlopt CURLOPT_LOW_SPEED_LIMIT            , CLong   }
-#{curlopt CURLOPT_LOW_SPEED_TIME             , CLong   }
-#{curlopt CURLOPT_RESUME_FROM                , CLong   }
-#{curlopt CURLOPT_COOKIE                     , CString }
-#{curlopt CURLOPT_HTTPHEADER                 , SList   }
-#{curlopt CURLOPT_HTTPPOST                   , HTTPP   }
-#{curlopt CURLOPT_SSLCERT                    , CString }
-#{curlopt CURLOPT_KEYPASSWD                  , CString }
-#{curlopt CURLOPT_CRLF                       , CLong   }
-#{curlopt CURLOPT_QUOTE                      , SList   }
-#{curlopt CURLOPT_WRITEHEADER                , CFile   }  -- UsrPtr??
-#{curlopt CURLOPT_COOKIEFILE                 , CString }
-#{curlopt CURLOPT_SSLVERSION                 , CLong   }
-#{curlopt CURLOPT_TIMECONDITION              , CLong   }
-#{curlopt CURLOPT_TIMEVALUE                  , CLong   }
-#{curlopt CURLOPT_CUSTOMREQUEST              , CString }
-#{curlopt CURLOPT_STDERR                     , CFile   }
-#{curlopt CURLOPT_POSTQUOTE                  , SList   }
-{-# DEPRECATED cCURLOPT_WRITEINFO                 "" #-} |7220:----|
-#{curlopt CURLOPT_WRITEINFO                  , CString }
-#{curlopt CURLOPT_VERBOSE                    , CLong   }
-#{curlopt CURLOPT_HEADER                     , CLong   }
-#{curlopt CURLOPT_NOPROGRESS                 , CLong   }
-#{curlopt CURLOPT_NOBODY                     , CLong   }
-#{curlopt CURLOPT_FAILONERROR                , CLong   }
-#{curlopt CURLOPT_UPLOAD                     , CLong   }
-#{curlopt CURLOPT_POST                       , CLong   }
-#{curlopt CURLOPT_DIRLISTONLY                , CLong   }
-#{curlopt CURLOPT_APPEND                     , CLong   }
-#{curlopt CURLOPT_NETRC                      , CLong   }
-#{curlopt CURLOPT_FOLLOWLOCATION             , CLong   }
-#{curlopt CURLOPT_TRANSFERTEXT               , CLong   }
-#{curlopt CURLOPT_PUT                        , CLong   }
-#{curlopt CURLOPT_PROGRESSFUNCTION           , FunPtr  }
-#{curlopt CURLOPT_PROGRESSDATA               , UsrPtr  }
-#{curlopt CURLOPT_AUTOREFERER                , CLong   }
-#{curlopt CURLOPT_PROXYPORT                  , CLong   }
-#{curlopt CURLOPT_POSTFIELDSIZE              , CLong   }
-#{curlopt CURLOPT_HTTPPROXYTUNNEL            , CLong   }
-#{curlopt CURLOPT_INTERFACE                  , CString }
-#{curlopt CURLOPT_KRBLEVEL                   , CString }
-#{curlopt CURLOPT_SSL_VERIFYPEER             , CLong   }
-#{curlopt CURLOPT_CAINFO                     , CString }
-#{curlopt CURLOPT_MAXREDIRS                  , CLong   }
-#{curlopt CURLOPT_FILETIME                   , CLong   }
-#{curlopt CURLOPT_TELNETOPTIONS              , SList   }
-#{curlopt CURLOPT_MAXCONNECTS                , CLong   }
-{-# DEPRECATED cCURLOPT_CLOSEPOLICY               "" #-} |7217:----|
-#{curlopt CURLOPT_CLOSEPOLICY                , CLong   }
-#{curlopt CURLOPT_FRESH_CONNECT              , CLong   }
-#{curlopt CURLOPT_FORBID_REUSE               , CLong   }
-#{curlopt CURLOPT_RANDOM_FILE                , CString }
-#{curlopt CURLOPT_EGDSOCKET                  , CString }
-#{curlopt CURLOPT_CONNECTTIMEOUT             , CLong   }
-#{curlopt CURLOPT_HEADERFUNCTION             , FunPtr  }
-#{curlopt CURLOPT_HTTPGET                    , CLong   }
-#{curlopt CURLOPT_SSL_VERIFYHOST             , CLong   }
-#{curlopt CURLOPT_COOKIEJAR                  , CString }
-#{curlopt CURLOPT_SSL_CIPHER_LIST            , CString }
-#{curlopt CURLOPT_HTTP_VERSION               , CLong   }
-#{curlopt CURLOPT_FTP_USE_EPSV               , CLong   }
-#{curlopt CURLOPT_SSLCERTTYPE                , CString }
-#{curlopt CURLOPT_SSLKEY                     , CString }
-#{curlopt CURLOPT_SSLKEYTYPE                 , CString }
-#{curlopt CURLOPT_SSLENGINE                  , CString }
-#{curlopt CURLOPT_SSLENGINE_DEFAULT          , CLong   }
-{-# DEPRECATED cCURLOPT_DNS_USE_GLOBAL_CACHE      "" #-} |7220:----|
-#{curlopt CURLOPT_DNS_USE_GLOBAL_CACHE       , CLong   }
-#{curlopt CURLOPT_DNS_CACHE_TIMEOUT          , CLong   }
-#{curlopt CURLOPT_PREQUOTE                   , SList   }
-#{curlopt CURLOPT_DEBUGFUNCTION              , FunPtr  }
-#{curlopt CURLOPT_DEBUGDATA                  , UsrPtr  }
-#{curlopt CURLOPT_COOKIESESSION              , CLong   }
-#{curlopt CURLOPT_CAPATH                     , CString }
-#{curlopt CURLOPT_BUFFERSIZE                 , CLong   }
-#{curlopt CURLOPT_NOSIGNAL                   , CLong   }
-#{curlopt CURLOPT_SHARE                      , CURLSH  }
-#{curlopt CURLOPT_PROXYTYPE                  , CLong   }
-#{curlopt CURLOPT_ENCODING                   , CString } |----:7215|
-#{curlopt CURLOPT_ACCEPT_ENCODING            , CString } |7216:----|
-#{curlopt CURLOPT_PRIVATE                    , UsrPtr  }
-#{curlopt CURLOPT_HTTP200ALIASES             , SList   }
-#{curlopt CURLOPT_UNRESTRICTED_AUTH          , CLong   }
-#{curlopt CURLOPT_FTP_USE_EPRT               , CLong   }
-#{curlopt CURLOPT_HTTPAUTH                   , CLong   }
-#{curlopt CURLOPT_SSL_CTX_FUNCTION           , FunPtr  }
-#{curlopt CURLOPT_SSL_CTX_DATA               , UsrPtr  }
-#{curlopt CURLOPT_FTP_CREATE_MISSING_DIRS    , CLong   }
-#{curlopt CURLOPT_PROXYAUTH                  , CLong   }
-#{curlopt CURLOPT_FTP_RESPONSE_TIMEOUT       , CLong   }
-#{curlopt CURLOPT_IPRESOLVE                  , CLong   }
-#{curlopt CURLOPT_MAXFILESIZE                , CLong   }
-#{curlopt CURLOPT_INFILESIZE_LARGE           , Int64   }
-#{curlopt CURLOPT_RESUME_FROM_LARGE          , Int64   }
-#{curlopt CURLOPT_MAXFILESIZE_LARGE          , Int64   }
-#{curlopt CURLOPT_NETRC_FILE                 , CString }
-#{curlopt CURLOPT_USE_SSL                    , CLong   }
-#{curlopt CURLOPT_POSTFIELDSIZE_LARGE        , Int64   }
-#{curlopt CURLOPT_TCP_NODELAY                , CLong   }
-#{curlopt CURLOPT_FTPSSLAUTH                 , CLong   }
-#{curlopt CURLOPT_IOCTLFUNCTION              , FunPtr  }
-#{curlopt CURLOPT_IOCTLDATA                  , UsrPtr  }
-#{curlopt CURLOPT_FTP_ACCOUNT                , CString }
-#{curlopt CURLOPT_COOKIELIST                 , CString }
-#{curlopt CURLOPT_IGNORE_CONTENT_LENGTH      , CLong   }
-#{curlopt CURLOPT_FTP_SKIP_PASV_IP           , CLong   }
-#{curlopt CURLOPT_FTP_FILEMETHOD             , CLong   }
-#{curlopt CURLOPT_LOCALPORT                  , CLong   }
-#{curlopt CURLOPT_LOCALPORTRANGE             , CLong   }
-#{curlopt CURLOPT_CONNECT_ONLY               , CLong   }
-#{curlopt CURLOPT_CONV_FROM_NETWORK_FUNCTION , FunPtr  }
-#{curlopt CURLOPT_CONV_TO_NETWORK_FUNCTION   , FunPtr  }
-#{curlopt CURLOPT_CONV_FROM_UTF8_FUNCTION    , FunPtr  }
-#{curlopt CURLOPT_MAX_SEND_SPEED_LARGE       , Int64   }
-#{curlopt CURLOPT_MAX_RECV_SPEED_LARGE       , Int64   }
-#{curlopt CURLOPT_FTP_ALTERNATIVE_TO_USER    , CString }
-#{curlopt CURLOPT_SOCKOPTFUNCTION            , FunPtr  }
-#{curlopt CURLOPT_SOCKOPTDATA                , UsrPtr  }
-#{curlopt CURLOPT_SSL_SESSIONID_CACHE        , CLong   }
-#{curlopt CURLOPT_SSH_AUTH_TYPES             , CLong   }
-#{curlopt CURLOPT_SSH_PUBLIC_KEYFILE         , CString }
-#{curlopt CURLOPT_SSH_PRIVATE_KEYFILE        , CString }
-#{curlopt CURLOPT_FTP_SSL_CCC                , CLong   }
-#{curlopt CURLOPT_TIMEOUT_MS                 , CLong   }
-#{curlopt CURLOPT_CONNECTTIMEOUT_MS          , CLong   }
-#{curlopt CURLOPT_HTTP_TRANSFER_DECODING     , CLong   }
-#{curlopt CURLOPT_HTTP_CONTENT_DECODING      , CLong   }
-#{curlopt CURLOPT_NEW_FILE_PERMS             , CLong   }
-#{curlopt CURLOPT_NEW_DIRECTORY_PERMS        , CLong   }
-#{curlopt CURLOPT_POSTREDIR                  , CLong   }
-#{curlopt CURLOPT_SSH_HOST_PUBLIC_KEY_MD5    , CString }
-#{curlopt CURLOPT_OPENSOCKETFUNCTION         , FunPtr  }
-#{curlopt CURLOPT_OPENSOCKETDATA             , UsrPtr  }
-#{curlopt CURLOPT_COPYPOSTFIELDS             , CString }
-#{curlopt CURLOPT_PROXY_TRANSFER_MODE        , CLong   }
-#{curlopt CURLOPT_SEEKFUNCTION               , FunPtr  }
-#{curlopt CURLOPT_SEEKDATA                   , UsrPtr  }
-#{curlopt CURLOPT_CRLFILE                    , CString }
-#{curlopt CURLOPT_ISSUERCERT                 , CString }
-#{curlopt CURLOPT_ADDRESS_SCOPE              , CLong   }
-#{curlopt CURLOPT_CERTINFO                   , CLong   }
-#{curlopt CURLOPT_USERNAME                   , CString }
-#{curlopt CURLOPT_PASSWORD                   , CString }
-#{curlopt CURLOPT_PROXYUSERNAME              , CString }
-#{curlopt CURLOPT_PROXYPASSWORD              , CString }
-#{curlopt CURLOPT_NOPROXY                    , CString }
-#{curlopt CURLOPT_TFTP_BLKSIZE               , CLong   }
-#{curlopt CURLOPT_SOCKS5_GSSAPI_SERVICE      , CString }
-#{curlopt CURLOPT_SOCKS5_GSSAPI_NEC          , CLong   }
-#{curlopt CURLOPT_PROTOCOLS                  , CLong   }
-#{curlopt CURLOPT_REDIR_PROTOCOLS            , CLong   }
-#{curlopt CURLOPT_SSH_KNOWNHOSTS             , CString }
-#{curlopt CURLOPT_SSH_KEYFUNCTION            , FunPtr  }
-#{curlopt CURLOPT_SSH_KEYDATA                , UsrPtr  }
-#{curlopt CURLOPT_MAIL_FROM                  , CString }
-#{curlopt CURLOPT_MAIL_RCPT                  , SList   }
-#{curlopt CURLOPT_FTP_USE_PRET               , CLong   }
-#{curlopt CURLOPT_RTSP_REQUEST               , CLong   }
-#{curlopt CURLOPT_RTSP_SESSION_ID            , CString }
-#{curlopt CURLOPT_RTSP_STREAM_URI            , CString }
-#{curlopt CURLOPT_RTSP_TRANSPORT             , CString }
-#{curlopt CURLOPT_RTSP_CLIENT_CSEQ           , CLong   }
-#{curlopt CURLOPT_RTSP_SERVER_CSEQ           , CLong   }
-#{curlopt CURLOPT_INTERLEAVEDATA             , UsrPtr  }
-#{curlopt CURLOPT_INTERLEAVEFUNCTION         , FunPtr  }
-#{curlopt CURLOPT_WILDCARDMATCH              , CLong   } |7210:----|
-#{curlopt CURLOPT_CHUNK_BGN_FUNCTION         , FunPtr  } |7210:----|
-#{curlopt CURLOPT_CHUNK_END_FUNCTION         , FunPtr  } |7210:----|
-#{curlopt CURLOPT_FNMATCH_FUNCTION           , FunPtr  } |7210:----|
-#{curlopt CURLOPT_CHUNK_DATA                 , UsrPtr  } |7210:----|
-#{curlopt CURLOPT_FNMATCH_DATA               , UsrPtr  } |7210:----|
-#{curlopt CURLOPT_RESOLVE                    , SList   } |7213:----|
-#{curlopt CURLOPT_TLSAUTH_USERNAME           , CString } |7214:----|
-#{curlopt CURLOPT_TLSAUTH_PASSWORD           , CString } |7214:----|
-#{curlopt CURLOPT_TLSAUTH_TYPE               , CString } |7214:----|
-#{curlopt CURLOPT_TRANSFER_ENCODING          , CLong   } |7216:----|
-#{curlopt CURLOPT_CLOSESOCKETFUNCTION        , FunPtr  } |7217:----|
-#{curlopt CURLOPT_CLOSESOCKETDATA            , UsrPtr  } |7217:----|
-#{curlopt CURLOPT_GSSAPI_DELEGATION          , CLong   } |7220:----|
-#{curlopt CURLOPT_DNS_SERVERS                , CString } |7240:----|
-#{curlopt CURLOPT_ACCEPTTIMEOUT_MS           , CLong   } |7240:----|
-#{curlopt CURLOPT_TCP_KEEPALIVE              , CLong   } |7250:----|
-#{curlopt CURLOPT_TCP_KEEPIDLE               , CLong   } |7250:----|
-#{curlopt CURLOPT_TCP_KEEPINTVL              , CLong   } |7250:----|
-#{curlopt CURLOPT_SSL_OPTIONS                , CLong   } |7250:----|
-#{curlopt CURLOPT_MAIL_AUTH                  , CString } |7250:----|
-
-#{curlopt CURLOPT_WRITEDATA                  , UsrPtr  }
-#{curlopt CURLOPT_READDATA                   , UsrPtr  }
-#{curlopt CURLOPT_HEADERDATA                 , UsrPtr  }
-#{curlopt CURLOPT_RTSPHEADER                 , SList   }
-
-
--------------------------------------------------------------------------------
--- *** CURLipresolve
--------------------------------------------------------------------------------
-#{cconst CURL_IPRESOLVE_WHATEVER, CLong}
-#{cconst CURL_IPRESOLVE_V4      , CLong}
-#{cconst CURL_IPRESOLVE_V6      , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLhttpver
--------------------------------------------------------------------------------
-#{cconst CURL_HTTP_VERSION_NONE, CLong}
-#{cconst CURL_HTTP_VERSION_1_0 , CLong}
-#{cconst CURL_HTTP_VERSION_1_1 , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLrtspreq
--------------------------------------------------------------------------------
-#{cconst CURL_RTSPREQ_NONE         , CLong}
-#{cconst CURL_RTSPREQ_OPTIONS      , CLong}
-#{cconst CURL_RTSPREQ_DESCRIBE     , CLong}
-#{cconst CURL_RTSPREQ_ANNOUNCE     , CLong}
-#{cconst CURL_RTSPREQ_SETUP        , CLong}
-#{cconst CURL_RTSPREQ_PLAY         , CLong}
-#{cconst CURL_RTSPREQ_PAUSE        , CLong}
-#{cconst CURL_RTSPREQ_TEARDOWN     , CLong}
-#{cconst CURL_RTSPREQ_GET_PARAMETER, CLong}
-#{cconst CURL_RTSPREQ_SET_PARAMETER, CLong}
-#{cconst CURL_RTSPREQ_RECORD       , CLong}
-#{cconst CURL_RTSPREQ_RECEIVE      , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLnetrc
--------------------------------------------------------------------------------
-#{cconst CURL_NETRC_IGNORED , CLong}
-#{cconst CURL_NETRC_OPTIONAL, CLong}
-#{cconst CURL_NETRC_REQUIRED, CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLsslver
--------------------------------------------------------------------------------
-#{cconst CURL_SSLVERSION_DEFAULT, CLong}
-#{cconst CURL_SSLVERSION_TLSv1  , CLong}
-#{cconst CURL_SSLVERSION_SSLv2  , CLong}
-#{cconst CURL_SSLVERSION_SSLv3  , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLtlsauth
--------------------------------------------------------------------------------
-#{cconst CURL_TLSAUTH_NONE, CLong}                               |7214:----|
-#{cconst CURL_TLSAUTH_SRP , CLong}                               |7214:----|
-
-
--------------------------------------------------------------------------------
--- *** CURLredir
--------------------------------------------------------------------------------
-#{cconst CURL_REDIR_GET_ALL , CLong}
-#{cconst CURL_REDIR_POST_301, CLong}
-#{cconst CURL_REDIR_POST_302, CLong}
-#{cconst CURL_REDIR_POST_ALL, CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLtimecond
--------------------------------------------------------------------------------
-#{cconst CURL_TIMECOND_NONE        , CLong}
-#{cconst CURL_TIMECOND_IFMODSINCE  , CLong}
-#{cconst CURL_TIMECOND_IFUNMODSINCE, CLong}
-#{cconst CURL_TIMECOND_LASTMOD     , CLong}
-
-
--------------------------------------------------------------------------------
--- ** Functions
--------------------------------------------------------------------------------
-{-# DEPRECATED ccurl_strequal "" #-}
-foreign import ccall "curl_strequal"
-  ccurl_strequal
-    :: Ptr CChar
-    -> Ptr CChar
-    -> IO CInt
-
-
--------------------------------------------------------------------------------
-{-# DEPRECATED ccurl_strnequal "" #-}
-foreign import ccall "curl_strnequal"
-  ccurl_strnequal
-    :: Ptr CChar
-    -> Ptr CChar
-    -> CSize
-    -> IO CInt
-
-
--------------------------------------------------------------------------------
--- ** CURL_forms
--------------------------------------------------------------------------------
-newtype CCURLformoption = CCURLformoption CInt deriving (Eq, Show)
- 
--- #{symbol CURLFORM_COPYNAME      , CURLformoption}
--- #{symbol CURLFORM_PTRNAME       , CURLformoption}
--- #{symbol CURLFORM_NAMELENGTH    , CURLformoption}
--- #{symbol CURLFORM_COPYCONTENTS  , CURLformoption}
--- #{symbol CURLFORM_PTRCONTENTS   , CURLformoption}
--- #{symbol CURLFORM_CONTENTSLENGTH, CURLformoption}
--- #{symbol CURLFORM_FILECONTENT   , CURLformoption}
--- #{symbol CURLFORM_ARRAY         , CURLformoption}
--- #{symbol CURLFORM_FILE          , CURLformoption}
--- #{symbol CURLFORM_BUFFER        , CURLformoption}
--- #{symbol CURLFORM_BUFFERPTR     , CURLformoption}
--- #{symbol CURLFORM_BUFFERLENGTH  , CURLformoption}
--- #{symbol CURLFORM_CONTENTTYPE   , CURLformoption}
--- #{symbol CURLFORM_CONTENTHEADER , CURLformoption}
--- #{symbol CURLFORM_FILENAME      , CURLformoption}
--- #{symbol CURLFORM_END           , CURLformoption}
--- #{symbol CURLFORM_STREAM        , CURLformoption}
-
-
--------------------------------------------------------------------------------
-data CCURL_forms = CCURL_forms
-  { ccurl_forms_option :: CCURLformoption
-  , ccurl_forms_value  :: Ptr CChar
-  } deriving (Show)
-
--- instance Storable CCURL_forms where
---   sizeOf _    = #{size    struct curl_forms}
---   alignment _ = #{alignof struct curl_forms}
---   poke _ _    = undefined
---   peek _      = undefined
-
-
--------------------------------------------------------------------------------
-newtype CCURLformcode = CCURLformcode CInt deriving (Eq, Show)
-
-#{symbol CURL_FORMADD_OK            , CURLformcode}
-#{symbol CURL_FORMADD_MEMORY        , CURLformcode}
-#{symbol CURL_FORMADD_OPTION_TWICE  , CURLformcode}
-#{symbol CURL_FORMADD_NULL          , CURLformcode}
-#{symbol CURL_FORMADD_UNKNOWN_OPTION, CURLformcode}
-#{symbol CURL_FORMADD_INCOMPLETE    , CURLformcode}
-#{symbol CURL_FORMADD_ILLEGAL_ARRAY , CURLformcode}
-#{symbol CURL_FORMADD_DISABLED      , CURLformcode}
-
-
--- ----------------------------------------------------------------------------
--- CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
---                                       struct curl_httppost **last_post,
---                                       ...);
-
-
--------------------------------------------------------------------------------
-type CCURL_formget_callback
-  = Ptr () -> Ptr CChar -> CSize -> IO CSize
-
-foreign import ccall "wrapper"
-  wrap_ccurl_formget_callback
-    :: CCURL_formget_callback
-    -> IO (FunPtr CCURL_formget_callback)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_formget"
-  ccurl_formget
-    :: Ptr CCURL_httppost
-    -> Ptr ()
-    -> FunPtr CCURL_formget_callback
-    -> IO CInt
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_formfree"
-  ccurl_formfree
-    :: Ptr CCURL_httppost
-    -> IO ()
-
-
--------------------------------------------------------------------------------
--- ** Functions
--------------------------------------------------------------------------------
-{-# DEPRECATED ccurl_getenv "" #-}
-foreign import ccall "curl_getenv"
-  ccurl_getenv
-    :: Ptr CChar
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_version"
-  ccurl_version
-    :: IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_escape"
-  ccurl_easy_escape
-    :: Ptr CCURL
-    -> Ptr CChar
-    -> CInt
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_escape"
-  ccurl_escape
-    :: Ptr CChar
-    -> CInt
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_unescape"
-  ccurl_easy_unescape
-    :: Ptr CCURL
-    -> Ptr CChar
-    -> CInt
-    -> Ptr CInt
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_unescape"
-  ccurl_unescape
-    :: Ptr CChar
-    -> CInt
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_free"
-  ccurl_free
-    :: Ptr a
-    -> IO ()
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_global_init"
-  ccurl_global_init
-    :: CLong
-    -> IO CCURLcode
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_global_init_mem"
-  ccurl_global_init_mem
-    :: CLong
-    -> FunPtr CCURL_malloc_callback
-    -> FunPtr CCURL_free_callback
-    -> FunPtr CCURL_realloc_callback
-    -> FunPtr CCURL_strdup_callback
-    -> FunPtr CCURL_calloc_callback
-    -> IO CCURLcode
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_global_cleanup"
-  ccurl_global_cleanup
-    :: IO ()
-
-
--------------------------------------------------------------------------------
--- ** CURL_slist
--------------------------------------------------------------------------------
-data CCURL_slist = CCURL_slist
-  { ccurl_slist_data :: Ptr CChar
-  , ccurl_slist_next :: Ptr CCURL_slist
-  } deriving (Show)
-
-instance Storable CCURL_slist where
-  sizeOf _    = #{size    struct curl_slist}
-  alignment _ = #{alignof struct curl_slist}
-  poke _ _    = undefined
-  peek ptr    = CCURL_slist
-    <$> #{peek struct curl_slist, data} ptr
-    <*> #{peek struct curl_slist, next} ptr
-
- 
--------------------------------------------------------------------------------
--- ** Functions
--------------------------------------------------------------------------------
-foreign import ccall "curl_slist_append"
-  ccurl_slist_append
-    :: Ptr CCURL_slist
-    -> Ptr CChar
-    -> IO (Ptr CCURL_slist)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_slist_free_all"
-  ccurl_slist_free_all
-    :: Ptr CCURL_slist
-    -> IO ()
-
- 
--------------------------------------------------------------------------------
-foreign import ccall "curl_getdate"
-  ccurl_getdate
-    :: Ptr CChar
-    -> Ptr CTime
-    -> IO CTime
-
-
--------------------------------------------------------------------------------
--- ** CURL_certinfo
--------------------------------------------------------------------------------
-data CCURL_certinfo = CCURL_certinfo
-  { ccurl_certinfo_num_of_certs :: CInt
-  , ccurl_certinfo_certinfo     :: Ptr (Ptr CCURL_slist)
-  } deriving (Show)
-
-instance Storable CCURL_certinfo where
-  sizeOf _    = #{size    struct curl_certinfo}
-  alignment _ = #{alignof struct curl_certinfo}
-  poke _ _    = undefined
-  peek ptr    = CCURL_certinfo
-    <$> #{peek struct curl_certinfo, num_of_certs} ptr
-    <*> #{peek struct curl_certinfo, certinfo    } ptr
-
-
--------------------------------------------------------------------------------
--- ** Constants
--------------------------------------------------------------------------------
--- *** CURLinfo
--------------------------------------------------------------------------------
-newtype CCURLinfo'CString = CCURLinfo'CString CInt deriving (Eq, Show)
-newtype CCURLinfo'CDouble = CCURLinfo'CDouble CInt deriving (Eq, Show)
-newtype CCURLinfo'CLong   = CCURLinfo'CLong   CInt deriving (Eq, Show)
-newtype CCURLinfo'SList   = CCURLinfo'SList   CInt deriving (Eq, Show)
-newtype CCURLinfo'CertI   = CCURLinfo'CertI   CInt deriving (Eq, Show)
-
-#define hsc_curlinfo(name, type) \
-  printf("c" #name " :: CCURLinfo'" #type "\n"); \
-  printf("c" #name " =  CCURLinfo'" #type " "); hsc_const(name);
-
-#{curlinfo CURLINFO_EFFECTIVE_URL          , CString}
-#{curlinfo CURLINFO_RESPONSE_CODE          , CLong  }
-#{curlinfo CURLINFO_TOTAL_TIME             , CDouble}
-#{curlinfo CURLINFO_NAMELOOKUP_TIME        , CDouble}
-#{curlinfo CURLINFO_CONNECT_TIME           , CDouble}
-#{curlinfo CURLINFO_PRETRANSFER_TIME       , CDouble}
-#{curlinfo CURLINFO_SIZE_UPLOAD            , CDouble}
-#{curlinfo CURLINFO_SIZE_DOWNLOAD          , CDouble}
-#{curlinfo CURLINFO_SPEED_DOWNLOAD         , CDouble}
-#{curlinfo CURLINFO_SPEED_UPLOAD           , CDouble}
-#{curlinfo CURLINFO_HEADER_SIZE            , CLong  }
-#{curlinfo CURLINFO_REQUEST_SIZE           , CLong  }
-#{curlinfo CURLINFO_SSL_VERIFYRESULT       , CLong  }
-#{curlinfo CURLINFO_FILETIME               , CLong  }
-#{curlinfo CURLINFO_CONTENT_LENGTH_DOWNLOAD, CDouble}
-#{curlinfo CURLINFO_CONTENT_LENGTH_UPLOAD  , CDouble}
-#{curlinfo CURLINFO_STARTTRANSFER_TIME     , CDouble}
-#{curlinfo CURLINFO_CONTENT_TYPE           , CString}
-#{curlinfo CURLINFO_REDIRECT_TIME          , CDouble}
-#{curlinfo CURLINFO_REDIRECT_COUNT         , CLong  }
-#{curlinfo CURLINFO_PRIVATE                , CString}
-#{curlinfo CURLINFO_HTTP_CONNECTCODE       , CLong  }
-#{curlinfo CURLINFO_HTTPAUTH_AVAIL         , CLong  }
-#{curlinfo CURLINFO_PROXYAUTH_AVAIL        , CLong  }
-#{curlinfo CURLINFO_OS_ERRNO               , CLong  }
-#{curlinfo CURLINFO_NUM_CONNECTS           , CLong  }
-#{curlinfo CURLINFO_SSL_ENGINES            , SList  }
-#{curlinfo CURLINFO_COOKIELIST             , SList  }
-#{curlinfo CURLINFO_LASTSOCKET             , CLong  }
-#{curlinfo CURLINFO_FTP_ENTRY_PATH         , CString}
-#{curlinfo CURLINFO_REDIRECT_URL           , CString}
-#{curlinfo CURLINFO_PRIMARY_IP             , CString}
-#{curlinfo CURLINFO_APPCONNECT_TIME        , CDouble}
-#{curlinfo CURLINFO_CERTINFO               , CertI  }
-#{curlinfo CURLINFO_CONDITION_UNMET        , CLong  }
-#{curlinfo CURLINFO_RTSP_SESSION_ID        , CString}
-#{curlinfo CURLINFO_RTSP_CLIENT_CSEQ       , CLong  }
-#{curlinfo CURLINFO_RTSP_SERVER_CSEQ       , CLong  }
-#{curlinfo CURLINFO_RTSP_CSEQ_RECV         , CLong  }
-#{curlinfo CURLINFO_PRIMARY_PORT           , CLong  } |7210:----|
-#{curlinfo CURLINFO_LOCAL_IP               , CString} |7210:----|
-#{curlinfo CURLINFO_LOCAL_PORT             , CLong  } |7210:----|
-
-
--------------------------------------------------------------------------------
--- *** CURLclosepol
--------------------------------------------------------------------------------
-#{cconst CURLCLOSEPOLICY_NONE               , CLong}
-#{cconst CURLCLOSEPOLICY_OLDEST             , CLong}
-#{cconst CURLCLOSEPOLICY_LEAST_RECENTLY_USED, CLong}
-#{cconst CURLCLOSEPOLICY_LEAST_TRAFFIC      , CLong}
-#{cconst CURLCLOSEPOLICY_SLOWEST            , CLong}
-#{cconst CURLCLOSEPOLICY_CALLBACK           , CLong}
-
-
--------------------------------------------------------------------------------
--- *** CURLglobal
--------------------------------------------------------------------------------
-#{cconst CURL_GLOBAL_SSL    , CLong}
-#{cconst CURL_GLOBAL_WIN32  , CLong}
-#{cconst CURL_GLOBAL_ALL    , CLong}
-#{cconst CURL_GLOBAL_NOTHING, CLong}
-#{cconst CURL_GLOBAL_DEFAULT, CLong}
-
-
--------------------------------------------------------------------------------
--- ** Share interface
--------------------------------------------------------------------------------
-newtype CCURL_lock_data = CCURL_lock_data CInt deriving (Eq, Show)
-
-#{symbol CURL_LOCK_DATA_COOKIE     , CURL_lock_data}
-#{symbol CURL_LOCK_DATA_DNS        , CURL_lock_data}
-#{symbol CURL_LOCK_DATA_SSL_SESSION, CURL_lock_data}
-#{symbol CURL_LOCK_DATA_CONNECT    , CURL_lock_data}
- 
-
--------------------------------------------------------------------------------
-newtype CCURL_lock_access = CCURL_lock_access CInt deriving (Eq, Show)
-
-#{symbol CURL_LOCK_ACCESS_NONE  , CURL_lock_access}
-#{symbol CURL_LOCK_ACCESS_SHARED, CURL_lock_access}
-#{symbol CURL_LOCK_ACCESS_SINGLE, CURL_lock_access}
-
-
--------------------------------------------------------------------------------
-type CCURL_lock_function
-  = Ptr CCURL -> CCURL_lock_data -> CCURL_lock_access -> Ptr () -> IO ()
-
-foreign import ccall "wrapper"
-  wrap_ccurl_lock_function
-    :: CCURL_lock_function
-    -> IO (FunPtr CCURL_lock_function)
-
-
--------------------------------------------------------------------------------
-type CCURL_unlock_function
-  = Ptr CCURL -> CCURL_lock_data -> Ptr () -> IO ()
-
-foreign import ccall "wrapper"
-  wrap_ccurl_unlock_function
-    :: CCURL_unlock_function
-    -> IO (FunPtr CCURL_unlock_function)
-
-
--------------------------------------------------------------------------------
-data CCURLSH
-
- 
--------------------------------------------------------------------------------
-newtype CCURLSHcode = CCURLSHcode CInt deriving (Eq, Show)
-
-#{symbol CURLSHE_OK          , CURLSHcode}
-#{symbol CURLSHE_BAD_OPTION  , CURLSHcode}
-#{symbol CURLSHE_IN_USE      , CURLSHcode}
-#{symbol CURLSHE_INVALID     , CURLSHcode}
-#{symbol CURLSHE_NOMEM       , CURLSHcode}
-#{symbol CURLSHE_NOT_BUILT_IN, CURLSHcode} |7230:----|
-
-
--------------------------------------------------------------------------------
-newtype CCURLSHoption'Lock    = CCURLSHoption'Lock    CInt deriving (Eq, Show)
-newtype CCURLSHoption'FLOCK   = CCURLSHoption'FLOCK   CInt deriving (Eq, Show)
-newtype CCURLSHoption'FUNLOCK = CCURLSHoption'FUNLOCK CInt deriving (Eq, Show)
-newtype CCURLSHoption'UsrPtr  = CCURLSHoption'UsrPtr  CInt deriving (Eq, Show)
-
-#define hsc_curlshopt(name, type) \
-  printf("c" #name " :: CCURLSHoption'" #type "\n"); \
-  printf("c" #name " =  CCURLSHoption'" #type " "); hsc_const(name);
-
-#{curlshopt CURLSHOPT_SHARE     , Lock   }
-#{curlshopt CURLSHOPT_UNSHARE   , Lock   }
-#{curlshopt CURLSHOPT_LOCKFUNC  , FLOCK  }
-#{curlshopt CURLSHOPT_UNLOCKFUNC, FUNLOCK}
-#{curlshopt CURLSHOPT_USERDATA  , UsrPtr }
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_share_init"
-  ccurl_share_init
-    :: IO (Ptr CCURLSH)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_share_setopt"
-  ccurl_share_setopt'Lock   
-    :: Ptr CCURLSH
-    -> CCURLSHoption'Lock   
-    -> CCURL_lock_data
-    -> IO CCURLSHcode
-
-foreign import ccall "curl_share_setopt"
-  ccurl_share_setopt'FLOCK
-    :: Ptr CCURLSH
-    -> CCURLSHoption'FLOCK
-    -> FunPtr CCURL_lock_function
-    -> IO CCURLSHcode
-
-foreign import ccall "curl_share_setopt"
-  ccurl_share_setopt'FUNLOCK
-    :: Ptr CCURLSH
-    -> CCURLSHoption'FUNLOCK
-    -> FunPtr CCURL_unlock_function
-    -> IO CCURLSHcode
-
-foreign import ccall "curl_share_setopt"
-  ccurl_share_setopt'UsrPtr 
-    :: Ptr CCURLSH
-    -> CCURLSHoption'UsrPtr 
-    -> Ptr ()
-    -> IO CCURLSHcode
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_share_cleanup"
-  ccurl_share_cleanup
-    :: Ptr CCURLSH
-    -> IO CCURLSHcode
-
-
--------------------------------------------------------------------------------
--- ** CURL_version_info
--------------------------------------------------------------------------------
-newtype CCURLversion = CCURLversion CInt deriving (Eq, Show)
-
-instance Storable CCURLversion where
-  sizeOf _    = #{size    CURLversion}
-  alignment _ = #{alignof CURLversion}
-  poke _ _    = undefined
-  peek ptr    = CCURLversion <$> peek (castPtr ptr)
-
-#{symbol CURLVERSION_FIRST , CURLversion}
-#{symbol CURLVERSION_SECOND, CURLversion}
-#{symbol CURLVERSION_THIRD , CURLversion}
-#{symbol CURLVERSION_FOURTH, CURLversion}
-#{symbol CURLVERSION_NOW   , CURLversion}
-
-
--------------------------------------------------------------------------------
-data CCURL_version_info_data = CCURL_version_info_data
-  { ccurl_version_info_data_age             :: CCURLversion
-  , ccurl_version_info_data_version         :: Ptr CChar
-  , ccurl_version_info_data_version_num     :: CUInt
-  , ccurl_version_info_data_host            :: Ptr CChar
-  , ccurl_version_info_data_features        :: CInt
-  , ccurl_version_info_data_ssl_version     :: Ptr CChar
-  , ccurl_version_info_data_ssl_version_num :: CLong
-  , ccurl_version_info_data_libz_version    :: Ptr CChar
-  , ccurl_version_info_data_protocols       :: Ptr (Ptr CChar)
-  , ccurl_version_info_data_ares            :: Ptr CChar
-  , ccurl_version_info_data_ares_num        :: CInt
-  , ccurl_version_info_data_libidn          :: Ptr CChar
-  , ccurl_version_info_data_iconv_ver_num   :: CInt
-  , ccurl_version_info_data_libssh_version  :: Ptr CChar
-  } deriving (Show)
-
-instance Storable CCURL_version_info_data where
-  sizeOf _    = #{size    curl_version_info_data}
-  alignment _ = #{alignof curl_version_info_data}
-  poke _ _    = undefined
-  peek ptr    = CCURL_version_info_data
-    <$> #{peek curl_version_info_data, age            } ptr
-    <*> #{peek curl_version_info_data, version        } ptr
-    <*> #{peek curl_version_info_data, version_num    } ptr
-    <*> #{peek curl_version_info_data, host           } ptr
-    <*> #{peek curl_version_info_data, features       } ptr
-    <*> #{peek curl_version_info_data, ssl_version    } ptr
-    <*> #{peek curl_version_info_data, ssl_version_num} ptr
-    <*> #{peek curl_version_info_data, libz_version   } ptr
-    <*> #{peek curl_version_info_data, protocols      } ptr
-    <*> #{peek curl_version_info_data, ares           } ptr
-    <*> #{peek curl_version_info_data, ares_num       } ptr
-    <*> #{peek curl_version_info_data, libidn         } ptr
-    <*> #{peek curl_version_info_data, iconv_ver_num  } ptr
-    <*> #{peek curl_version_info_data, libssh_version } ptr
-
-
--------------------------------------------------------------------------------
-#{cconst CURL_VERSION_IPV6        , CInt}
-#{cconst CURL_VERSION_KERBEROS4   , CInt}
-#{cconst CURL_VERSION_SSL         , CInt}
-#{cconst CURL_VERSION_LIBZ        , CInt}
-#{cconst CURL_VERSION_NTLM        , CInt}
-#{cconst CURL_VERSION_GSSNEGOTIATE, CInt}
-#{cconst CURL_VERSION_DEBUG       , CInt}
-#{cconst CURL_VERSION_ASYNCHDNS   , CInt}
-#{cconst CURL_VERSION_SPNEGO      , CInt}
-#{cconst CURL_VERSION_LARGEFILE   , CInt}
-#{cconst CURL_VERSION_IDN         , CInt}
-#{cconst CURL_VERSION_SSPI        , CInt}
-#{cconst CURL_VERSION_CONV        , CInt}
-#{cconst CURL_VERSION_CURLDEBUG   , CInt}
-#{cconst CURL_VERSION_TLSAUTH_SRP , CInt} |7214:----|
-#{cconst CURL_VERSION_NTLM_WB     , CInt} |7220:----|
-
- 
--------------------------------------------------------------------------------
--- ** Functions
--------------------------------------------------------------------------------
-foreign import ccall "curl_version_info"
-  ccurl_version_info
-    :: CCURLversion
-    -> IO (Ptr CCURL_version_info_data)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_strerror"
-  ccurl_easy_strerror
-    :: CCURLcode
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_share_strerror"
-  ccurl_share_strerror
-    :: CCURLSHcode
-    -> IO (Ptr CChar)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_pause"
-  ccurl_easy_pause
-    :: Ptr CCURL
-    -> CInt
-    -> IO CCURLcode
- 
-#{cconst CURLPAUSE_RECV     , CInt}
-#{cconst CURLPAUSE_RECV_CONT, CInt}
-#{cconst CURLPAUSE_SEND     , CInt}
-#{cconst CURLPAUSE_SEND_CONT, CInt}
-#{cconst CURLPAUSE_ALL      , CInt}
-#{cconst CURLPAUSE_CONT     , CInt}
-
-
--------------------------------------------------------------------------------
--- * Definitions from \"curl/easy.h\"
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_init"
-  ccurl_easy_init
-    :: IO (Ptr CCURL)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'CLong
-    :: Ptr CCURL
-    -> CCURLoption'CLong
-    -> CLong
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'Int64
-    :: Ptr CCURL
-    -> CCURLoption'Int64
-    -> CCURL_off_t
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'CString
-    :: Ptr CCURL
-    -> CCURLoption'CString
-    -> Ptr CChar
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'CFile
-    :: Ptr CCURL
-    -> CCURLoption'CFile
-    -> Ptr CFile
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'SList
-    :: Ptr CCURL
-    -> CCURLoption'SList
-    -> Ptr CCURL_slist
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'HTTPP
-    :: Ptr CCURL
-    -> CCURLoption'HTTPP
-    -> Ptr CCURL_httppost
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'CURLSH
-    :: Ptr CCURL
-    -> CCURLoption'CURLSH
-    -> Ptr CCURLSH
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'UsrPtr
-    :: Ptr CCURL
-    -> CCURLoption'UsrPtr
-    -> Ptr ()
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_setopt"
-  ccurl_easy_setopt'FunPtr
-    :: Ptr CCURL
-    -> CCURLoption'FunPtr
-    -> FunPtr a
-    -> IO CCURLcode
-
-#define hsc_setFunPtrAlias(fn, un, ln) \
-  printf("ccurl_easy_setopt'" #fn "\n"); \
-  printf("  :: Ptr CCURL -> FunPtr CCURL_" #ln "_callback -> IO CCURLcode\n");\
-  printf("ccurl_easy_setopt'" #fn " curl fptr\n"); \
-  printf("  = ccurl_easy_setopt'FunPtr curl cCURLOPT_" #un "FUNCTION fptr");
-
-#{setFunPtrAlias FWRITE      , WRITE      , write      }
-#{setFunPtrAlias FREAD       , READ       , read       }
-#{setFunPtrAlias FPROGRESS   , PROGRESS   , progress   }
-#{setFunPtrAlias FHEADER     , HEADER     , write      }
-#{setFunPtrAlias FDEBUG      , DEBUG      , debug      }
-#{setFunPtrAlias FSSLCTX     , SSL_CTX_   , ssl_ctx    }
-#{setFunPtrAlias FIOCTL      , IOCTL      , ioctl      }
-#{setFunPtrAlias FCONVFROM   , CONV_FROM_NETWORK_, conv}
-#{setFunPtrAlias FCONVTO     , CONV_TO_NETWORK_  , conv}
-#{setFunPtrAlias FCONVUTF8   , CONV_FROM_UTF8_   , conv}
-#{setFunPtrAlias FSOCKOPT    , SOCKOPT    , sockopt    }
-#{setFunPtrAlias FOPENSOCKET , OPENSOCKET , opensocket }
-#{setFunPtrAlias FSEEK       , SEEK       , seek       }
-#{setFunPtrAlias FSSHKEY     , SSH_KEY    , sshkey     }
-#{setFunPtrAlias FINTERLEAVE , INTERLEAVE , write      }
-#{setFunPtrAlias FCHUNKBGN   , CHUNK_BGN_ , chunk_bgn  } |7210:----|
-#{setFunPtrAlias FCHUNKEND   , CHUNK_END_ , chunk_end  } |7210:----|
-#{setFunPtrAlias FFNMATCH    , FNMATCH_   , fnmatch    } |7210:----|
-#{setFunPtrAlias FCLOSESOCKET, CLOSESOCKET, closesocket} |7217:----|
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_perform"
-  ccurl_easy_perform
-    :: Ptr CCURL
-    -> IO CCURLcode
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_cleanup"
-  ccurl_easy_cleanup
-    :: Ptr CCURL
-    -> IO ()
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_getinfo"
-  ccurl_easy_getinfo'CString
-    :: Ptr CCURL
-    -> CCURLinfo'CString
-    -> Ptr (Ptr CChar)
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_getinfo"
-  ccurl_easy_getinfo'CDouble
-    :: Ptr CCURL
-    -> CCURLinfo'CDouble
-    -> Ptr CDouble
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_getinfo"
-  ccurl_easy_getinfo'CLong
-    :: Ptr CCURL
-    -> CCURLinfo'CLong
-    -> Ptr CLong
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_getinfo"
-  ccurl_easy_getinfo'SList
-    :: Ptr CCURL
-    -> CCURLinfo'SList
-    -> Ptr (Ptr CCURL_slist)
-    -> IO CCURLcode
-
-foreign import ccall "curl_easy_getinfo"
-  ccurl_easy_getinfo'CertI
-    :: Ptr CCURL
-    -> CCURLinfo'CertI
-    -> Ptr (Ptr CCURL_certinfo)
-    -> IO CCURLcode
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_duphandle"
-  ccurl_easy_duphandle
-    :: Ptr CCURL
-    -> IO (Ptr CCURL)
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_reset"
-  ccurl_easy_reset
-    :: Ptr CCURL
-    -> IO ()
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_recv"
-  ccurl_easy_recv
-    :: Ptr CCURL
-    -> Ptr a
-    -> CSize
-    -> Ptr CSize
-    -> IO CCURLcode
-
-
--------------------------------------------------------------------------------
-foreign import ccall "curl_easy_send"
-  ccurl_easy_send
-    :: Ptr CCURL
-    -> Ptr a
-    -> CSize
-    -> Ptr CSize
-    -> IO CCURLcode
-
- 
--------------------------------------------------------------------------------
--- * Definitions from \"curl/multi.h\"
--------------------------------------------------------------------------------
--- todo
-
diff --git a/src/Network/Curlhs/Core.hs b/src/Network/Curlhs/Core.hs
deleted file mode 100644
--- a/src/Network/Curlhs/Core.hs
+++ /dev/null
@@ -1,122 +0,0 @@
--------------------------------------------------------------------------------
--- |
--- Module      :  Network.Curlhs.Core
--- Copyright   :  Copyright © 2012 Krzysztof Kardzis
--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)
--- 
--- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
---
--- Module "Network.Curlhs.Core" provides a mid-level interface to @libcurl@.
--- For a direct low-level bindings go to "Network.Curlhs.Base".
---
--- API of this module follows the API of @libcurl@ as defined in version
--- 7.25.0 of the library. But it also depends on the version of @libcurl@
--- that is used during compilation of the @curlhs@ package. It is possible
--- to use @curlhs@ with older versions of @libcurl@, just keep in mind
--- that some features may not be available then.
---
--- There is not much documentation here, maybe the future will change that,
--- but for now please use the original @libcurl@ documentation. API provided
--- here follows the original API, so this shouldn't be a big problem.
--- Documentation about @libcurl@ and/or its particular functions may be
--- found in manual pages, which are available among others at the @libcurl@
--- project site (please refer to <http://curl.haxx.se/libcurl/>).
--- 
--- Exposed API is still somewhat incomplete, but is usable.
--- Work on the rest are in progress.
---
--- Simple example:
---
--- > import qualified Data.ByteString.Char8 as BS
--- > import Data.IORef (newIORef, readIORef, atomicModifyIORef)
--- > import Control.Exception (bracket)
--- > import Network.Curlhs.Core
--- > 
--- > curlGET :: BS.ByteString -> IO BS.ByteString
--- > curlGET url = do
--- >   buff <- newIORef BS.empty
--- >   bracket (curl_easy_init) (curl_easy_cleanup) $ \curl -> do
--- >     curl_easy_setopt curl
--- >       [ CURLOPT_URL     url
--- >       , CURLOPT_VERBOSE True
--- >       , CURLOPT_WRITEFUNCTION $ Just (memwrite buff)
--- >       ]
--- >     curl_easy_perform curl
--- >   readIORef buff
--- > 
--- > memwrite buff newbs = atomicModifyIORef buff $ \oldbuff ->
--- >   (BS.append oldbuff newbs, CURL_WRITEFUNC_OK)
---
--------------------------------------------------------------------------------
-
-module Network.Curlhs.Core (
-
-  -- * Global interface
-
-  -- ** Version info
-    curl_version
-  , curl_version_info
-  , CURL_version_info_data (..)
-  , CURL_version (..)
-
-  -- ** Error codes
-  -- |  More about error codes in libcurl on
-  --    <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
-  , curl_easy_strerror
-  , CURLcode (..)
-
-  -- * Easy interface
-  -- | See <http://curl.haxx.se/libcurl/c/libcurl-easy.html>
-  --   for easy interface overview.
-
-  -- ** Init, reset, cleanup
-  , curl_easy_init
-  , curl_easy_reset
-  , curl_easy_cleanup
-  , CURL
-
-  -- ** Transfer
-  , curl_easy_perform
-
-  -- ** Get info
-  , curl_easy_getinfo
-  , CURLinfo (..)
-
-  -- ** Set options
-  , curl_easy_setopt
-  , CURLoption (..)
-
-  -- *** Callbacks
-  , CURL_write_callback, CURL_write_response (..)
-  , CURL_read_callback , CURL_read_response  (..)
-
-  -- *** Constants
-  , CURLproto     (..)
-  , CURLproxy     (..)
-  , CURLnetrc     (..)
-  , CURLauth      (..)
-  , CURLtlsauth   (..) |7214:----|
-  , CURLredir     (..)
-  , CURLhttpver   (..)
-  , CURLftpcreate (..)
-  , CURLftpauth   (..)
-  , CURLftpssl    (..)
-  , CURLftpmethod (..)
-  , CURLrtspreq   (..)
-  , CURLtimecond  (..)
-  , CURLclosepol  (..)
-  , CURLipresolve (..)
-  , CURLusessl    (..)
-  , CURLsslver    (..)
-  , CURLsslopt    (..) |7250:----|
-  , CURLgssapi    (..) |7220:----|
-  , CURLsshauth   (..)
-
-  ) where
-
-import Network.Curlhs.Types
-import Network.Curlhs.Easy
-
diff --git a/src/Network/Curlhs/Easy.hs b/src/Network/Curlhs/Easy.hs
deleted file mode 100644
--- a/src/Network/Curlhs/Easy.hs
+++ /dev/null
@@ -1,284 +0,0 @@
--------------------------------------------------------------------------------
--- |
--- Module      :  Network.Curlhs.Easy
--- Copyright   :  Copyright © 2012 Krzysztof Kardzis
--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)
--- 
--- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
--------------------------------------------------------------------------------
-
-module Network.Curlhs.Easy
-  ( curl_version
-  , curl_version_info
-  , curl_easy_strerror
-  , curl_easy_init
-  , curl_easy_reset
-  , curl_easy_cleanup
-  , curl_easy_perform
-  , curl_easy_getinfo
-  , curl_easy_setopt
-  ) where
-
-import Foreign.Marshal.Alloc (alloca)
-import Foreign.Marshal.Utils (toBool)
-import Foreign.Storable      (peek, sizeOf)
-import Foreign.C.String      (peekCString)
-import Foreign.C.Types       (CChar, CInt)
-import Foreign.Ptr           (Ptr, nullPtr, plusPtr)
-
-import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
-import Data.Time.Clock       (UTCTime)
-import Data.Maybe            (mapMaybe)
-import Data.Bits             ((.&.))
-import Data.IORef            (newIORef)
-
-import Control.Applicative   ((<$>), (<*>))
-import Control.Exception     (throwIO)
-
-import Network.Curlhs.Errors
-import Network.Curlhs.Setopt
-import Network.Curlhs.Types
-import Network.Curlhs.Base
-
-
--------------------------------------------------------------------------------
--- | Returns the libcurl version string
---   (<http://curl.haxx.se/libcurl/c/curl_version.html>).
--------------------------------------------------------------------------------
-curl_version :: IO String
-curl_version = ccurl_version >>= peekCString
-
-
--------------------------------------------------------------------------------
--- | Returns run-time libcurl version info
---   (<http://curl.haxx.se/libcurl/c/curl_version_info.html>).
--------------------------------------------------------------------------------
-curl_version_info :: IO CURL_version_info_data
-curl_version_info = ccurl_version_info cCURLVERSION_NOW >>= peek >>=
-  \cval -> CURL_version_info_data
-    <$> (peekCString      $ ccurl_version_info_data_version         cval)
-    <*> (peekCIntegral    $ ccurl_version_info_data_version_num     cval)
-    <*> (peekCString      $ ccurl_version_info_data_host            cval)
-    <*> (peekCFeatures    $ ccurl_version_info_data_features        cval)
-    <*> (peekCStringMaybe $ ccurl_version_info_data_ssl_version     cval)
-    <*> (peekCIntegral    $ ccurl_version_info_data_ssl_version_num cval)
-    <*> (peekCStringMaybe $ ccurl_version_info_data_libz_version    cval)
-    <*> (peekCStringList  $ ccurl_version_info_data_protocols       cval)
-    <*> (peekCStringMaybe $ ccurl_version_info_data_ares            cval)
-    <*> (peekCIntegral    $ ccurl_version_info_data_ares_num        cval)
-    <*> (peekCStringMaybe $ ccurl_version_info_data_libidn          cval)
-    <*> (peekCIntegral    $ ccurl_version_info_data_iconv_ver_num   cval)
-    <*> (peekCStringMaybe $ ccurl_version_info_data_libssh_version  cval)
-
-peekCStringList :: Ptr (Ptr CChar) -> IO [String]
-peekCStringList ptr = peek ptr >>= \cstring ->
-  if (cstring == nullPtr) then return [] else do
-    let size = sizeOf (undefined :: Ptr CChar)
-    strings <- peekCStringList (plusPtr ptr size)
-    string  <- peekCString cstring
-    return (string : strings)
-
-peekCStringMaybe :: Ptr CChar -> IO (Maybe String)
-peekCStringMaybe ptr = if (ptr /= nullPtr)
-  then Just <$> peekCString ptr
-  else return Nothing
-
-peekCIntegral :: (Num h, Integral c) => c -> IO h
-peekCIntegral = return . fromIntegral
-
-peekCFeatures :: CInt -> IO [CURL_version]
-peekCFeatures mask =
-  return $ mapMaybe (\(v, b) -> if (mask .&. b == 0) then Nothing else Just v)
-    [ (CURL_VERSION_IPV6        , cCURL_VERSION_IPV6        )
-    , (CURL_VERSION_KERBEROS4   , cCURL_VERSION_KERBEROS4   )
-    , (CURL_VERSION_SSL         , cCURL_VERSION_SSL         )
-    , (CURL_VERSION_LIBZ        , cCURL_VERSION_LIBZ        )
-    , (CURL_VERSION_NTLM        , cCURL_VERSION_NTLM        )
-    , (CURL_VERSION_GSSNEGOTIATE, cCURL_VERSION_GSSNEGOTIATE)
-    , (CURL_VERSION_DEBUG       , cCURL_VERSION_DEBUG       )
-    , (CURL_VERSION_ASYNCHDNS   , cCURL_VERSION_ASYNCHDNS   )
-    , (CURL_VERSION_SPNEGO      , cCURL_VERSION_SPNEGO      )
-    , (CURL_VERSION_LARGEFILE   , cCURL_VERSION_LARGEFILE   )
-    , (CURL_VERSION_IDN         , cCURL_VERSION_IDN         )
-    , (CURL_VERSION_SSPI        , cCURL_VERSION_SSPI        )
-    , (CURL_VERSION_CONV        , cCURL_VERSION_CONV        )
-    , (CURL_VERSION_CURLDEBUG   , cCURL_VERSION_CURLDEBUG   )
-    , (CURL_VERSION_TLSAUTH_SRP , cCURL_VERSION_TLSAUTH_SRP ) |7214:----|
-    , (CURL_VERSION_NTLM_WB     , cCURL_VERSION_NTLM_WB     ) |7220:----|
-    ]
-
-
--------------------------------------------------------------------------------
--- | Start a libcurl easy session
---   (<http://curl.haxx.se/libcurl/c/curl_easy_init.html>).
--------------------------------------------------------------------------------
-curl_easy_init :: IO CURL
-curl_easy_init = ccurl_easy_init >>= \ccurl -> if (ccurl == nullPtr)
-  then throwIO CURLE_FAILED_INIT
-  else CURL ccurl
-    <$> newIORef Nothing
-    <*> newIORef Nothing
-
-
--------------------------------------------------------------------------------
--- | Reset all options of a libcurl session handle
---   (<http://curl.haxx.se/libcurl/c/curl_easy_reset.html>).
--------------------------------------------------------------------------------
-curl_easy_reset :: CURL -> IO ()
-curl_easy_reset curl =
-  ccurl_easy_reset (ccurlptr curl) >> freeCallbacks curl
-
-
--------------------------------------------------------------------------------
--- | End a libcurl easy session
---   (<http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html>).
--------------------------------------------------------------------------------
-curl_easy_cleanup :: CURL -> IO ()
-curl_easy_cleanup curl =
-  ccurl_easy_cleanup (ccurlptr curl) >> freeCallbacks curl
-
-
--------------------------------------------------------------------------------
--- | Perform a file transfer
---   (<http://curl.haxx.se/libcurl/c/curl_easy_perform.html>).
--------------------------------------------------------------------------------
-curl_easy_perform :: CURL -> IO ()
-curl_easy_perform curl = withCODE $ ccurl_easy_perform (ccurlptr curl)
-
-
--------------------------------------------------------------------------------
--- | Extract information from a curl handle
---   (<http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html>).
--------------------------------------------------------------------------------
-curl_easy_getinfo :: CURL -> IO CURLinfo
-curl_easy_getinfo curl = let ccurl = ccurlptr curl in CURLinfo
-  <$> getinfo'String   ccurl cCURLINFO_EFFECTIVE_URL
-  <*> getinfo'RespCode ccurl cCURLINFO_RESPONSE_CODE
-  <*> getinfo'RespCode ccurl cCURLINFO_HTTP_CONNECTCODE
-  <*> getinfo'FileTime ccurl cCURLINFO_FILETIME
-  <*> getinfo'Double   ccurl cCURLINFO_TOTAL_TIME
-  <*> getinfo'Double   ccurl cCURLINFO_NAMELOOKUP_TIME
-  <*> getinfo'Double   ccurl cCURLINFO_CONNECT_TIME
-  <*> getinfo'Double   ccurl cCURLINFO_APPCONNECT_TIME
-  <*> getinfo'Double   ccurl cCURLINFO_PRETRANSFER_TIME
-  <*> getinfo'Double   ccurl cCURLINFO_STARTTRANSFER_TIME
-  <*> getinfo'Double   ccurl cCURLINFO_REDIRECT_TIME
-  <*> getinfo'Int      ccurl cCURLINFO_REDIRECT_COUNT
-  <*> getinfo'MString  ccurl cCURLINFO_REDIRECT_URL
-  <*> getinfo'Double   ccurl cCURLINFO_SIZE_UPLOAD
-  <*> getinfo'Double   ccurl cCURLINFO_SIZE_DOWNLOAD
-  <*> getinfo'Double   ccurl cCURLINFO_SPEED_DOWNLOAD
-  <*> getinfo'Double   ccurl cCURLINFO_SPEED_UPLOAD
-  <*> getinfo'Int      ccurl cCURLINFO_HEADER_SIZE
-  <*> getinfo'Int      ccurl cCURLINFO_REQUEST_SIZE
-  <*> getinfo'Int      ccurl cCURLINFO_SSL_VERIFYRESULT
-  <*> getinfo'SList    ccurl cCURLINFO_SSL_ENGINES
-  <*> getinfo'ContentL ccurl cCURLINFO_CONTENT_LENGTH_DOWNLOAD
-  <*> getinfo'ContentL ccurl cCURLINFO_CONTENT_LENGTH_UPLOAD
-  <*> getinfo'MString  ccurl cCURLINFO_CONTENT_TYPE
---  <*> getinfo'String   ccurl cCURLINFO_PRIVATE
-  <*> getinfo'CurlAuth ccurl cCURLINFO_HTTPAUTH_AVAIL
-  <*> getinfo'CurlAuth ccurl cCURLINFO_PROXYAUTH_AVAIL
-  <*> getinfo'Int      ccurl cCURLINFO_OS_ERRNO
-  <*> getinfo'Int      ccurl cCURLINFO_NUM_CONNECTS
-  <*> getinfo'String   ccurl cCURLINFO_PRIMARY_IP
-  <*> getinfo'Int      ccurl cCURLINFO_PRIMARY_PORT
-  <*> getinfo'String   ccurl cCURLINFO_LOCAL_IP
-  <*> getinfo'Int      ccurl cCURLINFO_LOCAL_PORT
-  <*> getinfo'SList    ccurl cCURLINFO_COOKIELIST
-  <*> getinfo'Socket   ccurl cCURLINFO_LASTSOCKET
-  <*> getinfo'MString  ccurl cCURLINFO_FTP_ENTRY_PATH
-  <*> getinfo'CertInfo ccurl cCURLINFO_CERTINFO
-  <*> getinfo'TimeCond ccurl cCURLINFO_CONDITION_UNMET
-  <*> getinfo'MString  ccurl cCURLINFO_RTSP_SESSION_ID
-  <*> getinfo'Int      ccurl cCURLINFO_RTSP_CLIENT_CSEQ
-  <*> getinfo'Int      ccurl cCURLINFO_RTSP_SERVER_CSEQ
-  <*> getinfo'Int      ccurl cCURLINFO_RTSP_CSEQ_RECV
-
-getinfo'String :: Ptr CCURL -> CCURLinfo'CString -> IO String
-getinfo'String ccurl cinfo = alloca $ \ptr -> do
-  withCODE $ ccurl_easy_getinfo'CString ccurl cinfo ptr
-  peek ptr >>= peekCString
-
-getinfo'MString :: Ptr CCURL -> CCURLinfo'CString -> IO (Maybe String)
-getinfo'MString ccurl cinfo = alloca $ \ptr -> do
-  withCODE $ ccurl_easy_getinfo'CString ccurl cinfo ptr
-  peek ptr >>= \csptr -> if (csptr /= nullPtr)
-    then Just <$> peekCString csptr
-    else return Nothing
-
-getinfo'Double :: Ptr CCURL -> CCURLinfo'CDouble -> IO Double
-getinfo'Double ccurl cinfo = alloca $ \ptr -> do
-  withCODE $ ccurl_easy_getinfo'CDouble ccurl cinfo ptr
-  realToFrac <$> peek ptr
-
-getinfo'ContentL :: Ptr CCURL -> CCURLinfo'CDouble -> IO (Maybe Double)
-getinfo'ContentL ccurl cinfo = getinfo'Double ccurl cinfo >>= \v ->
-  return $ if (v == (-1)) then Nothing else Just v
-
-getinfo'SList :: Ptr CCURL -> CCURLinfo'SList -> IO [String]
-getinfo'SList ccurl cinfo = alloca $ \ptr -> do
-  withCODE $ ccurl_easy_getinfo'SList ccurl cinfo ptr
-  peek ptr >>= \slist -> do
-    strings <- peek'CCURL_slist slist
-    ccurl_slist_free_all slist
-    return strings
-
-getinfo'CertInfo :: Ptr CCURL -> CCURLinfo'CertI -> IO [[String]]
-getinfo'CertInfo ccurl cinfo = alloca $ \ptr -> do
-  withCODE $ ccurl_easy_getinfo'CertI ccurl cinfo ptr
-  peek ptr >>= peek'CCURL_certinfo
-
-getinfo'Int :: Ptr CCURL -> CCURLinfo'CLong -> IO Int
-getinfo'Int ccurl cinfo = alloca $ \ptr -> do
-  withCODE $ ccurl_easy_getinfo'CLong ccurl cinfo ptr
-  fromIntegral <$> peek ptr
-
-getinfo'RespCode :: Ptr CCURL -> CCURLinfo'CLong -> IO (Maybe Int)
-getinfo'RespCode ccurl cinfo = getinfo'Int ccurl cinfo >>= \v ->
-  return $ if (v == 0) then Nothing else Just v
-
-getinfo'FileTime :: Ptr CCURL -> CCURLinfo'CLong -> IO (Maybe UTCTime)
-getinfo'FileTime ccurl cinfo = getinfo'Int ccurl cinfo >>= \v ->
-  return $ if (v == (-1) || v == 0) then Nothing
-    else Just (posixSecondsToUTCTime $ realToFrac v)
-
-getinfo'Socket :: Ptr CCURL -> CCURLinfo'CLong -> IO (Maybe Int)
-getinfo'Socket ccurl cinfo = getinfo'Int ccurl cinfo >>= \v ->
-  return $ if (v == (-1)) then Nothing else Just v
-
-getinfo'TimeCond :: Ptr CCURL -> CCURLinfo'CLong -> IO Bool
-getinfo'TimeCond ccurl cinfo = toBool <$> getinfo'Int ccurl cinfo
-
-getinfo'CurlAuth :: Ptr CCURL -> CCURLinfo'CLong -> IO [CURLauth]
-getinfo'CurlAuth ccurl cinfo = do
-  mask <- fromIntegral <$> getinfo'Int ccurl cinfo
-  return $ mapMaybe (\(v, b) -> if (mask .&. b == 0) then Nothing else Just v)
-    [ (CURLAUTH_BASIC       , cCURLAUTH_BASIC       )
-    , (CURLAUTH_DIGEST      , cCURLAUTH_DIGEST      )
-    , (CURLAUTH_DIGEST_IE   , cCURLAUTH_DIGEST_IE   )
-    , (CURLAUTH_GSSNEGOTIATE, cCURLAUTH_GSSNEGOTIATE)
-    , (CURLAUTH_NTLM        , cCURLAUTH_NTLM        )
-    , (CURLAUTH_NTLM_WB     , cCURLAUTH_NTLM_WB     ) |7220:----|
-    ]
-
-
-peek'CCURL_slist :: Ptr CCURL_slist -> IO [String]
-peek'CCURL_slist ptr =
-  if (ptr == nullPtr) then return [] else peek ptr >>= \slist -> do
-    slist_head <- peekCString      $ ccurl_slist_data slist
-    slist_tail <- peek'CCURL_slist $ ccurl_slist_next slist
-    return (slist_head : slist_tail)
-
-peek'CCURL_certinfo :: Ptr CCURL_certinfo -> IO [[String]]
-peek'CCURL_certinfo ptr =
-  if (ptr == nullPtr) then return [] else peek ptr >>= \certinfo -> do
-    let numOfCerts = fromIntegral $ ccurl_certinfo_num_of_certs certinfo
-    let size = sizeOf (undefined :: Ptr CCURL_slist)
-    let ptr0 = ccurl_certinfo_certinfo certinfo
-    let ptrs = map (\i -> plusPtr ptr0 (i * size)) [0 .. (numOfCerts - 1)]
-    mapM (\sptr -> peek sptr >>= peek'CCURL_slist) ptrs
-
diff --git a/src/Network/Curlhs/Errors.hsc b/src/Network/Curlhs/Errors.hsc
deleted file mode 100644
--- a/src/Network/Curlhs/Errors.hsc
+++ /dev/null
@@ -1,216 +0,0 @@
--------------------------------------------------------------------------------
--- |
--- Module      :  Network.Curlhs.Errors
--- Copyright   :  Copyright © 2012 Krzysztof Kardzis
--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)
--- 
--- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
--------------------------------------------------------------------------------
-
-module Network.Curlhs.Errors
-  ( curl_easy_strerror
-  , withCODE
-  ) where
-
-import Data.ByteString   (ByteString, packCString)
-
-import Control.Exception (throwIO)
-import Control.Monad     (when)
-
-import Network.Curlhs.Types
-import Network.Curlhs.Base
-
-
--------------------------------------------------------------------------------
-withCODE :: IO CCURLcode -> IO ()
-withCODE action =
-  action >>= \code -> when (code /= cCURLE_OK) (throwIO (fromCCURLcode code))
-
-
--------------------------------------------------------------------------------
--- | Returns a string describing error code
---   (<http://curl.haxx.se/libcurl/c/curl_easy_strerror.html>).
--------------------------------------------------------------------------------
-curl_easy_strerror :: CURLcode -> IO ByteString
-curl_easy_strerror code =
-  ccurl_easy_strerror (fromCURLcode code) >>= packCString
-
-
--------------------------------------------------------------------------------
-#{let curlcode code = #code " -> c" #code}
-
-fromCURLcode :: CURLcode -> CCURLcode
-fromCURLcode x = case x of
-  #{curlcode CURLE_OK                      }
-  #{curlcode CURLE_UNSUPPORTED_PROTOCOL    }
-  #{curlcode CURLE_FAILED_INIT             }
-  #{curlcode CURLE_URL_MALFORMAT           }
-  #{curlcode CURLE_NOT_BUILT_IN            } |7215:----|
-  #{curlcode CURLE_COULDNT_RESOLVE_PROXY   }
-  #{curlcode CURLE_COULDNT_RESOLVE_HOST    }
-  #{curlcode CURLE_COULDNT_CONNECT         }
-  #{curlcode CURLE_FTP_WEIRD_SERVER_REPLY  }
-  #{curlcode CURLE_REMOTE_ACCESS_DENIED    }
-  #{curlcode CURLE_FTP_ACCEPT_FAILED       } |7240:----|
-  #{curlcode CURLE_FTP_WEIRD_PASS_REPLY    }
-  #{curlcode CURLE_FTP_ACCEPT_TIMEOUT      } |7240:----|
-  #{curlcode CURLE_FTP_WEIRD_PASV_REPLY    }
-  #{curlcode CURLE_FTP_WEIRD_227_FORMAT    }
-  #{curlcode CURLE_FTP_CANT_GET_HOST       }
-  #{curlcode CURLE_FTP_COULDNT_SET_TYPE    }
-  #{curlcode CURLE_PARTIAL_FILE            }
-  #{curlcode CURLE_FTP_COULDNT_RETR_FILE   }
-  #{curlcode CURLE_QUOTE_ERROR             }
-  #{curlcode CURLE_HTTP_RETURNED_ERROR     }
-  #{curlcode CURLE_WRITE_ERROR             }
-  #{curlcode CURLE_UPLOAD_FAILED           }
-  #{curlcode CURLE_READ_ERROR              }
-  #{curlcode CURLE_OUT_OF_MEMORY           }
-  #{curlcode CURLE_OPERATION_TIMEDOUT      }
-  #{curlcode CURLE_FTP_PORT_FAILED         }
-  #{curlcode CURLE_FTP_COULDNT_USE_REST    }
-  #{curlcode CURLE_RANGE_ERROR             }
-  #{curlcode CURLE_HTTP_POST_ERROR         }
-  #{curlcode CURLE_SSL_CONNECT_ERROR       }
-  #{curlcode CURLE_BAD_DOWNLOAD_RESUME     }
-  #{curlcode CURLE_FILE_COULDNT_READ_FILE  }
-  #{curlcode CURLE_LDAP_CANNOT_BIND        }
-  #{curlcode CURLE_LDAP_SEARCH_FAILED      }
-  #{curlcode CURLE_FUNCTION_NOT_FOUND      }
-  #{curlcode CURLE_ABORTED_BY_CALLBACK     }
-  #{curlcode CURLE_BAD_FUNCTION_ARGUMENT   }
-  #{curlcode CURLE_INTERFACE_FAILED        }
-  #{curlcode CURLE_TOO_MANY_REDIRECTS      }
-  #{curlcode CURLE_UNKNOWN_TELNET_OPTION   } |----:7214|
-  #{curlcode CURLE_UNKNOWN_OPTION          } |7215:----|
-  #{curlcode CURLE_TELNET_OPTION_SYNTAX    }
-  #{curlcode CURLE_PEER_FAILED_VERIFICATION}
-  #{curlcode CURLE_GOT_NOTHING             }
-  #{curlcode CURLE_SSL_ENGINE_NOTFOUND     }
-  #{curlcode CURLE_SSL_ENGINE_SETFAILED    }
-  #{curlcode CURLE_SEND_ERROR              }
-  #{curlcode CURLE_RECV_ERROR              }
-  #{curlcode CURLE_SSL_CERTPROBLEM         }
-  #{curlcode CURLE_SSL_CIPHER              }
-  #{curlcode CURLE_SSL_CACERT              }
-  #{curlcode CURLE_BAD_CONTENT_ENCODING    }
-  #{curlcode CURLE_LDAP_INVALID_URL        }
-  #{curlcode CURLE_FILESIZE_EXCEEDED       }
-  #{curlcode CURLE_USE_SSL_FAILED          }
-  #{curlcode CURLE_SEND_FAIL_REWIND        }
-  #{curlcode CURLE_SSL_ENGINE_INITFAILED   }
-  #{curlcode CURLE_LOGIN_DENIED            }
-  #{curlcode CURLE_TFTP_NOTFOUND           }
-  #{curlcode CURLE_TFTP_PERM               }
-  #{curlcode CURLE_REMOTE_DISK_FULL        }
-  #{curlcode CURLE_TFTP_ILLEGAL            }
-  #{curlcode CURLE_TFTP_UNKNOWNID          }
-  #{curlcode CURLE_REMOTE_FILE_EXISTS      }
-  #{curlcode CURLE_TFTP_NOSUCHUSER         }
-  #{curlcode CURLE_CONV_FAILED             }
-  #{curlcode CURLE_CONV_REQD               }
-  #{curlcode CURLE_SSL_CACERT_BADFILE      }
-  #{curlcode CURLE_REMOTE_FILE_NOT_FOUND   }
-  #{curlcode CURLE_SSH                     }
-  #{curlcode CURLE_SSL_SHUTDOWN_FAILED     }
-  #{curlcode CURLE_AGAIN                   }
-  #{curlcode CURLE_SSL_CRL_BADFILE         }
-  #{curlcode CURLE_SSL_ISSUER_ERROR        }
-  #{curlcode CURLE_FTP_PRET_FAILED         }
-  #{curlcode CURLE_RTSP_CSEQ_ERROR         }
-  #{curlcode CURLE_RTSP_SESSION_ERROR      }
-  #{curlcode CURLE_FTP_BAD_FILE_LIST       } |7210:----|
-  #{curlcode CURLE_CHUNK_FAILED            } |7210:----|
-
-
--------------------------------------------------------------------------------
-#{let ccurlcode code = "| x == c" #code " = " #code}
-
-fromCCURLcode :: CCURLcode -> CURLcode
-fromCCURLcode x
-  #{ccurlcode CURLE_OK                      }
-  #{ccurlcode CURLE_UNSUPPORTED_PROTOCOL    }
-  #{ccurlcode CURLE_FAILED_INIT             }
-  #{ccurlcode CURLE_URL_MALFORMAT           }
-  #{ccurlcode CURLE_NOT_BUILT_IN            } |7215:----|
-  #{ccurlcode CURLE_COULDNT_RESOLVE_PROXY   }
-  #{ccurlcode CURLE_COULDNT_RESOLVE_HOST    }
-  #{ccurlcode CURLE_COULDNT_CONNECT         }
-  #{ccurlcode CURLE_FTP_WEIRD_SERVER_REPLY  }
-  #{ccurlcode CURLE_REMOTE_ACCESS_DENIED    }
-  #{ccurlcode CURLE_FTP_ACCEPT_FAILED       } |7240:----|
-  #{ccurlcode CURLE_FTP_WEIRD_PASS_REPLY    }
-  #{ccurlcode CURLE_FTP_ACCEPT_TIMEOUT      } |7240:----|
-  #{ccurlcode CURLE_FTP_WEIRD_PASV_REPLY    }
-  #{ccurlcode CURLE_FTP_WEIRD_227_FORMAT    }
-  #{ccurlcode CURLE_FTP_CANT_GET_HOST       }
-  #{ccurlcode CURLE_FTP_COULDNT_SET_TYPE    }
-  #{ccurlcode CURLE_PARTIAL_FILE            }
-  #{ccurlcode CURLE_FTP_COULDNT_RETR_FILE   }
-  #{ccurlcode CURLE_QUOTE_ERROR             }
-  #{ccurlcode CURLE_HTTP_RETURNED_ERROR     }
-  #{ccurlcode CURLE_WRITE_ERROR             }
-  #{ccurlcode CURLE_UPLOAD_FAILED           }
-  #{ccurlcode CURLE_READ_ERROR              }
-  #{ccurlcode CURLE_OUT_OF_MEMORY           }
-  #{ccurlcode CURLE_OPERATION_TIMEDOUT      }
-  #{ccurlcode CURLE_FTP_PORT_FAILED         }
-  #{ccurlcode CURLE_FTP_COULDNT_USE_REST    }
-  #{ccurlcode CURLE_RANGE_ERROR             }
-  #{ccurlcode CURLE_HTTP_POST_ERROR         }
-  #{ccurlcode CURLE_SSL_CONNECT_ERROR       }
-  #{ccurlcode CURLE_BAD_DOWNLOAD_RESUME     }
-  #{ccurlcode CURLE_FILE_COULDNT_READ_FILE  }
-  #{ccurlcode CURLE_LDAP_CANNOT_BIND        }
-  #{ccurlcode CURLE_LDAP_SEARCH_FAILED      }
-  #{ccurlcode CURLE_FUNCTION_NOT_FOUND      }
-  #{ccurlcode CURLE_ABORTED_BY_CALLBACK     }
-  #{ccurlcode CURLE_BAD_FUNCTION_ARGUMENT   }
-  #{ccurlcode CURLE_INTERFACE_FAILED        }
-  #{ccurlcode CURLE_TOO_MANY_REDIRECTS      }
-  #{ccurlcode CURLE_UNKNOWN_TELNET_OPTION   } |----:7214|
-  #{ccurlcode CURLE_UNKNOWN_OPTION          } |7215:----|
-  #{ccurlcode CURLE_TELNET_OPTION_SYNTAX    }
-  #{ccurlcode CURLE_PEER_FAILED_VERIFICATION}
-  #{ccurlcode CURLE_GOT_NOTHING             }
-  #{ccurlcode CURLE_SSL_ENGINE_NOTFOUND     }
-  #{ccurlcode CURLE_SSL_ENGINE_SETFAILED    }
-  #{ccurlcode CURLE_SEND_ERROR              }
-  #{ccurlcode CURLE_RECV_ERROR              }
-  #{ccurlcode CURLE_SSL_CERTPROBLEM         }
-  #{ccurlcode CURLE_SSL_CIPHER              }
-  #{ccurlcode CURLE_SSL_CACERT              }
-  #{ccurlcode CURLE_BAD_CONTENT_ENCODING    }
-  #{ccurlcode CURLE_LDAP_INVALID_URL        }
-  #{ccurlcode CURLE_FILESIZE_EXCEEDED       }
-  #{ccurlcode CURLE_USE_SSL_FAILED          }
-  #{ccurlcode CURLE_SEND_FAIL_REWIND        }
-  #{ccurlcode CURLE_SSL_ENGINE_INITFAILED   }
-  #{ccurlcode CURLE_LOGIN_DENIED            }
-  #{ccurlcode CURLE_TFTP_NOTFOUND           }
-  #{ccurlcode CURLE_TFTP_PERM               }
-  #{ccurlcode CURLE_REMOTE_DISK_FULL        }
-  #{ccurlcode CURLE_TFTP_ILLEGAL            }
-  #{ccurlcode CURLE_TFTP_UNKNOWNID          }
-  #{ccurlcode CURLE_REMOTE_FILE_EXISTS      }
-  #{ccurlcode CURLE_TFTP_NOSUCHUSER         }
-  #{ccurlcode CURLE_CONV_FAILED             }
-  #{ccurlcode CURLE_CONV_REQD               }
-  #{ccurlcode CURLE_SSL_CACERT_BADFILE      }
-  #{ccurlcode CURLE_REMOTE_FILE_NOT_FOUND   }
-  #{ccurlcode CURLE_SSH                     }
-  #{ccurlcode CURLE_SSL_SHUTDOWN_FAILED     }
-  #{ccurlcode CURLE_AGAIN                   }
-  #{ccurlcode CURLE_SSL_CRL_BADFILE         }
-  #{ccurlcode CURLE_SSL_ISSUER_ERROR        }
-  #{ccurlcode CURLE_FTP_PRET_FAILED         }
-  #{ccurlcode CURLE_RTSP_CSEQ_ERROR         }
-  #{ccurlcode CURLE_RTSP_SESSION_ERROR      }
-  #{ccurlcode CURLE_FTP_BAD_FILE_LIST       } |7210:----|
-  #{ccurlcode CURLE_CHUNK_FAILED            } |7210:----|
-  | otherwise = error "unknown CURLcode"
-
-
diff --git a/src/Network/Curlhs/Setopt.hsc b/src/Network/Curlhs/Setopt.hsc
deleted file mode 100644
--- a/src/Network/Curlhs/Setopt.hsc
+++ /dev/null
@@ -1,513 +0,0 @@
--------------------------------------------------------------------------------
--- |
--- Module      :  Network.Curlhs.Setopt
--- Copyright   :  Copyright © 2012 Krzysztof Kardzis
--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)
--- 
--- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
--------------------------------------------------------------------------------
-
-module Network.Curlhs.Setopt
-  ( curl_easy_setopt
-  , freeCallbacks
-  ) where
-
-import Foreign.Marshal.Utils (copyBytes, fromBool)
-import Foreign.C.Types       (CLong)
-import Foreign.Ptr           (FunPtr, nullFunPtr, freeHaskellFunPtr)
-
-import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
-import Data.Time.Clock       (UTCTime)
-import Data.Bits             ((.|.))
-import Data.List             (foldl')
-import Data.IORef            (IORef, atomicModifyIORef)
-
-import qualified Data.ByteString as BS
-import Data.ByteString.Unsafe (unsafeUseAsCStringLen)
-import Data.ByteString        (ByteString, useAsCString, packCStringLen)
-
-import Network.Curlhs.Errors
-import Network.Curlhs.Types
-import Network.Curlhs.Base
-
-
--------------------------------------------------------------------------------
-freeCallbacks :: CURL -> IO ()
-freeCallbacks curl = do
-  keepCallback (cb_write curl) Nothing
-  keepCallback (cb_read  curl) Nothing
-
-keepCallback :: IORef (Maybe (FunPtr a)) -> Maybe (FunPtr a) -> IO ()
-keepCallback r mf =
-  atomicModifyIORef r (\v -> (mf, v)) >>= maybe (return ()) freeHaskellFunPtr
-
-makeCallback :: Maybe cb -> IORef (Maybe (FunPtr a))
-             -> (FunPtr a -> IO CCURLcode) -> (cb -> IO (FunPtr a)) -> IO ()
-makeCallback (Just cb) ref setcb wrapcb = withCODE $ do
-  fptr <- wrapcb cb
-  code <- setcb fptr
-  if (code == cCURLE_OK)
-    then keepCallback ref (Just fptr)
-    else freeHaskellFunPtr fptr
-  return code
-makeCallback Nothing ref setcb _ = withCODE $ do
-  code <- setcb nullFunPtr
-  keepCallback ref Nothing
-  return code
-
-
--------------------------------------------------------------------------------
-#{let setopt opt, fun = #opt " x -> " #fun " c" #opt " x"}
-
--------------------------------------------------------------------------------
--- | Set options for a curl easy handle
---   (<http://curl.haxx.se/libcurl/c/curl_easy_setopt.html>).
--------------------------------------------------------------------------------
-curl_easy_setopt :: CURL -> [CURLoption] -> IO ()
-curl_easy_setopt curl opts = flip mapM_ opts $ \opt -> case opt of
-
-  ---- CALLBACK OPTIONS -------------------------------------------------------
-  CURLOPT_WRITEFUNCTION f -> so'FWRITE curl f
-  CURLOPT_READFUNCTION  f -> so'FREAD  curl f
-
-  ---- BEHAVIOR OPTIONS -------------------------------------------------------
-  #{setopt CURLOPT_VERBOSE                , bool     }
-  #{setopt CURLOPT_HEADER                 , bool     }
-  #{setopt CURLOPT_NOPROGRESS             , bool     }
-  #{setopt CURLOPT_NOSIGNAL               , bool     }
-  #{setopt CURLOPT_WILDCARDMATCH          , bool     } |7210:----|
-
-  ---- ERROR OPTIONS ----------------------------------------------------------
-  -- CURLOPT_ERRORBUFFER
-  -- CURLOPT_STDERR
-  #{setopt CURLOPT_FAILONERROR            , bool     }
-
-  ---- NETWORK OPTIONS --------------------------------------------------------
-  #{setopt CURLOPT_URL                    , string   }
-  #{setopt CURLOPT_PROTOCOLS              , enum     }
-  #{setopt CURLOPT_REDIR_PROTOCOLS        , enum     }
-  #{setopt CURLOPT_PROXY                  , string   }
-  #{setopt CURLOPT_PROXYPORT              , int      }
-  #{setopt CURLOPT_PROXYTYPE              , enum     }
-  #{setopt CURLOPT_NOPROXY                , string   }
-  #{setopt CURLOPT_HTTPPROXYTUNNEL        , bool     }
-  #{setopt CURLOPT_SOCKS5_GSSAPI_SERVICE  , string   }
-  #{setopt CURLOPT_SOCKS5_GSSAPI_NEC      , bool     }
-  #{setopt CURLOPT_INTERFACE              , string   }
-  #{setopt CURLOPT_LOCALPORT              , int      }
-  #{setopt CURLOPT_LOCALPORTRANGE         , int      }
-  #{setopt CURLOPT_DNS_CACHE_TIMEOUT      , int      }
-  #{setopt CURLOPT_DNS_USE_GLOBAL_CACHE   , bool     }
-  #{setopt CURLOPT_BUFFERSIZE             , int      }
-  #{setopt CURLOPT_PORT                   , int      }
-  #{setopt CURLOPT_TCP_NODELAY            , bool     }
-  #{setopt CURLOPT_ADDRESS_SCOPE          , int      }
-  #{setopt CURLOPT_TCP_KEEPALIVE          , bool     } |7250:----|
-  #{setopt CURLOPT_TCP_KEEPIDLE           , int      } |7250:----|
-  #{setopt CURLOPT_TCP_KEEPINTVL          , int      } |7250:----|
-
-  ---- NAMES and PASSWORDS OPTIONS (Authentication) ---------------------------
-  #{setopt CURLOPT_NETRC                  , enum     }
-  #{setopt CURLOPT_NETRC_FILE             , string   }
-  #{setopt CURLOPT_USERPWD                , string   }
-  #{setopt CURLOPT_PROXYUSERPWD           , string   }
-  #{setopt CURLOPT_USERNAME               , string   }
-  #{setopt CURLOPT_PASSWORD               , string   }
-  #{setopt CURLOPT_PROXYUSERNAME          , string   }
-  #{setopt CURLOPT_PROXYPASSWORD          , string   }
-  #{setopt CURLOPT_HTTPAUTH               , enum     }
-  #{setopt CURLOPT_TLSAUTH_TYPE           , string   } |7214:----|
-  #{setopt CURLOPT_TLSAUTH_USERNAME       , string   } |7214:----|
-  #{setopt CURLOPT_TLSAUTH_PASSWORD       , string   } |7214:----|
-  #{setopt CURLOPT_PROXYAUTH              , enum     }
-
-  ---- HTTP OPTIONS -----------------------------------------------------------
-  #{setopt CURLOPT_AUTOREFERER            , bool     }
-  #{setopt CURLOPT_ENCODING               , string   } |----:7215|
-  #{setopt CURLOPT_ACCEPT_ENCODING        , string   } |7216:----|
-  #{setopt CURLOPT_TRANSFER_ENCODING      , bool     } |7216:----|
-  #{setopt CURLOPT_FOLLOWLOCATION         , bool     }
-  #{setopt CURLOPT_UNRESTRICTED_AUTH      , bool     }
-  #{setopt CURLOPT_MAXREDIRS              , int      }
-  #{setopt CURLOPT_POSTREDIR              , enum     }
-  #{setopt CURLOPT_PUT                    , bool     }
-  #{setopt CURLOPT_POST                   , bool     }
-  -- #{setopt CURLOPT_POSTFIELDS             , buffer   }
-  #{setopt CURLOPT_POSTFIELDSIZE          , int      }
-  #{setopt CURLOPT_POSTFIELDSIZE_LARGE    , int64    }
-  #{setopt CURLOPT_COPYPOSTFIELDS         , string   }
-  -- CURLOPT_HTTPPOST
-  #{setopt CURLOPT_REFERER                , string   }
-  #{setopt CURLOPT_USERAGENT              , string   }
-  -- #{setopt CURLOPT_HTTPHEADER             , slist    }
-  -- #{setopt CURLOPT_HTTP200ALIASES         , slist    }
-  #{setopt CURLOPT_COOKIE                 , string   }
-  #{setopt CURLOPT_COOKIEFILE             , string   }
-  #{setopt CURLOPT_COOKIEJAR              , string   }
-  #{setopt CURLOPT_COOKIESESSION          , bool     }
-  #{setopt CURLOPT_COOKIELIST             , string   }
-  #{setopt CURLOPT_HTTPGET                , bool     }
-  #{setopt CURLOPT_HTTP_VERSION           , enum     }
-  #{setopt CURLOPT_IGNORE_CONTENT_LENGTH  , bool     }
-  #{setopt CURLOPT_HTTP_CONTENT_DECODING  , bool     }
-  #{setopt CURLOPT_HTTP_TRANSFER_DECODING , bool     }
-
-  ---- SMTP OPTIONS -----------------------------------------------------------
-  #{setopt CURLOPT_MAIL_FROM              , string   }
-  -- #{setopt CURLOPT_MAIL_RCTP              , slist    }
-  #{setopt CURLOPT_MAIL_AUTH              , string   } |7250:----|
-
-  ---- TFTP OPTIONS -----------------------------------------------------------
-  #{setopt CURLOPT_TFTP_BLKSIZE           , int      }
-
-  ---- FTP OPTIONS ------------------------------------------------------------
-  #{setopt CURLOPT_FTPPORT                , string   }
-  -- #{setopt CURLOPT_QUOTE                  , slist    }
-  -- #{setopt CURLOPT_POSTQUOTE              , slist    }
-  -- #{setopt CURLOPT_PREQUOTE               , slist    }
-  #{setopt CURLOPT_DIRLISTONLY            , bool     }
-  #{setopt CURLOPT_APPEND                 , bool     }
-  #{setopt CURLOPT_FTP_USE_EPRT           , bool     }
-  #{setopt CURLOPT_FTP_USE_EPSV           , bool     }
-  #{setopt CURLOPT_FTP_USE_PRET           , bool     }
-  #{setopt CURLOPT_FTP_CREATE_MISSING_DIRS, enum     }
-  #{setopt CURLOPT_FTP_RESPONSE_TIMEOUT   , int      }
-  #{setopt CURLOPT_FTP_ALTERNATIVE_TO_USER, string   }
-  #{setopt CURLOPT_FTP_SKIP_PASV_IP       , bool     }
-  #{setopt CURLOPT_FTPSSLAUTH             , enum     }
-  #{setopt CURLOPT_FTP_SSL_CCC            , enum     }
-  #{setopt CURLOPT_FTP_ACCOUNT            , string   }
-  #{setopt CURLOPT_FTP_FILEMETHOD         , enum     }
-
-  ---- RTSP OPTIONS -----------------------------------------------------------
-  #{setopt CURLOPT_RTSP_REQUEST           , enum     }
-  #{setopt CURLOPT_RTSP_SESSION_ID        , string   }
-  #{setopt CURLOPT_RTSP_STREAM_URI        , string   }
-  #{setopt CURLOPT_RTSP_TRANSPORT         , string   }
-  -- #{setopt CURLOPT_RTSP_HEADER            , slist    }
-  #{setopt CURLOPT_RTSP_CLIENT_CSEQ       , int      }
-  #{setopt CURLOPT_RTSP_SERVER_CSEQ       , int      }
-
-  ---- PROTOCOL OPTIONS -------------------------------------------------------
-  #{setopt CURLOPT_TRANSFERTEXT           , bool     }
-  #{setopt CURLOPT_PROXY_TRANSFER_MODE    , bool     }
-  #{setopt CURLOPT_CRLF                   , bool     }
-  #{setopt CURLOPT_RANGE                  , string   }
-  #{setopt CURLOPT_RESUME_FROM            , int      }
-  #{setopt CURLOPT_RESUME_FROM_LARGE      , int64    }
-  #{setopt CURLOPT_CUSTOMREQUEST          , string   }
-  #{setopt CURLOPT_FILETIME               , bool     }
-  #{setopt CURLOPT_NOBODY                 , bool     }
-  #{setopt CURLOPT_INFILESIZE             , int      }
-  #{setopt CURLOPT_INFILESIZE_LARGE       , int64    }
-  #{setopt CURLOPT_UPLOAD                 , bool     }
-  #{setopt CURLOPT_MAXFILESIZE            , int      }
-  #{setopt CURLOPT_MAXFILESIZE_LARGE      , int64    }
-  #{setopt CURLOPT_TIMECONDITION          , enum     }
-  #{setopt CURLOPT_TIMEVALUE              , time     }
-
-  ---- CONNECTION OPTIONS -----------------------------------------------------
-  #{setopt CURLOPT_TIMEOUT                , int      }
-  #{setopt CURLOPT_TIMEOUT_MS             , int      }
-  #{setopt CURLOPT_LOW_SPEED_LIMIT        , int      }
-  #{setopt CURLOPT_LOW_SPEED_TIME         , int      }
-  #{setopt CURLOPT_MAX_SEND_SPEED_LARGE   , int64    }
-  #{setopt CURLOPT_MAX_RECV_SPEED_LARGE   , int64    }
-  #{setopt CURLOPT_MAXCONNECTS            , int      }
-  #{setopt CURLOPT_CLOSEPOLICY            , enum     }
-  #{setopt CURLOPT_FRESH_CONNECT          , bool     }
-  #{setopt CURLOPT_FORBID_REUSE           , bool     }
-  #{setopt CURLOPT_CONNECTTIMEOUT         , int      }
-  #{setopt CURLOPT_CONNECTTIMEOUT_MS      , int      }
-  #{setopt CURLOPT_IPRESOLVE              , enum     }
-  #{setopt CURLOPT_CONNECT_ONLY           , bool     }
-  #{setopt CURLOPT_USE_SSL                , enum     }
-  -- #{setopt CURLOPT_RESOLVE                , slist    } |7213:----|
-  #{setopt CURLOPT_DNS_SERVERS            , string   } |7240:----|
-  #{setopt CURLOPT_ACCEPTTIMEOUT_MS       , int      } |7240:----|
-
-  ---- SSL and SECURITY OPTIONS -----------------------------------------------
-  #{setopt CURLOPT_SSLCERT                , string   }
-  #{setopt CURLOPT_SSLCERTTYPE            , string   }
-  #{setopt CURLOPT_SSLKEY                 , string   }
-  #{setopt CURLOPT_SSLKEYTYPE             , string   }
-  #{setopt CURLOPT_KEYPASSWD              , string   }
-  #{setopt CURLOPT_SSLENGINE              , string   }
-  #{setopt CURLOPT_SSLENGINE_DEFAULT      , bool     }
-  #{setopt CURLOPT_SSLVERSION             , enum     }
-  #{setopt CURLOPT_SSL_VERIFYPEER         , bool     }
-  #{setopt CURLOPT_CAINFO                 , string   }
-  #{setopt CURLOPT_ISSUERCERT             , string   }
-  #{setopt CURLOPT_CAPATH                 , string   }
-  #{setopt CURLOPT_CRLFILE                , string   }
-  #{setopt CURLOPT_SSL_VERIFYHOST         , int      }
-  #{setopt CURLOPT_CERTINFO               , bool     }
-  #{setopt CURLOPT_RANDOM_FILE            , string   }
-  #{setopt CURLOPT_EGDSOCKET              , string   }
-  #{setopt CURLOPT_SSL_CIPHER_LIST        , string   }
-  #{setopt CURLOPT_SSL_SESSIONID_CACHE    , bool     }
-  #{setopt CURLOPT_SSL_OPTIONS            , enum     } |7250:----|
-  #{setopt CURLOPT_KRBLEVEL               , string   }
-  #{setopt CURLOPT_GSSAPI_DELEGATION      , enum     } |7220:----|
-
-  ---- SSH OPTIONS ------------------------------------------------------------
-  #{setopt CURLOPT_SSH_AUTH_TYPES         , enum     }
-  #{setopt CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, string   }
-  #{setopt CURLOPT_SSH_PUBLIC_KEYFILE     , string   }
-  #{setopt CURLOPT_SSH_PRIVATE_KEYFILE    , string   }
-  #{setopt CURLOPT_SSH_KNOWNHOSTS         , string   }
-  -- CURLOPT_SSH_KEYFUNCTION
-  -- CURLOPT_SSH_KEYDATA
-
-  ---- OTHER OPTIONS ----------------------------------------------------------
-  -- CURLOPT_PRIVATE
-  -- CURLOPT_SHARE
-  #{setopt CURLOPT_NEW_FILE_PERMS         , int      }
-  #{setopt CURLOPT_NEW_DIRECTORY_PERMS    , int      }
-
-  ---- TELNET OPTIONS ---------------------------------------------------------
-  -- #{setopt CURLOPT_TELNETOPTIONS          , slist    }
-
-  -----------------------------------------------------------------------------
-  where
-    string copt s = setopt'CString curl copt s
-    int64  copt x = setopt'Int64   curl copt (fromIntegral   x)
-    int    copt x = setopt'CLong   curl copt (fromIntegral   x)
-    bool   copt x = setopt'CLong   curl copt (fromBool       x)
-    time   copt x = setopt'CLong   curl copt (fromUTCTime    x)
-    enum   copt x = setopt'CLong   curl copt (fromCURLenum   x)
-
-
-
--------------------------------------------------------------------------------
-setopt'CString :: CURL -> CCURLoption'CString -> ByteString -> IO ()
-setopt'CString curl copt val = useAsCString val $ \ptr ->
-  withCODE $ ccurl_easy_setopt'CString (ccurlptr curl) copt ptr
-
-setopt'Int64 :: CURL -> CCURLoption'Int64 -> CCURL_off_t -> IO ()
-setopt'Int64 curl copt cval =
-  withCODE $ ccurl_easy_setopt'Int64 (ccurlptr curl) copt cval
-
-setopt'CLong :: CURL -> CCURLoption'CLong -> CLong -> IO ()
-setopt'CLong curl copt cval =
-  withCODE $ ccurl_easy_setopt'CLong (ccurlptr curl) copt cval
-
-
--------------------------------------------------------------------------------
-so'FWRITE :: CURL -> Maybe CURL_write_callback -> IO ()
-so'FWRITE curl mcb = makeCallback mcb (cb_write curl)
-  (ccurl_easy_setopt'FWRITE (ccurlptr curl))
-  (\cb -> wrap_ccurl_write_callback (write_callback cb))
-
-write_callback :: CURL_write_callback -> CCURL_write_callback
-write_callback fwrite ptr size nmemb _ = do
-  stat <- packCStringLen (ptr, fromIntegral (size * nmemb)) >>= fwrite
-  return $ case stat of
-    CURL_WRITEFUNC_OK    -> (size * nmemb)
-    CURL_WRITEFUNC_FAIL  -> 0
-    CURL_WRITEFUNC_PAUSE -> cCURL_WRITEFUNC_PAUSE
-
-
--------------------------------------------------------------------------------
-so'FREAD :: CURL -> Maybe CURL_read_callback -> IO ()
-so'FREAD curl mcb = makeCallback mcb (cb_read curl)
-  (ccurl_easy_setopt'FREAD (ccurlptr curl))
-  (\cb -> wrap_ccurl_read_callback (read_callback cb))
-
-read_callback :: CURL_read_callback -> CCURL_read_callback
-read_callback fread buff size nmemb _ = do
-  let buffLen = fromIntegral (size * nmemb)
-  stat <- fread buffLen
-  case stat of
-    CURL_READFUNC_PAUSE -> return cCURL_READFUNC_PAUSE
-    CURL_READFUNC_ABORT -> return cCURL_READFUNC_ABORT
-    CURL_READFUNC_OK bs -> unsafeUseAsCStringLen (BS.take buffLen bs)
-      (\(cs, cl) -> copyBytes buff cs cl >> return (fromIntegral cl))
-
-
--------------------------------------------------------------------------------
-fromUTCTime :: UTCTime -> CLong
-fromUTCTime = truncate . utcTimeToPOSIXSeconds
-
-
--------------------------------------------------------------------------------
-#{let option opt = #opt " -> c" #opt}
-
-class CURLenum a where
-  fromCURLenum :: a -> CLong
-
-instance CURLenum a => CURLenum [a] where
-  fromCURLenum xs = foldl' (.|.) 0 $ map fromCURLenum xs
-
-instance CURLenum CURLproto where
-  fromCURLenum x = case x of
-    #{option CURLPROTO_ALL   }
-    #{option CURLPROTO_HTTP  }
-    #{option CURLPROTO_HTTPS }
-    #{option CURLPROTO_FTP   }
-    #{option CURLPROTO_FTPS  }
-    #{option CURLPROTO_SCP   }
-    #{option CURLPROTO_SFTP  }
-    #{option CURLPROTO_TELNET}
-    #{option CURLPROTO_LDAP  }
-    #{option CURLPROTO_LDAPS }
-    #{option CURLPROTO_DICT  }
-    #{option CURLPROTO_FILE  }
-    #{option CURLPROTO_TFTP  }
-    #{option CURLPROTO_IMAP  }
-    #{option CURLPROTO_IMAPS }
-    #{option CURLPROTO_POP3  }
-    #{option CURLPROTO_POP3S }
-    #{option CURLPROTO_SMTP  }
-    #{option CURLPROTO_SMTPS }
-    #{option CURLPROTO_RTSP  }
-    #{option CURLPROTO_RTMP  } |7210:----|
-    #{option CURLPROTO_RTMPT } |7210:----|
-    #{option CURLPROTO_RTMPE } |7210:----|
-    #{option CURLPROTO_RTMPTE} |7210:----|
-    #{option CURLPROTO_RTMPS } |7210:----|
-    #{option CURLPROTO_RTMPTS} |7210:----|
-    #{option CURLPROTO_GOPHER} |7212:----|
-
-instance CURLenum CURLproxy where
-  fromCURLenum x = case x of
-    #{option CURLPROXY_HTTP           }
-    #{option CURLPROXY_HTTP_1_0       }
-    #{option CURLPROXY_SOCKS4         }
-    #{option CURLPROXY_SOCKS5         }
-    #{option CURLPROXY_SOCKS4A        }
-    #{option CURLPROXY_SOCKS5_HOSTNAME}
-
-instance CURLenum CURLnetrc where
-  fromCURLenum x = case x of
-    #{option CURL_NETRC_IGNORED }
-    #{option CURL_NETRC_OPTIONAL}
-    #{option CURL_NETRC_REQUIRED}
-
-instance CURLenum CURLauth where
-  fromCURLenum x = case x of
-    #{option CURLAUTH_BASIC       }
-    #{option CURLAUTH_DIGEST      }
-    #{option CURLAUTH_DIGEST_IE   }
-    #{option CURLAUTH_GSSNEGOTIATE}
-    #{option CURLAUTH_NTLM        }
-    #{option CURLAUTH_NTLM_WB     } |7220:----|
-    #{option CURLAUTH_ONLY        } |7213:----|
-    #{option CURLAUTH_ANY         }
-    #{option CURLAUTH_ANYSAFE     }
-
-instance CURLenum CURLtlsauth where                              |7214:----|
-  fromCURLenum x = case x of                                     |7214:----|
-    #{option CURL_TLSAUTH_SRP}                                   |7214:----|
-
-instance CURLenum CURLredir where
-  fromCURLenum x = case x of
-    #{option CURL_REDIR_GET_ALL }
-    #{option CURL_REDIR_POST_301}
-    #{option CURL_REDIR_POST_302}
-    #{option CURL_REDIR_POST_ALL}
-
-instance CURLenum CURLhttpver where
-  fromCURLenum x = case x of
-    #{option CURL_HTTP_VERSION_NONE}
-    #{option CURL_HTTP_VERSION_1_0 }
-    #{option CURL_HTTP_VERSION_1_1 }
-
-instance CURLenum CURLftpcreate where
-  fromCURLenum x = case x of
-    #{option CURLFTP_CREATE_DIR_NONE }
-    #{option CURLFTP_CREATE_DIR      }
-    #{option CURLFTP_CREATE_DIR_RETRY}
-
-instance CURLenum CURLftpauth where
-  fromCURLenum x = case x of
-    #{option CURLFTPAUTH_DEFAULT}
-    #{option CURLFTPAUTH_SSL    }
-    #{option CURLFTPAUTH_TLS    }
-
-instance CURLenum CURLftpssl where
-  fromCURLenum x = case x of
-    #{option CURLFTPSSL_CCC_NONE   }
-    #{option CURLFTPSSL_CCC_PASSIVE}
-    #{option CURLFTPSSL_CCC_ACTIVE }
-
-instance CURLenum CURLftpmethod where
-  fromCURLenum x = case x of
-    #{option CURLFTPMETHOD_DEFAULT  }
-    #{option CURLFTPMETHOD_MULTICWD }
-    #{option CURLFTPMETHOD_NOCWD    }
-    #{option CURLFTPMETHOD_SINGLECWD}
-
-instance CURLenum CURLrtspreq where
-  fromCURLenum x = case x of
-    #{option CURL_RTSPREQ_OPTIONS      }
-    #{option CURL_RTSPREQ_DESCRIBE     }
-    #{option CURL_RTSPREQ_ANNOUNCE     }
-    #{option CURL_RTSPREQ_SETUP        }
-    #{option CURL_RTSPREQ_PLAY         }
-    #{option CURL_RTSPREQ_PAUSE        }
-    #{option CURL_RTSPREQ_TEARDOWN     }
-    #{option CURL_RTSPREQ_GET_PARAMETER}
-    #{option CURL_RTSPREQ_SET_PARAMETER}
-    #{option CURL_RTSPREQ_RECORD       }
-    #{option CURL_RTSPREQ_RECEIVE      }
-
-instance CURLenum CURLtimecond where
-  fromCURLenum x = case x of
-    #{option CURL_TIMECOND_NONE        }
-    #{option CURL_TIMECOND_IFMODSINCE  }
-    #{option CURL_TIMECOND_IFUNMODSINCE}
-    #{option CURL_TIMECOND_LASTMOD     }
-
-instance CURLenum CURLclosepol where
-  fromCURLenum x = case x of
-    #{option CURLCLOSEPOLICY_NONE               }
-    #{option CURLCLOSEPOLICY_OLDEST             }
-    #{option CURLCLOSEPOLICY_LEAST_RECENTLY_USED}
-    #{option CURLCLOSEPOLICY_LEAST_TRAFFIC      }
-    #{option CURLCLOSEPOLICY_SLOWEST            }
-    #{option CURLCLOSEPOLICY_CALLBACK           }
-
-instance CURLenum CURLipresolve where
-  fromCURLenum x = case x of
-    #{option CURL_IPRESOLVE_WHATEVER}
-    #{option CURL_IPRESOLVE_V4      }
-    #{option CURL_IPRESOLVE_V6      }
-
-instance CURLenum CURLusessl where
-  fromCURLenum x = case x of
-    #{option CURLUSESSL_NONE   }
-    #{option CURLUSESSL_TRY    }
-    #{option CURLUSESSL_CONTROL}
-    #{option CURLUSESSL_ALL    }
-
-instance CURLenum CURLsslver where
-  fromCURLenum x = case x of
-    #{option CURL_SSLVERSION_DEFAULT}
-    #{option CURL_SSLVERSION_TLSv1  }
-    #{option CURL_SSLVERSION_SSLv2  }
-    #{option CURL_SSLVERSION_SSLv3  }
-
-instance CURLenum CURLsslopt where                               |7250:----|
-  fromCURLenum x = case x of                                     |7250:----|
-    #{option CURLSSLOPT_ALLOW_BEAST}                             |7250:----|
-
-instance CURLenum CURLgssapi where                               |7220:----|
-  fromCURLenum x = case x of                                     |7220:----|
-    #{option CURLGSSAPI_DELEGATION_NONE       }                  |7220:----|
-    #{option CURLGSSAPI_DELEGATION_POLICY_FLAG}                  |7220:----|
-    #{option CURLGSSAPI_DELEGATION_FLAG       }                  |7220:----|
-
-instance CURLenum CURLsshauth where
-  fromCURLenum x = case x of
-    #{option CURLSSH_AUTH_ANY      }
-    #{option CURLSSH_AUTH_NONE     }
-    #{option CURLSSH_AUTH_PUBLICKEY}
-    #{option CURLSSH_AUTH_PASSWORD }
-    #{option CURLSSH_AUTH_HOST     }
-    #{option CURLSSH_AUTH_KEYBOARD }
-    #{option CURLSSH_AUTH_DEFAULT  }
-
diff --git a/src/Network/Curlhs/Types.hs b/src/Network/Curlhs/Types.hs
deleted file mode 100644
--- a/src/Network/Curlhs/Types.hs
+++ /dev/null
@@ -1,675 +0,0 @@
--------------------------------------------------------------------------------
--- |
--- Module      :  Network.Curlhs.Types
--- Copyright   :  Copyright © 2012 Krzysztof Kardzis
--- License     :  ISC License (MIT/BSD-style, see LICENSE file for details)
--- 
--- Maintainer  :  Krzysztof Kardzis <kkardzis@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
--------------------------------------------------------------------------------
-
-{-# LANGUAGE DeriveDataTypeable #-}
-
-module Network.Curlhs.Types where
-
-import Foreign.Ptr       (Ptr, FunPtr)
-
-import Data.ByteString   (ByteString)
-import Data.Typeable     (Typeable)
-import Data.IORef        (IORef)
-import Data.Time         (UTCTime)
-import Data.Int          (Int64)
-
-import Control.Exception (Exception)
-
-import Network.Curlhs.Base
-
-
--------------------------------------------------------------------------------
-data CURL = CURL
-  { ccurlptr :: Ptr CCURL
-  , cb_write :: IORef (Maybe (FunPtr CCURL_write_callback))
-  , cb_read  :: IORef (Maybe (FunPtr CCURL_read_callback ))
-  }
-
-
--------------------------------------------------------------------------------
-data CURLcode
-  = CURLE_OK
-  | CURLE_UNSUPPORTED_PROTOCOL
-  | CURLE_FAILED_INIT
-  | CURLE_URL_MALFORMAT
-  | CURLE_NOT_BUILT_IN             |7215:----|
-  | CURLE_COULDNT_RESOLVE_PROXY
-  | CURLE_COULDNT_RESOLVE_HOST
-  | CURLE_COULDNT_CONNECT
-  | CURLE_FTP_WEIRD_SERVER_REPLY
-  | CURLE_REMOTE_ACCESS_DENIED
-  | CURLE_FTP_ACCEPT_FAILED        |7240:----|
-  | CURLE_FTP_WEIRD_PASS_REPLY
-  | CURLE_FTP_ACCEPT_TIMEOUT       |7240:----|
-  | CURLE_FTP_WEIRD_PASV_REPLY
-  | CURLE_FTP_WEIRD_227_FORMAT
-  | CURLE_FTP_CANT_GET_HOST
-  | CURLE_FTP_COULDNT_SET_TYPE
-  | CURLE_PARTIAL_FILE
-  | CURLE_FTP_COULDNT_RETR_FILE
-  | CURLE_QUOTE_ERROR
-  | CURLE_HTTP_RETURNED_ERROR
-  | CURLE_WRITE_ERROR
-  | CURLE_UPLOAD_FAILED
-  | CURLE_READ_ERROR
-  | CURLE_OUT_OF_MEMORY
-  | CURLE_OPERATION_TIMEDOUT
-  | CURLE_FTP_PORT_FAILED
-  | CURLE_FTP_COULDNT_USE_REST
-  | CURLE_RANGE_ERROR
-  | CURLE_HTTP_POST_ERROR
-  | CURLE_SSL_CONNECT_ERROR
-  | CURLE_BAD_DOWNLOAD_RESUME
-  | CURLE_FILE_COULDNT_READ_FILE
-  | CURLE_LDAP_CANNOT_BIND
-  | CURLE_LDAP_SEARCH_FAILED
-  | CURLE_FUNCTION_NOT_FOUND
-  | CURLE_ABORTED_BY_CALLBACK
-  | CURLE_BAD_FUNCTION_ARGUMENT
-  | CURLE_INTERFACE_FAILED
-  | CURLE_TOO_MANY_REDIRECTS
-  | CURLE_UNKNOWN_TELNET_OPTION    |----:7214|
-  | CURLE_UNKNOWN_OPTION           |7215:----|
-  | CURLE_TELNET_OPTION_SYNTAX
-  | CURLE_PEER_FAILED_VERIFICATION
-  | CURLE_GOT_NOTHING
-  | CURLE_SSL_ENGINE_NOTFOUND
-  | CURLE_SSL_ENGINE_SETFAILED
-  | CURLE_SEND_ERROR
-  | CURLE_RECV_ERROR
-  | CURLE_SSL_CERTPROBLEM
-  | CURLE_SSL_CIPHER
-  | CURLE_SSL_CACERT
-  | CURLE_BAD_CONTENT_ENCODING
-  | CURLE_LDAP_INVALID_URL
-  | CURLE_FILESIZE_EXCEEDED
-  | CURLE_USE_SSL_FAILED
-  | CURLE_SEND_FAIL_REWIND
-  | CURLE_SSL_ENGINE_INITFAILED
-  | CURLE_LOGIN_DENIED
-  | CURLE_TFTP_NOTFOUND
-  | CURLE_TFTP_PERM
-  | CURLE_REMOTE_DISK_FULL
-  | CURLE_TFTP_ILLEGAL
-  | CURLE_TFTP_UNKNOWNID
-  | CURLE_REMOTE_FILE_EXISTS
-  | CURLE_TFTP_NOSUCHUSER
-  | CURLE_CONV_FAILED
-  | CURLE_CONV_REQD
-  | CURLE_SSL_CACERT_BADFILE
-  | CURLE_REMOTE_FILE_NOT_FOUND
-  | CURLE_SSH
-  | CURLE_SSL_SHUTDOWN_FAILED
-  | CURLE_AGAIN
-  | CURLE_SSL_CRL_BADFILE
-  | CURLE_SSL_ISSUER_ERROR
-  | CURLE_FTP_PRET_FAILED
-  | CURLE_RTSP_CSEQ_ERROR
-  | CURLE_RTSP_SESSION_ERROR
-  | CURLE_FTP_BAD_FILE_LIST        |7210:----|
-  | CURLE_CHUNK_FAILED             |7210:----|
-  deriving (Eq, Show, Typeable)
-
-instance Exception CURLcode
-
-
--------------------------------------------------------------------------------
-data CURL_version_info_data = CURL_version_info_data
-  { curl_version_info_data_version         :: String
-  , curl_version_info_data_version_num     :: Int
-  , curl_version_info_data_host            :: String
-  , curl_version_info_data_features        :: [CURL_version]
-  , curl_version_info_data_ssl_version     :: Maybe String
-  , curl_version_info_data_ssl_version_num :: Int
-  , curl_version_info_data_libz_version    :: Maybe String
-  , curl_version_info_data_protocols       :: [String]
-  , curl_version_info_data_ares            :: Maybe String
-  , curl_version_info_data_ares_num        :: Int
-  , curl_version_info_data_libidn          :: Maybe String
-  , curl_version_info_data_iconv_ver_num   :: Int
-  , curl_version_info_data_libssh_version  :: Maybe String
-  } deriving (Show)
-
-
--------------------------------------------------------------------------------
-data CURL_version
-  = CURL_VERSION_IPV6
-  | CURL_VERSION_KERBEROS4
-  | CURL_VERSION_SSL
-  | CURL_VERSION_LIBZ
-  | CURL_VERSION_NTLM
-  | CURL_VERSION_GSSNEGOTIATE
-  | CURL_VERSION_DEBUG
-  | CURL_VERSION_ASYNCHDNS
-  | CURL_VERSION_SPNEGO
-  | CURL_VERSION_LARGEFILE
-  | CURL_VERSION_IDN
-  | CURL_VERSION_SSPI
-  | CURL_VERSION_CONV
-  | CURL_VERSION_CURLDEBUG
-  | CURL_VERSION_TLSAUTH_SRP
-  | CURL_VERSION_NTLM_WB
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLinfo = CURLinfo
-  { curlinfo_effective_url           :: String
-  , curlinfo_response_code           :: Maybe Int
-  , curlinfo_http_connectcode        :: Maybe Int
-  , curlinfo_filetime                :: Maybe UTCTime
-  , curlinfo_total_time              :: Double
-  , curlinfo_namelookup_time         :: Double
-  , curlinfo_connect_time            :: Double
-  , curlinfo_appconnect_time         :: Double
-  , curlinfo_pretransfer_time        :: Double
-  , curlinfo_starttransfer_time      :: Double
-  , curlinfo_redirect_time           :: Double
-  , curlinfo_redirect_count          :: Int
-  , curlinfo_redirect_url            :: Maybe String
-  , curlinfo_size_upload             :: Double
-  , curlinfo_size_download           :: Double
-  , curlinfo_speed_download          :: Double
-  , curlinfo_speed_upload            :: Double
-  , curlinfo_header_size             :: Int
-  , curlinfo_request_size            :: Int
-  , curlinfo_ssl_verifyresult        :: Int  -- Bool??
-  , curlinfo_ssl_engines             :: [String]
-  , curlinfo_content_length_download :: Maybe Double
-  , curlinfo_content_length_upload   :: Maybe Double
-  , curlinfo_content_type            :: Maybe String
---  , curlinfo_private                 :: String   -- void??
-  , curlinfo_httpauth_avail          :: [CURLauth]
-  , curlinfo_proxyauth_avail         :: [CURLauth]
-  , curlinfo_os_errno                :: Int
-  , curlinfo_num_connects            :: Int
-  , curlinfo_primary_ip              :: String
-  , curlinfo_primary_port            :: Int
-  , curlinfo_local_ip                :: String
-  , curlinfo_local_port              :: Int
-  , curlinfo_cookielist              :: [String]
-  , curlinfo_lastsocket              :: Maybe Int
-  , curlinfo_ftp_entry_path          :: Maybe String
-  , curlinfo_certinfo                :: [[String]]
-  , curlinfo_condition_unmet         :: Bool
-  , curlinfo_rtsp_session_id         :: Maybe String
-  , curlinfo_rtsp_client_cseq        :: Int
-  , curlinfo_rtsp_server_cseq        :: Int
-  , curlinfo_rtsp_cseq_recv          :: Int
-  } deriving (Show)
-
-
-
--------------------------------------------------------------------------------
-data CURLoption
-  ---- BEHAVIOR OPTIONS -------------------------------------------------------
-  = CURLOPT_VERBOSE                 Bool
-  | CURLOPT_HEADER                  Bool
-  | CURLOPT_NOPROGRESS              Bool
-  | CURLOPT_NOSIGNAL                Bool
-  | CURLOPT_WILDCARDMATCH           Bool |7210:----|
-
-  ---- CALLBACK OPTIONS -------------------------------------------------------
-  | CURLOPT_WRITEFUNCTION           (Maybe CURL_write_callback)
- -- CURLOPT_WRITEDATA
-  | CURLOPT_READFUNCTION            (Maybe CURL_read_callback)
- -- CURLOPT_READDATA
- -- CURLOPT_IOCTLFUNCTION
- -- CURLOPT_IOCTLDATA
- -- CURLOPT_SEEKFUNCTION
- -- CURLOPT_SEEKDATA
- -- CURLOPT_SOCKOPTFUNCTION
- -- CURLOPT_SOCKOPTDATA
- -- CURLOPT_OPENSOCKETFUNCTION
- -- CURLOPT_OPENSOCKETDATA
- -- CURLOPT_CLOSESOCKETFUNCTION |7217:----|
- -- CURLOPT_CLOSESOCKETDATA     |7217:----|
- -- CURLOPT_PROGRESSFUNCTION
- -- CURLOPT_PROGRESSDATA
- -- CURLOPT_HEADERFUNCTION
- -- CURLOPT_HEADERDATA
- -- CURLOPT_DEBUGFUNCTION
- -- CURLOPT_DEBUGDATA
- -- CURLOPT_SSL_CTX_FUNCTION
- -- CURLOPT_SSL_CTX_DATA
- -- CURLOPT_CONV_TO_NETWORK_FUNCTION
- -- CURLOPT_CONV_FROM_NETWORK_FUNCTION
- -- CURLOPT_CONV_FROM_UTF8_FUNCTION
- -- CURLOPT_INTERLEAVEFUNCTION
- -- CURLOPT_INTERLEAVEDATA
- -- CURLOPT_CHUNK_BGN_FUNCTION |7210:----|
- -- CURLOPT_CHUNK_END_FUNCTION |7210:----|
- -- CURLOPT_CHUNK_DATA         |7210:----|
- -- CURLOPT_FNMATCH_FUNCTION   |7210:----|
- -- CURLOPT_FNMATCH_DATA       |7210:----|
-
-  ---- ERROR OPTIONS ----------------------------------------------------------
- -- CURLOPT_ERRORBUFFER             (IORef (Maybe ByteString))
- -- CURLOPT_STDERR                  Handle
-  | CURLOPT_FAILONERROR             Bool
-
-  ---- NETWORK OPTIONS --------------------------------------------------------
-  | CURLOPT_URL                     ByteString
-  | CURLOPT_PROTOCOLS               [CURLproto]
-  | CURLOPT_REDIR_PROTOCOLS         [CURLproto]
-  | CURLOPT_PROXY                   ByteString
-  | CURLOPT_PROXYPORT               Int
-  | CURLOPT_PROXYTYPE               CURLproxy
-  | CURLOPT_NOPROXY                 ByteString
-  | CURLOPT_HTTPPROXYTUNNEL         Bool
-  | CURLOPT_SOCKS5_GSSAPI_SERVICE   ByteString
-  | CURLOPT_SOCKS5_GSSAPI_NEC       Bool
-  | CURLOPT_INTERFACE               ByteString
-  | CURLOPT_LOCALPORT               Int
-  | CURLOPT_LOCALPORTRANGE          Int
-  | CURLOPT_DNS_CACHE_TIMEOUT       Int
-  | CURLOPT_DNS_USE_GLOBAL_CACHE    Bool
-  | CURLOPT_BUFFERSIZE              Int
-  | CURLOPT_PORT                    Int
-  | CURLOPT_TCP_NODELAY             Bool
-  | CURLOPT_ADDRESS_SCOPE           Int
-  | CURLOPT_TCP_KEEPALIVE           Bool          |7250:----|
-  | CURLOPT_TCP_KEEPIDLE            Int           |7250:----|
-  | CURLOPT_TCP_KEEPINTVL           Int           |7250:----|
-
-  ---- NAMES and PASSWORDS OPTIONS (Authentication) ---------------------------
-  | CURLOPT_NETRC                   CURLnetrc
-  | CURLOPT_NETRC_FILE              ByteString
-  | CURLOPT_USERPWD                 ByteString
-  | CURLOPT_PROXYUSERPWD            ByteString
-  | CURLOPT_USERNAME                ByteString
-  | CURLOPT_PASSWORD                ByteString
-  | CURLOPT_PROXYUSERNAME           ByteString
-  | CURLOPT_PROXYPASSWORD           ByteString
-  | CURLOPT_HTTPAUTH                [CURLauth]
- -- CURLOPT_TLSAUTH_TYPE            [CURLtlsauth] |7214:----|
-  | CURLOPT_TLSAUTH_TYPE            ByteString    |7214:----|
-  | CURLOPT_TLSAUTH_USERNAME        ByteString    |7214:----|
-  | CURLOPT_TLSAUTH_PASSWORD        ByteString    |7214:----|
-  | CURLOPT_PROXYAUTH               [CURLauth]
-
-  ---- HTTP OPTIONS -----------------------------------------------------------
-  | CURLOPT_AUTOREFERER             Bool
-  | CURLOPT_ENCODING                ByteString    |----:7215|
-  | CURLOPT_ACCEPT_ENCODING         ByteString    |7216:----|
-  | CURLOPT_TRANSFER_ENCODING       Bool          |7216:----|
-  | CURLOPT_FOLLOWLOCATION          Bool
-  | CURLOPT_UNRESTRICTED_AUTH       Bool
-  | CURLOPT_MAXREDIRS               Int
-  | CURLOPT_POSTREDIR               [CURLredir]
-  | CURLOPT_PUT                     Bool
-  | CURLOPT_POST                    Bool
- -- CURLOPT_POSTFIELDS              ByteString -- not copied
-  | CURLOPT_POSTFIELDSIZE           Int
-  | CURLOPT_POSTFIELDSIZE_LARGE     Int64
-  | CURLOPT_COPYPOSTFIELDS          ByteString
- -- CURLOPT_HTTPPOST                [CURL_httppost]
-  | CURLOPT_REFERER                 ByteString
-  | CURLOPT_USERAGENT               ByteString
- -- CURLOPT_HTTPHEADER              [ByteString]
- -- CURLOPT_HTTP200ALIASES          [ByteString]
-  | CURLOPT_COOKIE                  ByteString
-  | CURLOPT_COOKIEFILE              ByteString
-  | CURLOPT_COOKIEJAR               ByteString
-  | CURLOPT_COOKIESESSION           Bool
-  | CURLOPT_COOKIELIST              ByteString
-  | CURLOPT_HTTPGET                 Bool
-  | CURLOPT_HTTP_VERSION            CURLhttpver
-  | CURLOPT_IGNORE_CONTENT_LENGTH   Bool
-  | CURLOPT_HTTP_CONTENT_DECODING   Bool
-  | CURLOPT_HTTP_TRANSFER_DECODING  Bool
-
-  ---- SMTP OPTIONS -----------------------------------------------------------
-  | CURLOPT_MAIL_FROM               ByteString
- -- CURLOPT_MAIL_RCTP               [ByteString]
-  | CURLOPT_MAIL_AUTH               ByteString    |7250:----|
-
-  ---- TFTP OPTIONS -----------------------------------------------------------
-  | CURLOPT_TFTP_BLKSIZE            Int
-
-  ---- FTP OPTIONS ------------------------------------------------------------
-  | CURLOPT_FTPPORT                 ByteString
- -- CURLOPT_QUOTE                   [ByteString]
- -- CURLOPT_POSTQUOTE               [ByteString]
- -- CURLOPT_PREQUOTE                [ByteString]
-  | CURLOPT_DIRLISTONLY             Bool
-  | CURLOPT_APPEND                  Bool
-  | CURLOPT_FTP_USE_EPRT            Bool
-  | CURLOPT_FTP_USE_EPSV            Bool
-  | CURLOPT_FTP_USE_PRET            Bool
-  | CURLOPT_FTP_CREATE_MISSING_DIRS CURLftpcreate
-  | CURLOPT_FTP_RESPONSE_TIMEOUT    Int
-  | CURLOPT_FTP_ALTERNATIVE_TO_USER ByteString
-  | CURLOPT_FTP_SKIP_PASV_IP        Bool
-  | CURLOPT_FTPSSLAUTH              CURLftpauth
-  | CURLOPT_FTP_SSL_CCC             CURLftpssl
-  | CURLOPT_FTP_ACCOUNT             ByteString
-  | CURLOPT_FTP_FILEMETHOD          CURLftpmethod
-
-  ---- RTSP OPTIONS -----------------------------------------------------------
-  | CURLOPT_RTSP_REQUEST            CURLrtspreq
-  | CURLOPT_RTSP_SESSION_ID         ByteString
-  | CURLOPT_RTSP_STREAM_URI         ByteString
-  | CURLOPT_RTSP_TRANSPORT          ByteString
- -- CURLOPT_RTSP_HEADER             [ByteString]
-  | CURLOPT_RTSP_CLIENT_CSEQ        Int
-  | CURLOPT_RTSP_SERVER_CSEQ        Int
-
-  ---- PROTOCOL OPTIONS -------------------------------------------------------
-  | CURLOPT_TRANSFERTEXT            Bool
-  | CURLOPT_PROXY_TRANSFER_MODE     Bool
-  | CURLOPT_CRLF                    Bool
-  | CURLOPT_RANGE                   ByteString
-  | CURLOPT_RESUME_FROM             Int
-  | CURLOPT_RESUME_FROM_LARGE       Int64
-  | CURLOPT_CUSTOMREQUEST           ByteString
-  | CURLOPT_FILETIME                Bool
-  | CURLOPT_NOBODY                  Bool
-  | CURLOPT_INFILESIZE              Int
-  | CURLOPT_INFILESIZE_LARGE        Int64
-  | CURLOPT_UPLOAD                  Bool
-  | CURLOPT_MAXFILESIZE             Int
-  | CURLOPT_MAXFILESIZE_LARGE       Int64
-  | CURLOPT_TIMECONDITION           CURLtimecond
-  | CURLOPT_TIMEVALUE               UTCTime
-
-  ---- CONNECTION OPTIONS -----------------------------------------------------
-  | CURLOPT_TIMEOUT                 Int
-  | CURLOPT_TIMEOUT_MS              Int
-  | CURLOPT_LOW_SPEED_LIMIT         Int
-  | CURLOPT_LOW_SPEED_TIME          Int
-  | CURLOPT_MAX_SEND_SPEED_LARGE    Int64
-  | CURLOPT_MAX_RECV_SPEED_LARGE    Int64
-  | CURLOPT_MAXCONNECTS             Int
-  | CURLOPT_CLOSEPOLICY             CURLclosepol
-  | CURLOPT_FRESH_CONNECT           Bool
-  | CURLOPT_FORBID_REUSE            Bool
-  | CURLOPT_CONNECTTIMEOUT          Int
-  | CURLOPT_CONNECTTIMEOUT_MS       Int
-  | CURLOPT_IPRESOLVE               CURLipresolve
-  | CURLOPT_CONNECT_ONLY            Bool
-  | CURLOPT_USE_SSL                 CURLusessl
- -- CURLOPT_RESOLVE                 [ByteString]  |7213:----|
-  | CURLOPT_DNS_SERVERS             ByteString    |7240:----|
-  | CURLOPT_ACCEPTTIMEOUT_MS        Int           |7240:----|
-
-  ---- SSL and SECURITY OPTIONS -----------------------------------------------
-  | CURLOPT_SSLCERT                 ByteString
-  | CURLOPT_SSLCERTTYPE             ByteString
-  | CURLOPT_SSLKEY                  ByteString
-  | CURLOPT_SSLKEYTYPE              ByteString
-  | CURLOPT_KEYPASSWD               ByteString
-  | CURLOPT_SSLENGINE               ByteString
-  | CURLOPT_SSLENGINE_DEFAULT       Bool
-  | CURLOPT_SSLVERSION              CURLsslver
-  | CURLOPT_SSL_VERIFYPEER          Bool
-  | CURLOPT_CAINFO                  ByteString
-  | CURLOPT_ISSUERCERT              ByteString
-  | CURLOPT_CAPATH                  ByteString
-  | CURLOPT_CRLFILE                 ByteString
-  | CURLOPT_SSL_VERIFYHOST          Int
-  | CURLOPT_CERTINFO                Bool
-  | CURLOPT_RANDOM_FILE             ByteString
-  | CURLOPT_EGDSOCKET               ByteString
-  | CURLOPT_SSL_CIPHER_LIST         ByteString
-  | CURLOPT_SSL_SESSIONID_CACHE     Bool
-  | CURLOPT_SSL_OPTIONS             CURLsslopt    |7250:----|
-  | CURLOPT_KRBLEVEL                ByteString
-  | CURLOPT_GSSAPI_DELEGATION       CURLgssapi    |7220:----|
-
-  ---- SSH OPTIONS ------------------------------------------------------------
-  | CURLOPT_SSH_AUTH_TYPES          [CURLsshauth]
-  | CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 ByteString
-  | CURLOPT_SSH_PUBLIC_KEYFILE      ByteString
-  | CURLOPT_SSH_PRIVATE_KEYFILE     ByteString
-  | CURLOPT_SSH_KNOWNHOSTS          ByteString
- -- CURLOPT_SSH_KEYFUNCTION         (Maybe CURL_sshkey_callback)
- -- CURLOPT_SSH_KEYDATA             -- ?
-
-  ---- OTHER OPTIONS ----------------------------------------------------------
- -- CURLOPT_PRIVATE                 -- ?
- -- CURLOPT_SHARE                   CURLSH
-  | CURLOPT_NEW_FILE_PERMS          Int
-  | CURLOPT_NEW_DIRECTORY_PERMS     Int
-
-  ---- TELNET OPTIONS ---------------------------------------------------------
- -- CURLOPT_TELNETOPTIONS           [ByteString]
-
-
--------------------------------------------------------------------------------
-data CURLproto
-  = CURLPROTO_ALL
-  | CURLPROTO_HTTP
-  | CURLPROTO_HTTPS
-  | CURLPROTO_FTP
-  | CURLPROTO_FTPS
-  | CURLPROTO_SCP
-  | CURLPROTO_SFTP
-  | CURLPROTO_TELNET
-  | CURLPROTO_LDAP
-  | CURLPROTO_LDAPS
-  | CURLPROTO_DICT
-  | CURLPROTO_FILE
-  | CURLPROTO_TFTP
-  | CURLPROTO_IMAP
-  | CURLPROTO_IMAPS
-  | CURLPROTO_POP3
-  | CURLPROTO_POP3S
-  | CURLPROTO_SMTP
-  | CURLPROTO_SMTPS
-  | CURLPROTO_RTSP
-  | CURLPROTO_RTMP   |7210:----|
-  | CURLPROTO_RTMPT  |7210:----|
-  | CURLPROTO_RTMPE  |7210:----|
-  | CURLPROTO_RTMPTE |7210:----|
-  | CURLPROTO_RTMPS  |7210:----|
-  | CURLPROTO_RTMPTS |7210:----|
-  | CURLPROTO_GOPHER |7212:----|
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLproxy
-  = CURLPROXY_HTTP
-  | CURLPROXY_HTTP_1_0
-  | CURLPROXY_SOCKS4
-  | CURLPROXY_SOCKS5
-  | CURLPROXY_SOCKS4A
-  | CURLPROXY_SOCKS5_HOSTNAME
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLnetrc
-  = CURL_NETRC_IGNORED
-  | CURL_NETRC_OPTIONAL
-  | CURL_NETRC_REQUIRED
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLauth
-  = CURLAUTH_BASIC
-  | CURLAUTH_DIGEST
-  | CURLAUTH_DIGEST_IE
-  | CURLAUTH_GSSNEGOTIATE
-  | CURLAUTH_NTLM
-  | CURLAUTH_NTLM_WB      |7220:----|
-  | CURLAUTH_ONLY         |7213:----|
-  | CURLAUTH_ANY
-  | CURLAUTH_ANYSAFE
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLtlsauth                                                 |7214:----|
-  = CURL_TLSAUTH_SRP                                             |7214:----|
-  deriving (Eq, Show)                                            |7214:----|
-
-
--------------------------------------------------------------------------------
-data CURLredir
-  = CURL_REDIR_GET_ALL
-  | CURL_REDIR_POST_301
-  | CURL_REDIR_POST_302
-  | CURL_REDIR_POST_ALL
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLhttpver
-  = CURL_HTTP_VERSION_NONE
-  | CURL_HTTP_VERSION_1_0
-  | CURL_HTTP_VERSION_1_1
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLftpcreate
-  = CURLFTP_CREATE_DIR_NONE
-  | CURLFTP_CREATE_DIR
-  | CURLFTP_CREATE_DIR_RETRY
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLftpauth
-  = CURLFTPAUTH_DEFAULT
-  | CURLFTPAUTH_SSL
-  | CURLFTPAUTH_TLS
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLftpssl
-  = CURLFTPSSL_CCC_NONE
-  | CURLFTPSSL_CCC_PASSIVE
-  | CURLFTPSSL_CCC_ACTIVE
-  deriving (Eq, Show)
- 
-
--------------------------------------------------------------------------------
-data CURLftpmethod
-  = CURLFTPMETHOD_DEFAULT
-  | CURLFTPMETHOD_MULTICWD
-  | CURLFTPMETHOD_NOCWD
-  | CURLFTPMETHOD_SINGLECWD
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLrtspreq
-  = CURL_RTSPREQ_OPTIONS
-  | CURL_RTSPREQ_DESCRIBE
-  | CURL_RTSPREQ_ANNOUNCE
-  | CURL_RTSPREQ_SETUP
-  | CURL_RTSPREQ_PLAY
-  | CURL_RTSPREQ_PAUSE
-  | CURL_RTSPREQ_TEARDOWN
-  | CURL_RTSPREQ_GET_PARAMETER
-  | CURL_RTSPREQ_SET_PARAMETER
-  | CURL_RTSPREQ_RECORD
-  | CURL_RTSPREQ_RECEIVE
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLtimecond
-  = CURL_TIMECOND_NONE
-  | CURL_TIMECOND_IFMODSINCE
-  | CURL_TIMECOND_IFUNMODSINCE
-  | CURL_TIMECOND_LASTMOD
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLclosepol
-  = CURLCLOSEPOLICY_NONE
-  | CURLCLOSEPOLICY_OLDEST
-  | CURLCLOSEPOLICY_LEAST_RECENTLY_USED
-  | CURLCLOSEPOLICY_LEAST_TRAFFIC
-  | CURLCLOSEPOLICY_SLOWEST
-  | CURLCLOSEPOLICY_CALLBACK
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLipresolve
-  = CURL_IPRESOLVE_WHATEVER
-  | CURL_IPRESOLVE_V4
-  | CURL_IPRESOLVE_V6
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLusessl
-  = CURLUSESSL_NONE
-  | CURLUSESSL_TRY
-  | CURLUSESSL_CONTROL
-  | CURLUSESSL_ALL
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLsslver
-  = CURL_SSLVERSION_DEFAULT
-  | CURL_SSLVERSION_TLSv1
-  | CURL_SSLVERSION_SSLv2
-  | CURL_SSLVERSION_SSLv3
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-data CURLsslopt                                                  |7250:----|
-  = CURLSSLOPT_ALLOW_BEAST                                       |7250:----|
-  deriving (Eq, Show)                                            |7250:----|
-
-
--------------------------------------------------------------------------------
-data CURLgssapi                                                  |7220:----|
-  = CURLGSSAPI_DELEGATION_NONE                                   |7220:----|
-  | CURLGSSAPI_DELEGATION_POLICY_FLAG                            |7220:----|
-  | CURLGSSAPI_DELEGATION_FLAG                                   |7220:----|
-  deriving (Eq, Show)                                            |7220:----|
-
-
--------------------------------------------------------------------------------
-data CURLsshauth
-  = CURLSSH_AUTH_ANY
-  | CURLSSH_AUTH_NONE
-  | CURLSSH_AUTH_PUBLICKEY
-  | CURLSSH_AUTH_PASSWORD
-  | CURLSSH_AUTH_HOST
-  | CURLSSH_AUTH_KEYBOARD
-  | CURLSSH_AUTH_DEFAULT
-  deriving (Eq, Show)
-
-
--------------------------------------------------------------------------------
-type CURL_write_callback = ByteString -> IO CURL_write_response
-
-data CURL_write_response
-  = CURL_WRITEFUNC_OK
-  | CURL_WRITEFUNC_FAIL
-  | CURL_WRITEFUNC_PAUSE
-  deriving (Eq)
-
-
-type CURL_read_callback = Int -> IO CURL_read_response
-
-data CURL_read_response
-  = CURL_READFUNC_OK ByteString
-  | CURL_READFUNC_ABORT
-  | CURL_READFUNC_PAUSE
-  deriving (Eq)
-
-
diff --git a/src/VKNews.hs b/src/VKNews.hs
--- a/src/VKNews.hs
+++ b/src/VKNews.hs
@@ -23,6 +23,7 @@
 import Text.RegexPR
 import Web.VKHS as VK hiding (api,api')
 import Web.VKHS.API.Monad as VK
+import Network.CURL730
 
 data Options = Options
   { verb :: Verbosity
@@ -125,7 +126,7 @@
 
 
 main :: IO ()
-main = do
+main = withlib CURL730 $ do
   hSetBuffering stdout NoBuffering
   hSetBuffering stderr NoBuffering
   at <- fromMaybe [] <$> lookupEnv env_var_name
diff --git a/src/VKQ.hs b/src/VKQ.hs
--- a/src/VKQ.hs
+++ b/src/VKQ.hs
@@ -26,6 +26,7 @@
 import Web.VKHS.Curl
 import Web.VKHS.API.Aeson as A
 import Web.VKHS.API.Base as STR
+import Network.CURL730
 
 data Options = Options
   { verb :: Verbosity
@@ -161,7 +162,7 @@
 checkRight (Right a) = return a
 
 main :: IO ()
-main = do
+main = withlib CURL730 $ do
   m <- maybe (idm) (value) <$> lookupEnv "VKQ_ACCESS_TOKEN"
   execParser (info (helper <*> opts m) (fullDesc <> header "Vkontakte social network tool")) >>= cmd
 
diff --git a/src/Web/VKHS/API/Base.hs b/src/Web/VKHS/API/Base.hs
--- a/src/Web/VKHS/API/Base.hs
+++ b/src/Web/VKHS/API/Base.hs
@@ -12,7 +12,7 @@
 import qualified Data.ByteString.UTF8 as U
 import qualified Data.ByteString as BS
 
-import Network.Curlhs.Core
+import Network.CURL730
 
 import Network.Protocol.Http ()
 import Network.Protocol.Uri
@@ -40,6 +40,6 @@
 api e mn mp =
   let uri = showUri $ (\f -> f $ toUri $ printf "https://api.vk.com/method/%s" mn) $
               set query $ bw params (("access_token",(access_token . sub) e):mp)
-  in vk_curl_payload e (tell [CURLOPT_URL $ U.fromString uri])
+  in vk_curl_payload e (tell [CURLOPT_URL uri])
 
 
diff --git a/src/Web/VKHS/Curl.hs b/src/Web/VKHS/Curl.hs
--- a/src/Web/VKHS/Curl.hs
+++ b/src/Web/VKHS/Curl.hs
@@ -17,7 +17,7 @@
 import Control.Concurrent (threadDelay)
 import Control.Monad.Writer
 
-import Network.Curlhs.Core
+import Network.CURL730
 
 import Prelude hiding (catch)
 
@@ -38,24 +38,25 @@
     d <- askE delay_ms
     do
         buff <- newIORef BS.empty
-        bracket (curl_easy_init) (curl_easy_cleanup) $ \curl -> do {
-            let 
-                memwrite n = atomicModifyIORef buff
-                    (\o -> (BS.append o n, CURL_WRITEFUNC_OK))
-            in
-            curl_easy_setopt curl $
-                [ CURLOPT_HEADER         True
-                , CURLOPT_WRITEFUNCTION (Just $ memwrite)
-                , CURLOPT_SSL_VERIFYPEER False
-                , CURLOPT_USERAGENT $ BS.pack $ map BS.c2w a
-                , CURLOPT_VERBOSE (v == Debug )
-                ] ++ (execWriter w);
-            curl_easy_perform curl;
-            threadDelay (1000 * d); -- convert ms to us
-            b <- readIORef buff ;
-            return (Right b) ;
+        do {
+          bracket (curl_easy_init) (curl_easy_cleanup) $ \curl ->
+              let 
+                  memwrite n = atomicModifyIORef buff
+                      (\o -> (BS.append o n, CURL_WRITEFUNC_OK))
+              in do
+              curl_easy_setopt curl $
+                  [ CURLOPT_HEADER         True
+                  , CURLOPT_WRITEFUNCTION (Just $ memwrite)
+                  , CURLOPT_SSL_VERIFYPEER False
+                  , CURLOPT_USERAGENT a
+                  , CURLOPT_VERBOSE (v == Debug )
+                  ] ++ (execWriter w);
+              curl_easy_perform curl;
+              threadDelay (1000 * d); -- convert ms to us
+              b <- readIORef buff ;
+              return (Right b) ;
         } `catch`
-            (\(e::CURLcode) -> return $ Left ("CURL error: " ++ (show e)))
+            (\(e::CURLE) -> return $ Left ("CURL error: " ++ (show e)))
 
 scanPattern pat s =
   let (_,o,x,n) = BS.foldl' check (False, BS.empty, BS.empty, BS.empty) s
@@ -122,9 +123,9 @@
                 [ CURLOPT_HEADER         True
                 , CURLOPT_WRITEFUNCTION (Just $ filewrite)
                 , CURLOPT_SSL_VERIFYPEER False
-                , CURLOPT_USERAGENT $ BS.pack $ map BS.c2w a
+                , CURLOPT_USERAGENT a
                 , CURLOPT_VERBOSE (v == Debug)
-                , CURLOPT_URL (BS.pack $ map BS.c2w url)
+                , CURLOPT_URL url
                 ]; 
 
             curl_easy_perform curl;
@@ -134,7 +135,7 @@
               Working _ -> return $ Right ()
               _         -> return $ Left "HTTP header detection failure"
         } `catch`
-            (\(e::CURLcode) -> return $ Left ("CURL error: " ++ (show e)))
+            (\(e::CURLE) -> return $ Left ("CURL error: " ++ (show e)))
 
 
 -- | Return HTTP payload, ignore headers
@@ -162,7 +163,7 @@
                 [ CURLOPT_HEADER         True
                 , CURLOPT_WRITEFUNCTION (Just $ writer)
                 , CURLOPT_SSL_VERIFYPEER False
-                , CURLOPT_USERAGENT $ BS.pack $ map BS.c2w a
+                , CURLOPT_USERAGENT a
                 , CURLOPT_VERBOSE (v == Debug)
                 ] ++ (execWriter w); 
             curl_easy_perform curl;
@@ -172,5 +173,5 @@
               Working _ -> return $ Right buff
               _         -> return $ Left "HTTP header detection failure"
         } `catch`
-            (\(e::CURLcode) -> return $ Left ("CURL error: " ++ (show e)))
+            (\(e::CURLE) -> return $ Left ("CURL error: " ++ (show e)))
 
diff --git a/src/Web/VKHS/Login.hs b/src/Web/VKHS/Login.hs
--- a/src/Web/VKHS/Login.hs
+++ b/src/Web/VKHS/Login.hs
@@ -28,7 +28,7 @@
 import Data.Maybe
 import Data.Typeable
 
-import Network.Curlhs.Core
+import Network.CURL730
 import Network.Protocol.Http
 import Network.Protocol.Uri
 import Network.Protocol.Uri.Query
@@ -129,29 +129,29 @@
 -- | Send a get-request to the server
 vk_get :: Uri -> Cookies -> VK Page
 vk_get u c = let
-    c' = (VKHS.pack $ bw cookie $ map toShort $ bw gather c )
-    u' = (VKHS.pack $ showUri u)
+    c' = (bw cookie $ map toShort $ bw gather c )
+    u' = (showUri u)
     in do
         e <- ask
         s <- liftEIO $ vk_curl e $ do
-            when ((not . BS.null) c') $ do
+            when ((not . null) c') $ do
                 tell [CURLOPT_COOKIE c']
-            when ((not . BS.null) u') $ do
+            when ((not . null) u') $ do
                 tell [CURLOPT_URL u']
         liftVK (return $ parseResponse $ VKHS.unpack s)
 
 -- | Send a form to the server.
 vk_post :: FilledForm -> Cookies -> VK Page
 vk_post f c = let
-    c' = (VKHS.pack $ bw cookie $ map toShort $ bw gather c )
-    p' = (VKHS.pack $ bw params $ M.toList $ inputs f)
-    u' = (VKHS.pack $ action f)
+    c' = (bw cookie $ map toShort $ bw gather c )
+    p' = (bw params $ M.toList $ inputs f)
+    u' = (action f)
     in do
         e <- ask
         s <- liftEIO $ vk_curl e $ do
-            when ((not . BS.null) c') $ do
+            when ((not . null) c') $ do
                 tell [CURLOPT_COOKIE c']
-            when ((not . BS.null) u') $ do
+            when ((not . null) u') $ do
                 tell [CURLOPT_URL u']
             tell [CURLOPT_POST True]
             tell [CURLOPT_COPYPOSTFIELDS p']
