packages feed

chs-deps (empty) → 0.1.0.0

raw patch · 9 files changed

+967/−0 lines, 9 filesdep +arraydep +basedep +bytestring

Dependencies added: array, base, bytestring, chs-deps, criterion, tasty, tasty-hunit

Files

+ CHANGELOG.md view
@@ -0,0 +1,5 @@+# chs-deps++## 0.1.0.0++Initial release
+ LICENSE view
@@ -0,0 +1,11 @@+Copyright Vanessa McHale (c) 2019++Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:++1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.++2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.++3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,13 @@+# chs-deps++[![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/chs-deps/badge)](https://matrix.hackage.haskell.org/package/chs-deps)+[![Hackage](https://img.shields.io/hackage/v/chs-deps.svg)](http://hackage.haskell.org/package/chs-deps)+[![Dependencies of latest version on Hackage](https://img.shields.io/hackage-deps/v/chs-deps.svg)](https://hackage.haskell.org/package/chs-deps)++This is a package somewhat like+[cdeps](https://hackage.haskell.org/package/cdeps) which scans `.chs` files for+dependencies.++It can be used with [shake](http://hackage.haskell.org/package/shake) or+as part of a custom [Cabal](http://hackage.haskell.org/package/Cabal)+`Setup.hs`.
+ bench/Bench.hs view
@@ -0,0 +1,14 @@+module Main (main) where++import           Criterion.Main+import qualified Data.ByteString.Lazy      as BSL+import           Language.Haskell.CHs.Deps++main :: IO ()+main =+    defaultMain [ env sample $ \f ->+                  bgroup "chs"+                      [ bench "getImports" $ nf getImports f ]+                ]+    where+        sample = BSL.readFile "bench/data/Sample.chs"
+ bench/data/Sample.chs view
@@ -0,0 +1,681 @@+-- | This module corresponds to @archive.h@+--+-- Functions in this module are stateful and hence take place in the 'IO'+-- monad.+module Codec.Archive.Foreign.Archive ( archiveReadHasEncryptedEntries+                                     -- * Version information+                                     , archiveVersionNumber+                                     , archiveVersionString+                                     , archiveVersionDetails+                                     , archiveZlibVersion+                                     , archiveLiblzmaVersion+                                     , archiveBzlibVersion+                                     , archiveLiblz4Version+                                     , archiveLibzstdVersion+                                     -- * Miscellany+                                     , archiveErrorString+                                     , archiveFormatName+                                     , archiveFormat+                                     , archiveClearError+                                     , archiveSetError+                                     , archiveCopyError+                                     , archiveFileCount+                                     , archiveFilterCount+                                     , archiveFilterBytes+                                     , archiveFilterCode+                                     , archiveFilterName+                                     -- * Read+                                     , archiveReadData+                                     , archiveReadNew+                                     , archiveReadSetOpenCallback+                                     , archiveReadSetSeekCallback+                                     , archiveReadSetSkipCallback+                                     , archiveReadSetSwitchCallback+                                     , archiveReadSetCallbackData2+                                     , archiveReadAddCallbackData+                                     , archiveReadAppendCallbackData+                                     , archiveReadPrependCallbackData+                                     , archiveReadSetReadCallback+                                     , archiveReadSetCloseCallback+                                     , archiveReadSetCallbackData+                                     , archiveReadSetFormat+                                     , archiveReadOpen+                                     , archiveReadOpenFilename+                                     , archiveReadOpenFilenameW+                                     , archiveReadOpenFilenames+                                     , archiveReadOpenMemory+                                     , archiveReadOpen1+                                     , archiveReadOpen2+                                     , archiveReadOpenFd+                                     , archiveReadOpenFILE+                                     , archiveReadNextHeader+                                     , archiveReadNextHeader2+                                     , archiveReadHeaderPosition+                                     , archiveReadFormatCapabilities+                                     , archiveSeekData+                                     , archiveReadDataBlock+                                     , archiveReadDataIntoFd+                                     , archiveReadSetFormatOption+                                     , archiveReadSetFilterOption+                                     , archiveReadSetOption+                                     , archiveReadSetOptions+                                     , archiveReadAddPassphrase+                                     , archiveReadSetPassphraseCallback+                                     , archiveReadExtract+                                     , archiveReadExtract2+                                     , archiveReadExtractSetProgressCallback+                                     , archiveReadExtractSetSkipFile+                                     , archiveReadClose+                                     , archiveReadFree+                                     , archiveReadSupportFilterAll+                                     , archiveReadSupportFilterBzip2+                                     , archiveReadSupportFilterCompress+                                     , archiveReadSupportFilterGzip+                                     , archiveReadSupportFilterGrzip+                                     , archiveReadSupportFilterLrzip+                                     , archiveReadSupportFilterLz4+                                     , archiveReadSupportFilterLzip+                                     , archiveReadSupportFilterLzma+                                     , archiveReadSupportFilterLzop+                                     , archiveReadSupportFilterNone+                                     , archiveReadSupportFilterProgram+                                     , archiveReadSupportFilterProgramSignature+                                     , archiveReadSupportFilterRpm+                                     , archiveReadSupportFilterUu+                                     , archiveReadSupportFilterXz+                                     , archiveReadSupportFormatAll+                                     , archiveReadSupportFormat7zip+                                     , archiveReadSupportFormatAr+                                     , archiveReadSupportFormatByCode+                                     , archiveReadSupportFormatCab+                                     , archiveReadSupportFormatCpio+                                     , archiveReadSupportFormatEmpty+                                     , archiveReadSupportFormatGnutar+                                     , archiveReadSupportFormatIso9660+                                     , archiveReadSupportFormatLha+                                     , archiveReadSupportFormatMtree+                                     , archiveReadSupportFormatRar+                                     , archiveReadSupportFormatRar5+                                     , archiveReadSupportFormatRaw+                                     , archiveReadSupportFormatTar+                                     , archiveReadSupportFormatWarc+                                     , archiveReadSupportFormatXar+                                     , archiveReadSupportFormatZip+                                     , archiveReadSupportFormatZipStreamable+                                     , archiveReadSupportFormatZipSeekable+                                     , archiveReadAppendFilter+                                     , archiveReadAppendFilterProgram+                                     , archiveReadAppendFilterProgramSignature+                                     -- * Write+                                     , archiveWriteOpenMemory+                                     , archiveWriteNew+                                     , archiveWriteData+                                     , archiveWriteOpen+                                     , archiveWriteClose+                                     , archiveWriteHeader+                                     , archiveWriteSetBytesPerBlock+                                     , archiveWriteGetBytesPerBlock+                                     , archiveWriteSetBytesInLastBlock+                                     , archiveWriteGetBytesInLastBlock+                                     , archiveWriteSetSkipFile+                                     , archiveWriteAddFilter+                                     , archiveWriteAddFilterByName+                                     , archiveWriteAddFilterB64encode+                                     , archiveWriteAddFilterBzip2+                                     , archiveWriteAddFilterCompress+                                     , archiveWriteAddFilterGrzip+                                     , archiveWriteAddFilterLrzip+                                     , archiveWriteAddFilterLz4+                                     , archiveWriteAddFilterLzma+                                     , archiveWriteAddFilterLzip+                                     , archiveWriteAddFilterLzop+                                     , archiveWriteAddFilterNone+                                     , archiveWriteAddFilterProgram+                                     , archiveWriteAddFilterUuencode+                                     , archiveWriteAddFilterXz+                                     , archiveWriteAddFilterZstd+                                     , archiveWriteSetFormat+                                     , archiveWriteSetFormatByName+                                     , archiveWriteSetFormatArBsd+                                     , archiveWriteSetFormatArSvr4+                                     , archiveWriteSetFormatCpio+                                     , archiveWriteSetFormatCpioNewc+                                     , archiveWriteSetFormatGnutar+                                     , archiveWriteSetFormatMtree+                                     , archiveWriteSetFormatMtreeClassic+                                     , archiveWriteSetFormatPax+                                     , archiveWriteSetFormatPaxRestricted+                                     , archiveWriteSetFormatZip+                                     , archiveWriteSetFormat7zip+                                     , archiveWriteSetFormatRaw+                                     , archiveWriteSetFormatShar+                                     , archiveWriteSetFormatSharDump+                                     , archiveWriteSetFormatUstar+                                     , archiveWriteSetFormatV7tar+                                     , archiveWriteSetFormatWarc+                                     , archiveWriteSetFormatXar+                                     , archiveWriteSetFormatFilterByExt+                                     , archiveWriteSetFormatFilterByExtDef+                                     , archiveWriteZipSetCompressionDeflate+                                     , archiveWriteZipSetCompressionStore+                                     , archiveWriteOpenFd+                                     , archiveWriteOpenFilenameW+                                     , archiveWriteOpenFilename+                                     , archiveWriteOpenFILE+                                     , archiveWriteDataBlock+                                     , archiveWriteFinishEntry+                                     , archiveWriteFail+                                     , archiveWriteFree+                                     , archiveWriteSetFormatOption+                                     , archiveWriteSetFilterOption+                                     , archiveWriteSetOption+                                     , archiveWriteSetOptions+                                     , archiveWriteSetPassphrase+                                     , archiveWriteSetPassphraseCallback+                                     -- * Write disk+                                     , archiveWriteDiskSetOptions+                                     , archiveWriteDiskNew+                                     , archiveWriteDiskSetSkipFile+                                     , archiveWriteDiskSetStandardLookup+                                     , archiveWriteDiskSetGroupLookup+                                     , archiveWriteDiskSetUserLookup+                                     , archiveWriteDiskGid+                                     , archiveWriteDiskUid+                                     -- * Read disk+                                     , archiveReadDiskNew+                                     , archiveReadDiskSetSymlinkLogical+                                     , archiveReadDiskSetSymlinkPhysical+                                     , archiveReadDiskSetSymlinkHybrid+                                     , archiveReadDiskEntryFromFile+                                     , archiveReadDiskGname+                                     , archiveReadDiskUname+                                     , archiveReadDiskSetStandardLookup+                                     , archiveReadDiskSetGnameLookup+                                     , archiveReadDiskSetUnameLookup+                                     , archiveReadDiskOpen+                                     , archiveReadDiskOpenW+                                     , archiveReadDiskDescend+                                     , archiveReadDiskCanDescend+                                     , archiveReadDiskCurrentFilesystem+                                     , archiveReadDiskCurrentFilesystemIsSynthetic+                                     , archiveReadDiskCurrentFilesystemIsRemote+                                     , archiveReadDiskSetAtimeRestored+                                     , archiveReadDiskSetBehavior+                                     , archiveReadDiskSetMatching+                                     , archiveReadDiskSetMetadataFilterCallback+                                     -- * Version macros+                                     , archiveVersionNumberMacro+                                     , archiveVersionOnlyString+                                     , archiveVersionStringMacro+                                     -- * Capability macros+                                     , archiveReadFormatCapsNone+                                     , archiveReadFormatCapsEncryptData+                                     , archiveReadFormatCapsEncryptMetadata+                                     -- * Time matching macros+                                     , archiveMatchMTime+                                     , archiveMatchCTime+                                     , archiveMatchNewer+                                     , archiveMatchOlder+                                     , archiveMatchEqual+                                     -- * Entry flags+                                     , archiveExtractOwner+                                     , archiveExtractPerm+                                     , archiveExtractTime+                                     , archiveExtractNoOverwrite+                                     , archiveExtractUnlink+                                     , archiveExtractACL+                                     , archiveExtractFFlags+                                     , archiveExtractXattr+                                     , archiveExtractSecureSymlinks+                                     , archiveExtractSecureNoDotDot+                                     , archiveExtractNoAutodir+                                     , archiveExtractSparse+                                     , archiveExtractMacMetadata+                                     , archiveExtractNoHfsCompression+                                     , archiveExtractHfsCompressionForced+                                     , archiveExtractSecureNoAbsolutePaths+                                     , archiveExtractClearNoChangeFFlags+                                     , archiveExtractNoOverwriteNewer+                                     -- * Read disk flags+                                     , archiveReadDiskRestoreATime+                                     , archiveReadDiskHonorNoDump+                                     , archiveReadDiskMacCopyFile+                                     , archiveReadDiskNoTraverseMounts+                                     , archiveReadDiskNoXattr+                                     , archiveFree+                                     , archiveMatchExcluded+                                     , archiveMatchPathExcluded+                                     , archiveMatchSetInclusionRecursion+                                     , archiveMatchExcludePattern+                                     , archiveMatchExcludePatternW+                                     , archiveMatchIncludePattern+                                     , archiveMatchIncludePatternW+                                     , archiveMatchExcludePatternFromFile+                                     , archiveMatchExcludePatternFromFileW+                                     , archiveMatchIncludePatternFromFile+                                     , archiveMatchIncludePatternFromFileW+                                     , archiveMatchPathUnmatchedInclusions+                                     , archiveMatchPathUnmatchedInclusionsNext+                                     , archiveMatchPathUnmatchedInclusionsNextW+                                     , archiveMatchIncludeTime+                                     , archiveMatchIncludeDate+                                     , archiveMatchIncludeDateW+                                     , archiveMatchIncludeFileTime+                                     , archiveMatchIncludeFileTimeW+                                     , archiveMatchTimeExcluded+                                     , archiveMatchOwnerExcluded+                                     , archiveMatchExcludeEntry+                                     , archiveReadDataSkip+                                     , archiveMatchIncludeGname+                                     , archiveMatchIncludeGnameW+                                     , archiveMatchIncludeUname+                                     , archiveMatchIncludeUnameW+                                     , archiveMatchIncludeUid+                                     , archiveMatchIncludeGid+                                     , archiveErrno+                                     -- * Abstract types+                                     , Archive+                                     -- * Haskell types+                                     , ArchiveEncryption (..)+                                     -- * Enum types+                                     , ArchiveFilter (..)+                                     , ArchiveFormat (..)+                                     -- * Lower-level API types+                                     , Flags+                                     , ArchiveCapabilities+                                     , ReadDiskFlags+                                     , TimeFlag+                                     -- * Callback types+                                     , ArchiveReadCallback+                                     , ArchiveSkipCallback+                                     , ArchiveSeekCallback+                                     , ArchiveWriteCallback+                                     , ArchiveOpenCallback+                                     , ArchiveCloseCallback+                                     , ArchiveSwitchCallback+                                     , ArchiveOpenCallbackRaw+                                     , ArchiveCloseCallbackRaw+                                     , ArchiveSwitchCallbackRaw+                                     , ArchivePassphraseCallback+                                     -- * Callback constructors+                                     , noOpenCallback+                                     , mkReadCallback+                                     , mkSkipCallback+                                     , mkSeekCallback+                                     , mkWriteCallback+                                     , mkPassphraseCallback+                                     , mkOpenCallback+                                     , mkCloseCallback+                                     , mkSwitchCallback+                                     , mkWriteLookup+                                     , mkReadLookup+                                     , mkCleanup+                                     , mkMatch+                                     , mkFilter+                                     , mkExcludedCallback+                                     -- * Type synonyms+                                     , ArchiveEntryPtr+                                     , ArchivePtr+                                     , StatPtr+                                     -- * libarchive types+                                     , LaInt64+                                     , LaSSize+                                     ) where++{# import qualified Codec.Archive.Types.Foreign #}++import Codec.Archive.Foreign.Archive.Macros+import Codec.Archive.Types+import Control.Composition ((.*), (.**))+import Data.Coerce (coerce)+import Foreign.C.String+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Ptr+import Foreign.Storable (Storable (peek))+import System.Posix.Types (Fd (..))++-- destructors: use "dynamic" instead of "wrapper" (but we don't want that)+-- callbacks+foreign import ccall "wrapper" mkReadCallback :: ArchiveReadCallback a b -> IO (FunPtr (ArchiveReadCallback a b))+foreign import ccall "wrapper" mkSkipCallback :: ArchiveSkipCallback a -> IO (FunPtr (ArchiveSkipCallback a))+foreign import ccall "wrapper" mkSeekCallback :: ArchiveSeekCallback a -> IO (FunPtr (ArchiveSeekCallback a))+foreign import ccall "wrapper" mkWriteCallback :: ArchiveWriteCallback a b -> IO (FunPtr (ArchiveWriteCallback a b))+foreign import ccall "wrapper" mkOpenCallbackRaw :: ArchiveOpenCallbackRaw a -> IO (FunPtr (ArchiveOpenCallbackRaw a))+foreign import ccall "wrapper" mkCloseCallbackRaw :: ArchiveCloseCallbackRaw a -> IO (FunPtr (ArchiveCloseCallbackRaw a))+foreign import ccall "wrapper" mkSwitchCallbackRaw :: ArchiveSwitchCallbackRaw a b -> IO (FunPtr (ArchiveSwitchCallbackRaw a b))+foreign import ccall "wrapper" mkPassphraseCallback :: ArchivePassphraseCallback a -> IO (FunPtr (ArchivePassphraseCallback a))+foreign import ccall "wrapper" mkExcludedCallback :: (ArchivePtr -> Ptr a -> ArchiveEntryPtr -> IO ()) -> IO (FunPtr (ArchivePtr -> Ptr a -> ArchiveEntryPtr -> IO ()))++-- | Don't use an open callback. This is the recommended argument to 'archiveReadOpen'+noOpenCallback :: FunPtr (ArchiveOpenCallbackRaw a)+noOpenCallback = castPtrToFunPtr nullPtr++foreign import ccall "wrapper" mkWriteLookup :: (Ptr a -> CString -> LaInt64 -> IO LaInt64) -> IO (FunPtr (Ptr a -> CString -> LaInt64 -> IO LaInt64))+-- | Also for 'archiveReadDiskSetGnameLookup' and 'archiveReadDiskSetUnameLookup'+foreign import ccall "wrapper" mkReadLookup :: (Ptr a -> LaInt64 -> IO CString) -> IO (FunPtr (Ptr a -> LaInt64 -> IO CString))++-- | Can also be used with 'archiveReadExtractSetProgressCallback'+foreign import ccall "wrapper" mkCleanup :: (Ptr a -> IO ()) -> IO (FunPtr (Ptr a -> IO ()))++foreign import ccall "wrapper" mkMatch :: (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO ()) -> IO (FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO ()))+foreign import ccall "wrapper" preMkFilter :: (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt) -> IO (FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt))++mkOpenCallback :: ArchiveOpenCallback a -> IO (FunPtr (ArchiveOpenCallbackRaw a))+mkOpenCallback f = let f' = fmap resultToErr .* f in mkOpenCallbackRaw f'++mkCloseCallback :: ArchiveCloseCallback a -> IO (FunPtr (ArchiveCloseCallbackRaw a))+mkCloseCallback f = let f' = fmap resultToErr .* f in mkCloseCallbackRaw f'++mkSwitchCallback :: ArchiveSwitchCallback a b -> IO (FunPtr (ArchiveSwitchCallbackRaw a b))+mkSwitchCallback f = let f' = fmap resultToErr .** f in mkSwitchCallbackRaw f'++mkFilter :: (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO Bool) -> IO (FunPtr (Ptr Archive -> Ptr a -> Ptr ArchiveEntry -> IO CInt))+mkFilter f = let f' = fmap boolToInt .** f in preMkFilter f'+    where boolToInt False = 0+          boolToInt True  = 1++#include <archive.h>++{#pointer *archive as ArchivePtr -> Archive #}+{#pointer *archive_entry as ArchiveEntryPtr -> ArchiveEntry #}+{#pointer *stat as StatPtr -> Stat #}+{#pointer *FILE as FilePtr newtype#}++{#typedef size_t CSize#}+{#typedef wchar_t CWchar#}+{#typedef la_ssize_t LaSSize#}+{#typedef la_int64_t LaInt64#}+{#typedef time_t CTime#}++{#default in `CWString' [wchar_t*] castPtr#}++{# fun archive_zlib_version as ^ {} -> `CString' #}+{# fun archive_liblzma_version as ^ {} -> `CString' #}+{# fun archive_bzlib_version as ^ {} -> `CString' #}+{# fun archive_liblz4_version as ^ {} -> `CString' #}+{# fun archive_libzstd_version as ^ {} -> `CString' #}++{# fun archive_error_string as ^ { `ArchivePtr' } -> `CString' #}+{# fun archive_format_name as ^ { `ArchivePtr' } -> `CString' #}+{# fun archive_format as ^ { `ArchivePtr' } -> `ArchiveFormat' #}+{# fun archive_clear_error as ^ { `ArchivePtr' } -> `()' #}+{# fun archive_set_error as ^ { `ArchivePtr', `CInt', `CString' } -> `()' #}+{# fun archive_copy_error as ^ { `ArchivePtr', `ArchivePtr' } -> `()' #}+{# fun archive_file_count as ^ { `ArchivePtr' } -> `CInt' #}+{# fun archive_version_number as ^ {} -> `CInt' #}+{# fun archive_version_string as ^ {} -> `String' #}+{# fun archive_version_details as ^ {} -> `String' #}+{# fun archive_filter_count as ^ { `ArchivePtr' } -> `CInt' #}+{# fun archive_filter_bytes as ^ { `ArchivePtr', `CInt' } -> `LaInt64' #}+{# fun archive_filter_code as ^ { `ArchivePtr', `CInt' } -> `Int' #}+{# fun archive_filter_name as ^ { `ArchivePtr', `CInt' } -> `CString' #}++{# fun archive_read_new as ^ {} -> `ArchivePtr' #}++{# fun archive_match_excluded as ^ { `ArchivePtr', `ArchiveEntryPtr' } -> `Bool' #}+{# fun archive_match_path_excluded as ^ { `ArchivePtr', `ArchiveEntryPtr' } -> `Bool' #}+{# fun archive_match_exclude_pattern as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_match_exclude_pattern_w as ^ { `ArchivePtr', `CWString' } -> `ArchiveResult' #}+{# fun archive_match_set_inclusion_recursion as ^ { `ArchivePtr', `Bool' } -> `ArchiveResult' #}+{# fun archive_match_exclude_pattern_from_file as ^ { `ArchivePtr', `CString', `Bool' } -> `ArchiveResult' #}+{# fun archive_match_exclude_pattern_from_file_w as ^ { `ArchivePtr', `CWString', `Bool' } -> `ArchiveResult' #}+{# fun archive_match_include_pattern as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_match_include_pattern_w as ^ { `ArchivePtr', `CWString' } -> `ArchiveResult' #}+{# fun archive_match_include_pattern_from_file as ^ { `ArchivePtr', `CString', `Bool' } -> `ArchiveResult' #}+{# fun archive_match_include_pattern_from_file_w as ^ { `ArchivePtr', `CWString', `Bool' } -> `ArchiveResult' #}+{# fun archive_match_path_unmatched_inclusions as ^ { `ArchivePtr' } -> `CInt' #}+{# fun archive_match_path_unmatched_inclusions_next as ^ { `ArchivePtr', alloca- `CString' peek* } -> `ArchiveResult' #}+{# fun archive_match_path_unmatched_inclusions_next_w as ^ { `ArchivePtr', alloca- `CWString' peek* } -> `ArchiveResult' #}+{# fun archive_match_time_excluded as ^ { `ArchivePtr', `ArchiveEntryPtr' } -> `Bool' #}+{# fun archive_match_include_time as ^ { `ArchivePtr', coerce `TimeFlag', `CTime', `CLong' } -> `ArchiveResult' #}+{# fun archive_match_include_date as ^ { `ArchivePtr', coerce `TimeFlag', `CString' } -> `ArchiveResult' #}+{# fun archive_match_include_date_w as ^ { `ArchivePtr', coerce `TimeFlag', `CWString' } -> `ArchiveResult' #}+{# fun archive_match_include_file_time as ^ { `ArchivePtr', coerce `TimeFlag', `CString' } -> `ArchiveResult' #}+{# fun archive_match_include_file_time_w as ^ { `ArchivePtr', coerce `TimeFlag', `CWString' } -> `ArchiveResult' #}+{# fun archive_match_exclude_entry as ^ { `ArchivePtr', coerce `TimeFlag', `ArchiveEntryPtr' } -> `ArchiveResult' #}++{# fun archive_match_owner_excluded as ^ { `ArchivePtr', `ArchiveEntryPtr' } -> `Bool' #}++{# fun archive_read_set_open_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (ArchiveOpenCallbackRaw a)' } -> `ArchiveResult' #}+{# fun archive_read_set_read_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (ArchiveReadCallback a b)' } -> `ArchiveResult' #}+{# fun archive_read_set_seek_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (ArchiveSeekCallback a)' } -> `ArchiveResult' #}+{# fun archive_read_set_skip_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (ArchiveSeekCallback a)' } -> `ArchiveResult' #}+{# fun archive_read_set_close_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (ArchiveCloseCallbackRaw a)' } -> `ArchiveResult' #}+{# fun archive_read_set_switch_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (ArchiveSwitchCallbackRaw a n)' } -> `ArchiveResult' #}++{# fun archive_read_set_callback_data as ^ { `ArchivePtr', castPtr `Ptr a' } -> `ArchiveResult' #}+{# fun archive_read_set_callback_data2 as ^ { `ArchivePtr', castPtr `Ptr a', `CUInt' } -> `ArchiveResult' #}+{# fun archive_read_add_callback_data as ^ { `ArchivePtr', castPtr `Ptr a', `CUInt' } -> `ArchiveResult' #}+{# fun archive_read_append_callback_data as ^ { `ArchivePtr', castPtr `Ptr a' } -> `ArchiveResult' #}+{# fun archive_read_prepend_callback_data as ^ { `ArchivePtr', castPtr `Ptr a' } -> `ArchiveResult' #}++{# fun archive_read_open1 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_open as ^ { `ArchivePtr'+                              , castPtr `Ptr a'+                              , castFunPtr `FunPtr (ArchiveOpenCallbackRaw a)'+                              , castFunPtr `FunPtr (ArchiveReadCallback a b)'+                              , castFunPtr `FunPtr (ArchiveCloseCallbackRaw a)'+                              } -> `ArchiveResult' #}+{# fun archive_read_open2 as ^ { `ArchivePtr'+                               , castPtr `Ptr a'+                               , castFunPtr `FunPtr (ArchiveOpenCallbackRaw a)'+                               , castFunPtr `FunPtr (ArchiveReadCallback a b)'+                               , castFunPtr `FunPtr (ArchiveSkipCallback a)'+                               , castFunPtr `FunPtr (ArchiveCloseCallbackRaw a)'+                               } -> `ArchiveResult' #}++{# fun archive_read_open_filename as ^ { `ArchivePtr', `CString', `CSize' } -> `ArchiveResult' #}+{# fun archive_read_open_filename_w as ^ { `ArchivePtr', `CWString', `CSize' } -> `ArchiveResult' #}+{# fun archive_read_open_filenames as ^ { `ArchivePtr', id `Ptr CString', `CSize' } -> `ArchiveResult' #}+{# fun archive_read_open_memory as ^ { `ArchivePtr', castPtr `Ptr a', `CSize' } -> `ArchiveResult' #}+{# fun archive_read_open_fd as ^ { `ArchivePtr', coerce `Fd', `CSize' } -> `ArchiveResult' #}+{# fun archive_read_open_FILE as ^ { `ArchivePtr', `FilePtr' } -> `ArchiveResult' #}+{# fun archive_read_next_header as ^ { `ArchivePtr', alloca- `ArchiveEntryPtr' peek* } -> `ArchiveResult' #}+{# fun archive_read_next_header2 as ^ { `ArchivePtr', `ArchiveEntryPtr' } -> `ArchiveResult' #}+{# fun archive_read_header_position as ^ { `ArchivePtr' } -> `LaInt64' #}+{# fun archive_read_has_encrypted_entries as ^ { `ArchivePtr' } -> `ArchiveEncryption' encryptionResult #}+{# fun archive_read_format_capabilities as ^ { `ArchivePtr' } -> `ArchiveCapabilities' ArchiveCapabilities #}+{# fun archive_read_data as ^ { `ArchivePtr', castPtr `Ptr a', `CSize' } -> `LaSSize' #}+{# fun archive_seek_data as ^ { `ArchivePtr', `LaInt64', `CInt' } -> `LaInt64' #}+{# fun archive_read_data_block as ^ { `ArchivePtr', castPtr `Ptr (Ptr a)', id `Ptr CSize', id `Ptr LaInt64' } -> `ArchiveResult' #}+{# fun archive_read_data_skip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_data_into_fd as ^ { `ArchivePtr', coerce `Fd' } -> `ArchiveResult' #}+{# fun archive_read_set_format_option as ^ { `ArchivePtr', `CString', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_read_set_filter_option as ^ { `ArchivePtr', `CString', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_read_set_option as ^ { `ArchivePtr', `CString', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_read_set_options as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}++{# fun archive_read_add_passphrase as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_read_set_passphrase_callback as ^ { `ArchivePtr', castPtr `Ptr a', castFunPtr `FunPtr (ArchivePassphraseCallback a)' } -> `ArchiveResult' #}++{# fun archive_read_extract as ^ { `ArchivePtr', `ArchiveEntryPtr', coerce `Flags' } -> `ArchiveResult' #}+{# fun archive_read_extract2 as ^ { `ArchivePtr', `ArchiveEntryPtr', `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_extract_set_progress_callback as ^ { `ArchivePtr', castFunPtr `FunPtr (Ptr a -> IO ())', castPtr `Ptr a' } -> `()' id #}+{# fun archive_read_extract_set_skip_file as ^ { `ArchivePtr', `LaInt64', `LaInt64' } -> `()' #}+{# fun archive_read_close as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_free as ^ { `ArchivePtr' } -> `ArchiveResult' #}++{# fun archive_write_new as ^ {} -> `ArchivePtr' #}+{# fun archive_write_set_bytes_per_block as ^ { `ArchivePtr', `CInt' } -> `ArchiveResult' #}+{# fun archive_write_get_bytes_per_block as ^ { `ArchivePtr' } -> `CInt' #}+{# fun archive_write_set_bytes_in_last_block as ^ { `ArchivePtr', `CInt' } -> `ArchiveResult' #}+{# fun archive_write_get_bytes_in_last_block as ^ { `ArchivePtr' } -> `CInt' #}+{# fun archive_write_set_skip_file as ^ { `ArchivePtr', `LaInt64', `LaInt64' } -> `ArchiveResult' #}+{# fun archive_write_add_filter as ^ { `ArchivePtr', `ArchiveFilter' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_by_name as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_b64encode as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_bzip2 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_compress as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_grzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_lrzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_lz4 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_lzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_lzma as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_lzop as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_none as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_program as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_uuencode as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_xz as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_add_filter_zstd as ^ { `ArchivePtr' } -> `ArchiveResult' #}++{# fun archive_write_set_format as ^ { `ArchivePtr', `ArchiveFormat' } -> `ArchiveResult' #}+{# fun archive_write_set_format_by_name as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_write_set_format_7zip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_ar_bsd as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_ar_svr4 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_cpio as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_cpio_newc as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_gnutar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_mtree as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_mtree_classic as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_pax as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_pax_restricted as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_raw as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_shar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_shar_dump as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_ustar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_v7tar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_warc as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_xar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_zip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_set_format_filter_by_ext as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_write_set_format_filter_by_ext_def as ^ { `ArchivePtr', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_write_zip_set_compression_deflate as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_zip_set_compression_store as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_open as ^ { `ArchivePtr'+                               , castPtr `Ptr a'+                               , castFunPtr `FunPtr (ArchiveOpenCallbackRaw a)'+                               , castFunPtr `FunPtr (ArchiveWriteCallback a b)'+                               , castFunPtr `FunPtr (ArchiveCloseCallbackRaw a)'+                               } -> `ArchiveResult' #}+{# fun archive_write_open_fd as ^ { `ArchivePtr', coerce `Fd' } -> `ArchiveResult' #}+{# fun archive_write_open_filename as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_write_open_filename_w as ^ { `ArchivePtr', `CWString' } -> `ArchiveResult' #}+{# fun archive_write_open_FILE as ^ { `ArchivePtr', `FilePtr' } -> `ArchiveResult' #}+{# fun archive_write_open_memory as ^ { `ArchivePtr', castPtr `Ptr a' , `CSize', alloca- `CSize' peek* } -> `ArchiveResult' #}++{# fun archive_write_header as ^ { `ArchivePtr', `ArchiveEntryPtr' } -> `ArchiveResult' #}+{# fun archive_write_data as ^ { `ArchivePtr', castPtr `Ptr a', `CSize' } -> `LaSSize' #}+{# fun archive_write_data_block as ^ { `ArchivePtr', castPtr `Ptr a', `CSize', `LaInt64' } -> `LaSSize' #}++{# fun archive_write_finish_entry as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_close as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_fail as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_free as ^ { `ArchivePtr' } -> `ArchiveResult' #}++{# fun archive_write_set_format_option as ^ { `ArchivePtr', `CString', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_write_set_filter_option as ^ { `ArchivePtr', `CString', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_write_set_option as ^ { `ArchivePtr', `CString', `CString', `CString' } -> `ArchiveResult' #}+{# fun archive_write_set_options as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}++{# fun archive_write_set_passphrase as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_write_set_passphrase_callback as ^ { `ArchivePtr', castPtr `Ptr a', castFunPtr `FunPtr (ArchivePassphraseCallback a)' } -> `ArchiveResult' #}+{# fun archive_write_disk_set_options as ^ { `ArchivePtr', coerce `Flags' } -> `ArchiveResult' #}++{# fun archive_write_disk_new as ^ {} -> `ArchivePtr' #}+{# fun archive_write_disk_set_skip_file as ^ { `ArchivePtr', `LaInt64', `LaInt64' } -> `ArchiveResult' #}++{# fun archive_write_disk_set_standard_lookup as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_write_disk_set_group_lookup as ^ { `ArchivePtr'+                                                , castPtr `Ptr a'+                                                , castFunPtr `FunPtr (Ptr a -> CString -> LaInt64 -> IO LaInt64)'+                                                , castFunPtr `FunPtr (Ptr a -> IO ())'+                                                } -> `ArchiveResult' #}+{# fun archive_write_disk_set_user_lookup as ^ { `ArchivePtr'+                                               , castPtr `Ptr a'+                                               , castFunPtr `FunPtr (Ptr a -> CString -> LaInt64 -> IO LaInt64)'+                                               , castFunPtr `FunPtr (Ptr a -> IO ())'+                                               } -> `ArchiveResult' #}+{# fun archive_write_disk_gid as ^ { `ArchivePtr', `CString', `LaInt64' } -> `LaInt64' #}+{# fun archive_write_disk_uid as ^ { `ArchivePtr', `CString', `LaInt64' } -> `LaInt64' #}++{# fun archive_read_disk_new as ^ {} -> `ArchivePtr' #}+{# fun archive_read_disk_set_symlink_logical as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_set_symlink_physical as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_set_symlink_hybrid as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_entry_from_file as ^ { `ArchivePtr', `ArchiveEntryPtr', coerce `Fd', `StatPtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_gname as ^ { `ArchivePtr', `LaInt64' } -> `CString' #}+{# fun archive_read_disk_uname as ^ { `ArchivePtr', `LaInt64' } -> `CString' #}+{# fun archive_read_disk_set_standard_lookup as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_set_gname_lookup as ^ { `ArchivePtr'+                                               , castPtr `Ptr a'+                                               , castFunPtr `FunPtr (Ptr a -> LaInt64 -> IO CString )'+                                               , castFunPtr `FunPtr (Ptr a -> IO ())'+                                               } -> `ArchiveResult' #}+{# fun archive_read_disk_set_uname_lookup as ^ { `ArchivePtr'+                                               , castPtr `Ptr a'+                                               , castFunPtr `FunPtr (Ptr a -> LaInt64 -> IO CString )'+                                               , castFunPtr `FunPtr (Ptr a -> IO ())'+                                               } -> `ArchiveResult' #}+{# fun archive_read_disk_open as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_read_disk_open_w as ^ { `ArchivePtr', `CWString' } -> `ArchiveResult' #}+{# fun archive_read_disk_descend as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_can_descend as ^ { `ArchivePtr' } -> `Bool' #}+{# fun archive_read_disk_current_filesystem as ^ { `ArchivePtr' } -> `CInt' #}+{# fun archive_read_disk_current_filesystem_is_synthetic as ^ { `ArchivePtr' } -> `Bool' #}+{# fun archive_read_disk_current_filesystem_is_remote as ^ { `ArchivePtr' } -> `Bool' #}+{# fun archive_read_disk_set_atime_restored as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_disk_set_behavior as ^ { `ArchivePtr', coerce `Flags' } -> `ArchiveResult' #}++{# fun archive_read_disk_set_matching as ^ { `ArchivePtr'+                                           , `ArchivePtr'+                                           , castFunPtr `FunPtr (ArchivePtr -> Ptr a -> ArchiveEntryPtr -> IO ())'+                                           , castPtr `Ptr a'+                                           } -> `ArchiveResult' #}+{# fun archive_read_disk_set_metadata_filter_callback as ^ { `ArchivePtr'+                                                           , castFunPtr `FunPtr (ArchivePtr -> Ptr a -> ArchiveEntry -> IO CInt)'+                                                           , castPtr `Ptr a'+                                                           } -> `ArchiveResult' #}++{# fun archive_free as ^ { `ArchivePtr' } -> `ArchiveResult' #}++{# fun archive_match_include_gname_w as ^ { `ArchivePtr', `CWString' } -> `ArchiveResult' #}+{# fun archive_match_include_gname as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_match_include_uname_w as ^ { `ArchivePtr', `CWString' } -> `ArchiveResult' #}+{# fun archive_match_include_uname as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_match_include_gid as ^ { `ArchivePtr', coerce `Id' } -> `ArchiveResult' #}+{# fun archive_match_include_uid as ^ { `ArchivePtr', coerce `Id' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_all as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_bzip2 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_compress as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_gzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_grzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_lrzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_lz4 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_lzip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_lzma as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_lzop as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_none as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_program as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_program_signature as ^ { `ArchivePtr', `CString', castPtr `Ptr a', coerce `CSize' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_rpm as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_uu as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_filter_xz as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_7zip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_all as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_ar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_by_code as ^ { `ArchivePtr', `CInt' } -> `ArchiveResult' #}+{# fun archive_read_support_format_cab as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_cpio as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_empty as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_gnutar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_iso9660 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_lha as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_mtree as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_rar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_rar5 as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_raw as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_tar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_warc as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_xar as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_zip as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_zip_streamable as ^ { `ArchivePtr' } -> `ArchiveResult' #}+{# fun archive_read_support_format_zip_seekable as ^ { `ArchivePtr' } -> `ArchiveResult' #}++{# fun archive_read_set_format as ^ { `ArchivePtr', `ArchiveFormat' } -> `ArchiveResult' #}+{# fun archive_read_append_filter as ^ { `ArchivePtr', `CInt' } -> `ArchiveResult' #}+{# fun archive_read_append_filter_program as ^ { `ArchivePtr', `CString' } -> `ArchiveResult' #}+{# fun archive_read_append_filter_program_signature as ^ { `ArchivePtr', `CString', castPtr `Ptr a', `CSize' } -> `ArchiveResult' #}++{# fun archive_errno as ^ { `ArchivePtr' } -> `ArchiveResult' #}
+ chs-deps.cabal view
@@ -0,0 +1,91 @@+cabal-version:      1.18+name:               chs-deps+version:            0.1.0.0+license:            BSD3+license-file:       LICENSE+copyright:          Copyright: (c) 2019 Vanessa McHale+maintainer:         vamchale@gmail.com+author:             Vanessa McHale+synopsis:           c2hs dependency analyzer+description:+    Get c2hs dependencies using [alex](http://hackage.haskell.org/package/alex)++category:           CHs, Development, StaticAnalysis+build-type:         Simple+data-files:         bench/data/Sample.chs+extra-source-files: stack.yaml+extra-doc-files:+    README.md+    CHANGELOG.md++source-repository head+    type:     darcs+    location: https://hub.darcs.net/vmchale/chs-deps++flag cross+    description: Enable when cross-compiling+    default:     False+    manual:      True++library+    exposed-modules:  Language.Haskell.CHs.Deps+    hs-source-dirs:   src+    default-language: Haskell2010+    ghc-options:      -Wall+    build-depends:+        base >=4.3 && <5,+        array -any,+        bytestring -any++    if !flag(cross)+        build-tool-depends: alex:alex >=3.1.5++    if impl(ghc >=8.0)+        ghc-options:+            -Wincomplete-uni-patterns -Wincomplete-record-updates+            -Wredundant-constraints -Widentities++    if impl(ghc >=8.4)+        ghc-options: -Wmissing-export-lists++test-suite chs-deps-test+    type:             exitcode-stdio-1.0+    main-is:          Tasty.hs+    hs-source-dirs:   test+    default-language: Haskell2010+    other-extensions: OverloadedStrings+    ghc-options:      -threaded -rtsopts -with-rtsopts=-N -Wall+    build-depends:+        base -any,+        chs-deps -any,+        tasty -any,+        bytestring >=0.10.0.0,+        tasty-hunit -any++    if impl(ghc >=8.0)+        ghc-options:+            -Wincomplete-uni-patterns -Wincomplete-record-updates+            -Wredundant-constraints -Widentities++    if impl(ghc >=8.4)+        ghc-options: -Wmissing-export-lists++benchmark chs-deps-bench+    type:             exitcode-stdio-1.0+    main-is:          Bench.hs+    hs-source-dirs:   bench+    default-language: Haskell2010+    ghc-options:      -Wall+    build-depends:+        base -any,+        chs-deps -any,+        criterion >=1.0.0.0,+        bytestring >=0.10.0.0++    if impl(ghc >=8.0)+        ghc-options:+            -Wincomplete-uni-patterns -Wincomplete-record-updates+            -Wredundant-constraints -Widentities++    if impl(ghc >=8.4)+        ghc-options: -Wmissing-export-lists
+ src/Language/Haskell/CHs/Deps.x view
@@ -0,0 +1,117 @@+{+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+-- | This contains a partial lexer for @.chs@ files; enough to extract+-- information from @{\#import\#}@ declarations.+--+-- This is lenient in that it will not reject things like+-- {\# import const Data.Char \#}+module Language.Haskell.CHs.Deps ( getImports+                                 , getFileImports+                                 ) where++import Control.Applicative ((<$>))+import qualified Data.ByteString.Lazy as BSL+import qualified Data.ByteString.Lazy.Char8 as ASCII+}++%wrapper "monad-bytestring"++$module = [A-Za-z\.]++tokens :-++    $white+                      ;+    <0> "--".*                   ;++    <0> "{-"                     { \_ _ -> nested_comment }++    <chs> "import"               { \_ _ -> alex Import }+    <chs> "qualified"            ;++    <chs> "type"                 { \_ _ -> alex End }+    <chs> "typedef"              { \_ _ -> alex End }+    <chs> "enum"                 { \_ _ -> alex End }+    <chs> "fun"                  { \_ _ -> alex End }+    <chs> "sizeof"               { \_ _ -> alex End }+    <chs> "alignof"              { \_ _ -> alex End }+    <chs> "const"                { \_ _ -> alex End }+    <chs> "call"                 { \_ _ -> alex End }+    <chs> "get"                  { \_ _ -> alex End }+    <chs> "set"                  { \_ _ -> alex End }+    <chs> "offsetof"             { \_ _ -> alex End }++    <chs> "#}"                   { begin 0 }+    <0> "{#"                     { begin chs }+     +                                 -- this is safe because we only allow ASCII module names+    <chs> $module+               { tok (\_ s -> alex (Module $ ASCII.unpack s)) }++    <0> [^\{]+                   ;+    <0> $printable               ;+    <chs> [^\#$module]+          ;++{++data Token = Import+           | Module String+           | End++tok f (p,_,s,_) len = f p (BSL.take len s)++alex :: a -> Alex a+alex = pure++alexEOF :: Alex Token+alexEOF = pure End++-- | Given a 'BSL.ByteString' containing C2Hs, return a list of modules it @{\#import\#}@s.+getImports :: BSL.ByteString -> Either String [String]+getImports = fmap extractDeps . lexC++getFileImports :: FilePath -> IO (Either String [String])+getFileImports = fmap getImports . BSL.readFile++-- from: https://github.com/simonmar/alex/blob/master/examples/haskell.x#L128+nested_comment :: Alex Token+nested_comment = go 1 =<< alexGetInput++    where go :: Int -> AlexInput -> Alex Token+          go 0 input = alexSetInput input *> alexMonadScan+          go n input =+            case alexGetByte input of+                Nothing -> err input+                Just (c, input') ->+                    case c of+                        45 ->+                            case alexGetByte input' of+                                Nothing -> err input'+                                Just (125,input_) -> go (n-1) input_+                                Just (_,input_) -> go n input_+                        123 ->+                            case alexGetByte input' of+                                Nothing -> err input'+                                Just (c',input_) -> go (addLevel c' $ n) input_+                        _ -> go n input'++          addLevel c' = if c' == 45 then (+1) else id++          err (pos,_,_,_) =+            let (AlexPn _ line col) = pos in+                alexError ("Error in nested comment at line " ++ show line ++ ", column " ++ show col)++extractDeps :: [Token] -> [String]+extractDeps []                   = []+extractDeps (Import:Module s:xs) = s : extractDeps xs+extractDeps (_:xs)               = extractDeps xs++lexC :: BSL.ByteString -> Either String [Token]+lexC = flip runAlex loop++loop :: Alex [Token]+loop = do+    tok' <- alexMonadScan+    case tok' of+        End -> pure []+        _ -> (tok' :) <$> loop++}
+ stack.yaml view
@@ -0,0 +1,9 @@+---+resolver: lts-14.7+ghc-options: {"$locals": -ddump-to-file -ddump-hi}+packages:+  - '.'+  - chs-cabal+extra-deps:+  - Cabal-3.0.0.0@sha256:1ba37b8d80e89213b17db7b8b9ea0108da55ca65f8c0cbb7433881a284c5cf67,26027+extra-package-dbs: []
+ test/Tasty.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE OverloadedStrings #-}+module Main ( main ) where++import           Language.Haskell.CHs.Deps++import           Test.Tasty+import           Test.Tasty.HUnit++main :: IO ()+main = defaultMain $+    testGroup "tasty chs"+        [ testCase "simple import" $+            getImports "{# import Data.Char #}" @?= Right ["Data.Char"]+        , testCase "line comment" $+            getImports "-- {# import Data.Char #}" @?= Right []+        , testCase "nested block comment" $+            getImports "{- nested {- comment -} -} {# import Data.Char #}" @?= Right ["Data.Char"]+        , testCase "Not find spurious imports" $+            getImports "import Data.Word\n{# import Data.Char #}" @?= Right ["Data.Char"]+        , testCase "Work with qualified imports + spaces" $+            getImports "{# import qualified   Data.Char #}" @?= Right ["Data.Char"]+        , testCase "Error on bad block comments" $+            getImports "{- {- block comment -} {# import Data.Char #}" @?= Left "Error in nested comment at line 1, column 46"+        , testCase "Doesn't pick up qualified type names" $+            getImports "{# fun LZ_decompress_data_position as ^ { `LZDecoderPtr' } -> `C2HSImp.CULLong' id #}" @?= Right []+        ]