hi-file-parser-0.1.8.0/src/0000755000000000000000000000000015056137246013453 5ustar0000000000000000hi-file-parser-0.1.8.0/test/0000755000000000000000000000000015056132216013633 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/0000755000000000000000000000000015055415375014744 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/0000755000000000000000000000000015055415375016013 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x32/0000755000000000000000000000000015055415375016427 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x32/ghc7103/0000755000000000000000000000000015055415375017503 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x32/ghc8002/0000755000000000000000000000000015055415375017502 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x32/ghc8022/0000755000000000000000000000000015055415375017504 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x32/ghc8044/0000755000000000000000000000000015055415375017510 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/0000755000000000000000000000000015056132216016423 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc8022/0000755000000000000000000000000015055415375017511 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc8044/0000755000000000000000000000000015055415375017515 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc8065/0000755000000000000000000000000015055415375017520 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc8084/0000755000000000000000000000000015055415375017521 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc8107/0000755000000000000000000000000015055415375017515 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9002/0000755000000000000000000000000015055415375017510 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9028/0000755000000000000000000000000015055415375017520 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9044/0000755000000000000000000000000015055415375017516 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9048/0000755000000000000000000000000015056132216017511 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9067/0000755000000000000000000000000015056132216017512 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9084/0000755000000000000000000000000015056132216017511 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9102/0000755000000000000000000000000015056132216017500 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9122/0000755000000000000000000000000015056132216017502 5ustar0000000000000000hi-file-parser-0.1.8.0/test-files/iface/x64/ghc9140/0000755000000000000000000000000015055415375017513 5ustar0000000000000000hi-file-parser-0.1.8.0/src/HiFileParser.hs0000644000000000000000000007464415056137246016343 0ustar0000000000000000{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Redundant multi-way if" #-} {-# HLINT ignore "Reduce duplication" #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE ScopedTypeVariables #-} module HiFileParser ( Interface (..) , List (..) , Dictionary (..) , Module (..) , Usage (..) , Dependencies (..) , getInterface , fromFile ) where import Control.Monad ( replicateM, replicateM_, when ) import Control.Monad.State ( StateT, evalStateT, get, gets, lift, modify ) import Data.Binary ( Word32, Word64, Word8) import qualified Data.Binary.Get as G ( Decoder (..), Get, bytesRead, getByteString, getInt64be , getWord32be, getWord64be, getWord8, lookAhead , runGetIncremental, skip ) import Data.Bits ( FiniteBits (..), (.|.), clearBit, complement, testBit , unsafeShiftL ) import Data.Bool ( bool ) import Data.ByteString.Lazy.Internal ( defaultChunkSize ) import Data.Char ( chr ) import Data.Functor ( ($>), void ) import Data.Maybe ( catMaybes ) #if !MIN_VERSION_base(4,11,0) import Data.Semigroup ( (<>) ) #endif import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import qualified Data.Vector as V import qualified Debug.Trace import GHC.IO.IOMode ( IOMode (..) ) import Numeric ( showHex ) import RIO ( Generic, Int64, NFData ) import RIO.ByteString as B ( ByteString, hGetSome, null ) import System.IO ( withBinaryFile ) newtype IfaceGetState = IfaceGetState { useLEB128 :: Bool -- ^ Use LEB128 encoding for numbers } data IfaceVersion = V7021 | V7041 | V7061 | V7081 | V8001 | V8021 | V8041 | V8061 | V8101 | V9001 | V9041 | V9045 | V9081 | V9121 | V9140 deriving (Eq, Enum, Ord, Show) -- careful, the Ord matters! type Get a = StateT IfaceGetState G.Get a -- | Change this to 'True' to enable debugging. enableDebug :: Bool enableDebug = False traceGet :: String -> Get () traceGet s | enableDebug = Debug.Trace.trace s (return ()) | otherwise = return () traceShow :: Show a => String -> Get a -> Get a traceShow s g | not enableDebug = g | otherwise = do a <- g traceGet (s ++ " " ++ show a) return a runGetIncremental :: Get a -> G.Decoder a runGetIncremental g = G.runGetIncremental (evalStateT g emptyState) where emptyState = IfaceGetState False getByteString :: Int -> Get ByteString getByteString i = lift (G.getByteString i) getWord8 :: Get Word8 getWord8 = lift G.getWord8 -- | Like 'getWord8' but we discard the information. skipWord8 :: Get () skipWord8 = void getWord8 bytesRead :: Get Int64 bytesRead = lift G.bytesRead skip :: Int -> Get () skip = lift . G.skip uleb :: Get a -> Get a -> Get a uleb f g = do c <- gets useLEB128 if c then f else g getWord32be :: Get Word32 getWord32be = uleb getULEB128 (lift G.getWord32be) getWord64be :: Get Word64 getWord64be = uleb getULEB128 (lift G.getWord64be) getInt64be :: Get Int64 getInt64be = uleb getSLEB128 (lift G.getInt64be) lookAhead :: Get b -> Get b lookAhead g = do s <- get lift $ G.lookAhead (evalStateT g s) getPtr :: Get Word32 getPtr = lift G.getWord32be -- | Like 'getPtr' but we discard the information. skipPtr :: Get () skipPtr = void getPtr type IsBoot = Bool type ModuleName = ByteString newtype List a = List { unList :: [a] } deriving newtype (NFData, Show) newtype Dictionary = Dictionary { unDictionary :: V.Vector ByteString } deriving newtype (NFData, Show) newtype Module = Module { unModule :: ModuleName } deriving newtype (NFData, Show) newtype Usage = Usage { unUsage :: FilePath } deriving newtype (NFData, Show) data Dependencies = Dependencies { dmods :: List (ModuleName, IsBoot) , dpkgs :: List (ModuleName, Bool) , dorphs :: List Module , dfinsts :: List Module , dplugins :: List ModuleName } deriving (Generic, Show) instance NFData Dependencies data Interface = Interface { deps :: Dependencies , usage :: List Usage } deriving (Generic, Show) instance NFData Interface -- | The 'String' is for debugging messages. Provided for consistency with -- 'skipWith'. with :: Show a => String -> Get a -> Get a with = traceShow -- | Like 'with' but we discard the information. skipWith :: Show a => String -> Get a -> Get () skipWith s = void . traceShow s -- | Read a block prefixed with its length withBlockPrefix :: Get a -> Get a withBlockPrefix f = getPtr *> f -- | Skip a block prefixed with its length. The 'String' is for debugging -- messages skipWithBlockPrefix :: String -> Get () skipWithBlockPrefix s = do l <- traceShow (s <> ", skipping:") getPtr skip (fromIntegral l - 4) getBool :: Get Bool getBool = toEnum . fromIntegral <$> getWord8 -- | Like 'getBool' but we discard the information. skipBool :: Get () skipBool = void getBool getString :: Get String getString = fmap (chr . fromIntegral) . unList <$> getList getWord32be getMaybe :: Get a -> Get (Maybe a) getMaybe f = bool (pure Nothing) (Just <$> f) =<< getBool -- | Like 'getMaybe' but we discard the information. skipMaybe :: Get a -> Get () skipMaybe = void . getMaybe getList :: Get a -> Get (List a) getList f = do use_uleb <- gets useLEB128 if use_uleb then do l <- (getSLEB128 :: Get Int64) List <$> replicateM (fromIntegral l) f else do i <- getWord8 l <- if i == 0xff then getWord32be else pure (fromIntegral i :: Word32) List <$> replicateM (fromIntegral l) f -- | Like 'getList' but we discard the information. skipList :: Get a -> Get () skipList = void . getList getTuple :: Get a -> Get b -> Get (a, b) getTuple f g = (,) <$> f <*> g getByteStringSized :: Get ByteString getByteStringSized = do size <- getInt64be getByteString (fromIntegral size) getDictionary :: Int -> Get Dictionary getDictionary ptr = do offset <- bytesRead skip $ ptr - fromIntegral offset size <- fromIntegral <$> getInt64be traceGet ("Dictionary size: " ++ show size) dict <- Dictionary <$> V.replicateM size getByteStringSized traceGet ("Dictionary: " ++ show dict) return dict -- | Get a FastString -- -- FastStrings are stored in a global FastString table and only the index (a -- Word32be) is stored at the expected position. getCachedBS :: Dictionary -> Get ByteString getCachedBS d = go =<< with "Dict index:" getWord32be where go i = case unDictionary d V.!? fromIntegral i of Just bs -> pure bs Nothing -> fail $ "Invalid dictionary index: " <> show i -- | Get Fingerprint getFP :: Get String getFP = do x <- getWord64be y <- getWord64be return (showHex x (showHex y "")) -- Like 'getFP' but we discard the information. skipFP :: Get () skipFP = void getFP getInterface721 :: Dictionary -> Get Interface getInterface721 d = do void getModule skipBool replicateM_ 2 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = getCachedBS d *> (Module <$> getCachedBS d) getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing _ -> fail $ "Invalid usageType: " <> show usageType getInterface741 :: Dictionary -> Get Interface getInterface741 d = do void getModule skipBool replicateM_ 3 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = getCachedBS d *> (Module <$> getCachedBS d) getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* getWord64be <* getWord64be _ -> fail $ "Invalid usageType: " <> show usageType getInterface761 :: Dictionary -> Get Interface getInterface761 d = do void getModule skipBool replicateM_ 3 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = getCachedBS d *> (Module <$> getCachedBS d) getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* getWord64be <* getWord64be _ -> fail $ "Invalid usageType: " <> show usageType getInterface781 :: Dictionary -> Get Interface getInterface781 d = do void getModule skipBool replicateM_ 3 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = getCachedBS d *> (Module <$> getCachedBS d) getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* skipFP _ -> fail $ "Invalid usageType: " <> show usageType getInterface801 :: Dictionary -> Get Interface getInterface801 d = do void getModule skipWord8 replicateM_ 3 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = getCachedBS d *> (Module <$> getCachedBS d) getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* skipFP 3 -> getModule *> skipFP$> Nothing _ -> fail $ "Invalid usageType: " <> show usageType getInterface821 :: Dictionary -> Get Interface getInterface821 d = do void getModule skipMaybe getModule skipWord8 replicateM_ 3 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = do idType <- getWord8 case idType of 0 -> void $ getCachedBS d _ -> void $ getCachedBS d *> getList (getTuple (getCachedBS d) getModule) Module <$> getCachedBS d getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* skipFP 3 -> getModule *> skipFP$> Nothing _ -> fail $ "Invalid usageType: " <> show usageType getInterface841 :: Dictionary -> Get Interface getInterface841 d = do void getModule skipMaybe getModule skipWord8 replicateM_ 5 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = do idType <- getWord8 case idType of 0 -> void $ getCachedBS d _ -> void $ getCachedBS d *> getList (getTuple (getCachedBS d) getModule) Module <$> getCachedBS d getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> pure (List []) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* skipFP 3 -> getModule *> skipFP$> Nothing _ -> fail $ "Invalid usageType: " <> show usageType getInterface861 :: Dictionary -> Get Interface getInterface861 d = do void getModule skipMaybe getModule skipWord8 replicateM_ 6 skipFP skipBool skipBool Interface <$> getDependencies <*> getUsage where getModule = do idType <- getWord8 case idType of 0 -> void $ getCachedBS d _ -> void $ getCachedBS d *> getList (getTuple (getCachedBS d) getModule) Module <$> getCachedBS d getDependencies = withBlockPrefix $ Dependencies <$> getList (getTuple (getCachedBS d) getBool) <*> getList (getTuple (getCachedBS d) getBool) <*> getList getModule <*> getList getModule <*> getList (getCachedBS d) getUsage = withBlockPrefix $ List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- getWord8 case usageType of 0 -> getModule *> skipFP*> getBool $> Nothing 1 -> getCachedBS d *> skipFP*> getMaybe skipFP*> getList (getTuple (getWord8 *> getCachedBS d) skipFP) *> getBool $> Nothing 2 -> Just . Usage <$> getString <* skipFP 3 -> getModule *> skipFP$> Nothing _ -> fail $ "Invalid usageType: " <> show usageType getInterfaceRecent :: IfaceVersion -> Dictionary -> Get Interface getInterfaceRecent version d = do if | version >= V9140 -> do skipIfaceModInfo -- mi_mod_info_ skipFP -- mi_iface_hash_ ddeps <- withBlockPrefix getDependencies skipWithBlockPrefix "mi_public_" skipWithBlockPrefix "mi_top_env_" skipMaybe (skipWithBlockPrefix "mi_docs_") mDusage <- getMaybe (withBlockPrefix getIfaceSelfRecompInfo) case mDusage of Nothing -> -- There are no usages. Is that problematic for Stack? pure (Interface ddeps (List [])) Just dusage -> pure (Interface ddeps dusage) | otherwise -> do skipWith "Module:" getModule skipWith "Sig:" $ getMaybe getModule skipWord8 -- hsc_src skipFP -- iface_hash skipFP -- mod_hash skipFP -- flag_hash skipFP -- opt_hash skipFP -- hpc_hash skipFP -- plugin_hash skipBool -- orphan skipBool -- hasFamInsts ddeps <- with "Dependencies:" $ withBlockPrefix getDependencies dusage <- with "Usage:" $ withBlockPrefix getFileUsage pure (Interface ddeps dusage) where since v = when (version >= v) getFastString = getCachedBS d -- Like 'getFastString' but we discard the information. skipFastString :: Get () skipFastString = void getFastString getModule :: Get Module getModule = do idType <- with "Unit type:" getWord8 case idType of 0 -> skipFastString 1 -> do skipFastString skipList (getTuple getFastString getModule) _ -> fail $ "Invalid unit type: " <> show idType Module <$> getFastString -- See `instance Binary Dependencies` in module GHC.Unit.Module.Deps. getDependencies = if | version >= V9041 -> do -- warning: transitive dependencies are no longer stored, only direct -- imports! -- Modules are now prefixed with their UnitId (should have been -- ModuleWithIsBoot ...) direct_mods <- with "direct_mods:" $ if | version >= V9140 -> getList $ do skipIfaceImportLevel skipFastString getTuple getFastString getBool | otherwise -> getList $ do skipFastString getTuple getFastString getBool direct_pkgs <- if | version >= V9140 -> getList $ do skipIfaceImportLevel getFastString | otherwise -> getList getFastString -- plugin packages are now stored separately plugin_pkgs <- getList getFastString let all_pkgs = unList plugin_pkgs ++ unList direct_pkgs -- instead of a trust bool for each unit, we have an additional -- list of trusted units (transitive) trusted_pkgs <- getList getFastString let trusted u = u `elem` unList trusted_pkgs all_pkgs_trust = List (zip all_pkgs (map trusted all_pkgs)) -- these are new skipList getModule -- sig_mods skipList $ do -- boot_mods skipFastString getTuple skipFastString skipBool dep_orphs <- getList getModule dep_finsts <- getList getModule -- plugin names are no longer stored here let dep_plgins = List [] pure Dependencies { dmods = direct_mods , dpkgs = all_pkgs_trust , dorphs = dep_orphs , dfinsts = dep_finsts , dplugins = dep_plgins } | otherwise -> do dep_mods <- getList (getTuple getFastString getBool) dep_pkgs <- getList (getTuple getFastString getBool) dep_orphs <- getList getModule dep_finsts <- getList getModule dep_plgins <- getList getFastString pure Dependencies { dmods = dep_mods , dpkgs = dep_pkgs , dorphs = dep_orphs , dfinsts = dep_finsts , dplugins = dep_plgins } -- See `newtype IfaceImportLevel` and -- `deriving Binary via EnumBinary ImportLevel` in module -- GHC.Unit.Module.Deps. We discard this information. skipIfaceImportLevel :: Get () skipIfaceImportLevel = skipImportLevel -- See `data ImportLevel` and -- `deriving via (EnumBinary ImportLevel) instance Binary ImportLevel` in -- module GHC.Types.Basic. We discard this information. skipImportLevel :: Get () skipImportLevel = void getInt64be -- See `data Usage` and `instance Binary Usage` in module -- GHC.Module.Unit.Deps. We discard most of the information, except about the -- usage of files. getFileUsage = List . catMaybes . unList <$> getList go where go :: Get (Maybe Usage) go = do usageType <- with "Usage type:" getWord8 case usageType of 0 -> do skipWith "Module:" getModule -- usg_mod skipFP -- usg_mod_hash skipBool -- usg_safe pure Nothing 1 -> do skipWith "Home module:" getFastString -- usg_mod_name since V9045 $ void getFastString -- usg_unit_id skipFP -- usg_mod_hash if -- usg_exports | version < V9140 -> skipMaybe skipFP | otherwise -> skipMaybe skipHomeModImport skipEntitiesList -- usg_entities skipBool -- usg_safe pure Nothing 2 -> do -- usg_file_path file_path <- with "File:" $ if | version >= V9081 -> Text.unpack . Text.decodeUtf8 <$> getFastString | otherwise -> getString skipWith "FP:" getFP -- usg_file_hash since V9041 $ skipWith "File label:" (getMaybe getString)-- usg_file_label pure (Just (Usage file_path)) 3 -> do void getModule -- usg_mod skipFP -- usg_mod_hash pure Nothing 4 | version >= V9041 -> do -- UsageHomeModuleInterface skipFastString -- usg_mod_name since V9045 skipFastString -- usg_unit_id skipFP -- usg_iface_hash pure Nothing _ -> fail $ "Invalid usageType: " <> show usageType -- See `data HomeModImport` and `instance Binary HomeModImport` in module -- GHC.Unit.Module.Deps. We discard the information. skipHomeModImport :: Get () skipHomeModImport = do skipFP skipHomeModImportedAvails -- See `data HomeModImportedAvails` and -- `instance Binary HomeModImportedAvails` in module GHC.Unit.Module.Deps. We -- discard the information. skipHomeModImportedAvails :: Get () skipHomeModImportedAvails = do homeModImportedAvailsType <- with "HomeModImportedAvails:" getWord8 case homeModImportedAvailsType of 0 -> do skipDetOrdAvails skipList skipName 1 -> skipFP _ -> fail $ "Invalid HomeModImportedAvails type: " <> show homeModImportedAvailsType -- See `newtype DetOrdAvails` in module GHC.Types.Avail. We discard the -- information. skipDetOrdAvails :: Get () skipDetOrdAvails = skipList skipAvailInfo -- See `instance Binary AvailInfo` in module GHC.Types.Avail. We discard the -- information. skipAvailInfo :: Get () skipAvailInfo = do availInfoType <- with "AvailInfo type:" getWord8 case availInfoType of 0 -> skipName 1 -> do skipName skipList skipName _ -> fail $ "Invalid AvailInfo type: " <> show availInfoType -- See `instance Binary Name` in module GHC.Types.Name. We discard the -- information. skipName :: Get () skipName = void getInt64be -- See `data Usage` and `UsageHomeModule` in module GHC.Unit.Module.Deps. We -- discard the information. skipEntitiesList :: Get () skipEntitiesList = skipList (getTuple skipOccName skipFP) -- See `data OccName` and `instance Binary OccName` in module -- GHC.Types.Name.Occurrence. We discard the information. skipOccName :: Get () skipOccName = do skipNameSpace skipFastString -- See `instance Binary NameSpace` in module GHC.Types.Name.Occurrence. We -- discard the information. skipNameSpace :: Get () skipNameSpace = if | version >= V9081 -> do nameSpaceType <- getWord8 case nameSpaceType of 0 -> pure () 1 -> pure () 2 -> pure () 3 -> pure () 4 -> skipFastString -- Unlike the original, we test that the byte we have obtained is -- valid. _ -> fail $ "Invalid NameSpace type: " <> show nameSpaceType | otherwise -> skipWord8 -- See `instance Binary IfaceModInfo` in module GHC.Unit.Module.ModIface. We -- discard the information. skipIfaceModInfo :: Get () skipIfaceModInfo = do skipWith "Module:" getModule -- mi_mod_info_module skipWith "Sig:" $ getMaybe getModule -- mi_mod_info_sig_of skipWord8 -- mi_mod_info_hsc_src -- See `data IfaceSelfRecomp` and `instance Binary IfaceSelfRecomp` in module -- GHC.Iface.Recomp.Types. We discard most of this information. getIfaceSelfRecompInfo :: Get (List Usage) getIfaceSelfRecompInfo = do skipFP -- sr_src_hash dusage <- with "Usage:" (withBlockPrefix getFileUsage) -- sr_usages skipFP -- sr_flag_hash skipFP -- sr_opt_hash skipFP -- sr_hpc_hash skipFP -- sr_plugin_hash pure dusage getInterface :: Get Interface getInterface = do let enableLEB128 = modify (\c -> c { useLEB128 = True}) -- read a relative bin pointer getRelPtr = do c <- bytesRead p <- getPtr pure (fromIntegral c + p) magic <- lookAhead getWord32be >>= \case -- normal magic 0x1face -> getWord32be 0x1face64 -> getWord32be m -> do -- GHC 8.10 mistakenly encoded header fields with LEB128 -- so it gets special treatment lookAhead (enableLEB128 >> getWord32be) >>= \case 0x1face -> enableLEB128 >> getWord32be 0x1face64 -> enableLEB128 >> getWord32be _ -> fail $ "Invalid magic: " <> showHex m "" traceGet ("Magic: " ++ showHex magic "") -- empty field (removed in 9.0...) case magic of 0x1face -> do e <- lookAhead getWord32be if e == 0 then void getWord32be else enableLEB128 -- > 9.0 0x1face64 -> do e <- lookAhead getWord64be if e == 0 then void getWord64be else enableLEB128 -- > 9.0 _ -> return () -- ghc version version <- getString traceGet ("Version: " ++ version) let !ifaceVersion | version >= "9140" = V9140 -- Support GHC 9.14.1-alpha1 | version >= "9121" = V9121 | version >= "9081" = V9081 | version >= "9045" = V9045 | version >= "9041" = V9041 | version >= "9001" = V9001 | version >= "8101" = V8101 | version >= "8061" = V8061 | version >= "8041" = V8041 | version >= "8021" = V8021 | version >= "8001" = V8001 | version >= "7081" = V7081 | version >= "7061" = V7061 | version >= "7041" = V7041 | version >= "7021" = V7021 | otherwise = error $ "Unsupported version: " <> version -- way way <- getString traceGet ("Ways: " ++ show way) -- source hash (GHC >= 9.4 && GHC < 9.14) when (ifaceVersion >= V9041 && ifaceVersion < V9140) skipFP -- extensible fields (GHC >= 9.0) when (ifaceVersion >= V9001) skipPtr -- dict_ptr dictPtr <- if ifaceVersion >= V9121 -- 9.12 uses relative pointers then getRelPtr else getPtr traceGet ("Dict ptr: " ++ show dictPtr) -- dict dict <- lookAhead $ getDictionary $ fromIntegral dictPtr -- symtable_ptr skipPtr -- IfaceType table when (ifaceVersion >= V9121) skipPtr case ifaceVersion of V9140 -> getInterfaceRecent ifaceVersion dict V9121 -> getInterfaceRecent ifaceVersion dict V9081 -> getInterfaceRecent ifaceVersion dict V9045 -> getInterfaceRecent ifaceVersion dict V9041 -> getInterfaceRecent ifaceVersion dict V9001 -> getInterfaceRecent ifaceVersion dict V8101 -> getInterfaceRecent ifaceVersion dict V8061 -> getInterface861 dict V8041 -> getInterface841 dict V8021 -> getInterface821 dict V8001 -> getInterface801 dict V7081 -> getInterface781 dict V7061 -> getInterface761 dict V7041 -> getInterface741 dict V7021 -> getInterface721 dict fromFile :: FilePath -> IO (Either String Interface) fromFile fp = withBinaryFile fp ReadMode go where go h = let feed (G.Done _ _ iface) = pure $ Right iface feed (G.Fail _ _ msg) = pure $ Left msg feed (G.Partial k) = do chunk <- hGetSome h defaultChunkSize feed $ k $ if B.null chunk then Nothing else Just chunk in feed $ runGetIncremental getInterface getULEB128 :: forall a. (Integral a, FiniteBits a) => Get a getULEB128 = go 0 0 where go :: Int -> a -> Get a go shift w = do b <- getWord8 let !hasMore = testBit b 7 !val = w .|. (clearBit (fromIntegral b) 7 `unsafeShiftL` shift) :: a if hasMore then do go (shift+7) val else return $! val getSLEB128 :: forall a. (Integral a, FiniteBits a) => Get a getSLEB128 = do (val,shift,signed) <- go 0 0 if signed && (shift < finiteBitSize val ) then return $! ((complement 0 `unsafeShiftL` shift) .|. val) else return val where go :: Int -> a -> Get (a,Int,Bool) go shift val = do byte <- getWord8 let !byteVal = fromIntegral (clearBit byte 7) :: a !val' = val .|. (byteVal `unsafeShiftL` shift) !more = testBit byte 7 !shift' = shift+7 if more then go shift' val' else do let !signed = testBit byte 6 return (val',shift',signed) hi-file-parser-0.1.8.0/test/Spec.hs0000644000000000000000000000005515055415375015072 0ustar0000000000000000{-# OPTIONS_GHC -F -pgmF hspec-discover #-} hi-file-parser-0.1.8.0/test/HiFileParserSpec.hs0000644000000000000000000000564715056132216017333 0ustar0000000000000000{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} module HiFileParserSpec (spec) where import qualified HiFileParser as Iface import RIO import Test.Hspec (Spec, describe, it, shouldBe) type Version = String type Directory = FilePath type Usage = String type Module = ByteString -- | GHC x.y.z is represented as \"ghcxyyz\" where yy is padded with zeros. versions32 :: [Version] versions32 = [ "ghc7103" -- Last in GHC 7.10 series, using GHC 7.8.1 format , "ghc8002" -- Last in GHC 8.0 series, using GHC 8.0.1 format , "ghc8022" -- Last in GHC 8.2 series, using GHC 8.2.1 format , "ghc8044" -- Last in GHC 8.4 series, using GHC 8.4.1 format ] -- | GHC x.y.z is represented as \"ghcxyyz\" where yy is padded with zeros. versions64 :: [Version] versions64 = [ "ghc8022" -- Last in GHC 8.2 series, using GHC 8.0.1 format , "ghc8044" -- Last in GHC 8.4 series, using GHC 8.4.1 format , "ghc8065" -- Last in GHC 8.6 series, using GHC 8.6.1 format , "ghc8084" -- Last in GHC 8.8 series, using GHC 8.6.1 format , "ghc8107" -- Last in GHC 8.10 series, using GHC 8.10.1 format , "ghc9002" -- Last in GHC 9.0 series, using GHC 9.0.1 format , "ghc9028" -- Last in GHC 9.2 series, using GHC 9.0.1 format , "ghc9044" -- Last using GHC 9.4.1 format , "ghc9048" -- Last in GHC 9.4 series, using GHC 9.4.5 format , "ghc9067" -- Last in GHC 9.6 series, using GHC 9.4.5 format , "ghc9084" -- Last in GHC 9.8 series, using GHC 9.8.1 format , "ghc9102" -- Last in GHC 9.10 series, using GHC 9.8.1 format , "ghc9122" -- Last in GHC 9.12 series, using GHC 9.12 format , "ghc9140" -- First in GHC 9.14 series, using GHC 9.14 format ] spec :: Spec spec = describe "should successfully deserialize interface for" $ do traverse_ (deserialize check32 . ("x32/" <>)) versions32 traverse_ (deserialize check64 . ("x64/" <>)) versions64 check32 :: Iface.Interface -> IO () check32 iface = do hasExpectedUsage "some-dependency.txt" iface `shouldBe` True check64 :: Iface.Interface -> IO () check64 iface = do hasExpectedUsage "Test.h" iface `shouldBe` True hasExpectedUsage "README.md" iface `shouldBe` True hasExpectedModule "X" iface `shouldBe` True deserialize :: (Iface.Interface -> IO ()) -> Directory -> Spec deserialize check d = do it d $ do let ifacePath = "test-files/iface/" <> d <> "/Main.hi" result <- Iface.fromFile ifacePath case result of (Left msg) -> fail msg (Right iface) -> check iface -- | `Usage` is the name given by GHC to TH dependency hasExpectedUsage :: Usage -> Iface.Interface -> Bool hasExpectedUsage u = elem u . fmap Iface.unUsage . Iface.unList . Iface.usage hasExpectedModule :: Module -> Iface.Interface -> Bool hasExpectedModule m = elem m . fmap fst . Iface.unList . Iface.dmods . Iface.deps hi-file-parser-0.1.8.0/README.md0000644000000000000000000000064215055415375014146 0ustar0000000000000000# hi-file-parser Provide data types and functions for parsing the binary `.hi` files produced by GHC. Intended to support multiple versions of GHC, so that tooling can: * Support multiple versions of GHC * Avoid linking against the `ghc` library * Not need to use `ghc`'s textual dump file format. Note that this code was written for Stack's usage initially, though it is intended to be general purpose. hi-file-parser-0.1.8.0/ChangeLog.md0000644000000000000000000000305215056143124015025 0ustar0000000000000000# Changelog for `hi-file-parser` All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). ## 0.1.8.0 - 2025-09-03 * Add support for GHC 9.14 (GHC 9.14.1 onward). See [#30](https://github.com/commercialhaskell/hi-file-parser/pull/30) ## 0.1.7.0 - 2024-10-22 * Add support for GHC 9.12 (GHC 9.12.1 onward). See [#23](https://github.com/commercialhaskell/hi-file-parser/pull/23) ## 0.1.6.0 - 2023-11-04 * Add further support for GHC 9.8 (GHC 9.8.1 onward). See [#20](https://github.com/commercialhaskell/hi-file-parser/pull/20) ## 0.1.5.0 - 2023-10-11 * Add support for GHC 9.8 (GHC 9.8.1 onward). See [#17](https://github.com/commercialhaskell/hi-file-parser/pull/17) ## 0.1.4.0 - 2023-04-28 * Add further support for GHC 9.4 (GHC 9.4.5 onward) and support for GHC 9.6. See [#14](https://github.com/commercialhaskell/hi-file-parser/pull/14) ## 0.1.3.0 - 2022-08-12 * Allow dependency on `mtl` >= 2.3. See [#6](https://github.com/commercialhaskell/hi-file-parser/pull/6) * Add support for GHC 9.4 (up to GHC 9.4.4). See [#7](https://github.com/commercialhaskell/hi-file-parser/pull/7) ## 0.1.2.0 - 2021-04-09 * Add support for GHC 8.10 and 9.0. See [#2](https://github.com/commercialhaskell/hi-file-parser/pull/2) ## 0.1.1.0 - 2021-03-24 * Add `NFData` instances ## 0.1.0.0 - 2019-06-08 * Initial release hi-file-parser-0.1.8.0/test-files/iface/x32/ghc7103/Main.hi0000644000000000000000000000147315055415375020716 0ustar00000000000000007103Z"mi-t AIxi>2T|u?n;Yp     ?&+LNѼA?[ܤD)+k'?ZDe %Z|~{4(R(some-dependency.txtuk'$7DV!nrCwNX٢#I?67ēLMi>M=d[^.mainMainbaseghc-prim integer-gmptemplate-haskellGHC.Base GHC.FloatControl.Applicative Data.Either Data.MonoidData.Type.Equality GHC.GenericsLanguage.Haskell.TH.SyntaxPrelude GHC.Typeshi-file-parser-0.1.8.0/test-files/iface/x32/ghc8002/Main.hi0000644000000000000000000000205315055415375020710 0ustar00000000000000008002K6BU N@ wCGXH =Ҹ4KTո      Jqtmi.zY S`= D9OX kzyN(@4some-dependency.txtuk'$7DV!PӼ)A]-~$$)5'RaYM h"qa#,ALri>M=d[^.mainMainbaseghc-boot-th-8.0.2ghc-prim integer-gmptemplate-haskellGHC.Base GHC.FloatControl.Applicative Data.EitherData.Functor.Const Data.MonoidData.Type.Equality Data.Version GHC.GenericsGHC.IO.Exception GHC.TypeLitsGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude GHC.Types $trModulehi-file-parser-0.1.8.0/test-files/iface/x32/ghc8022/Main.hi0000644000000000000000000000230115055415375020706 0ustar00000000000000008022m B0Sn J>pÿƶw84j>`oZfR     d f4jO@T2ljٌCR8+[#BN;d.J)hwsome-dependency.txtuk'$7DV!X2xuq֤%UQhp<S%~' `?&밁xMrTi>M=d[^.mainMainbaseghc-boot-th-8.2.2ghc-prim integer-gmptemplate-haskell GHC.FloatGHC.BaseControl.Applicative Data.EitherData.Functor.ConstData.Functor.Identity Data.MonoidData.Type.Equality Data.Version GHC.GenericsGHC.IO.Exception GHC.TypeLits GHC.TypeNatsGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude GHC.Types $trModulehi-file-parser-0.1.8.0/test-files/iface/x32/ghc8044/Main.hi0000644000000000000000000000222015055415375020712 0ustar00000000000000008044rhX9ר *`L%+@JW"f/E\ʧEfɫug1B 4O՟q      .@5d7,nwb;J)X3$]C7[ YY2mcsome-dependency.txtuk'$7DV!oK=L :vb̚-*~:'N.3XRrYi>M=d[^.mainMainbaseghc-boot-th-8.4.4ghc-prim integer-gmptemplate-haskell GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Version GHC.GenericsGHC.IO.ExceptionGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude GHC.Types $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc8022/Main.hi0000644000000000000000000000420215055415375020715 0ustar0000000000000000d80220'$!5X5&^p^C5A~ ]yʻ       x/ٛ^6i&Id1[}3GRPm:@ n[7 qX#ΤDPt8{p3'S+ MDʜv|xQ=6 5,DUHph'/.܃yTest.hȝ^ YDQ7X/nix/store/6014lmjlvwqj8q5ykz0hhblvmx7ycskl-ghc-8.2.2/lib/ghc-8.2.2/include/ghcversion.hPݐ-vP/nix/store/sr4253np2gz2bpha4gn8gqlmiw604155-glibc-2.27-dev/include/stdc-predef.hdjDvX0q'sE#A README.md)_\CsQu\.3%UQhp<SW~X&mYi.ɫ;z' `?&밁xri>M=d[^. mainMainXbaseghc-boot-th-8.2.2ghc-prim integer-gmptemplate-haskell GHC.FloatGHC.BaseControl.Applicative Data.EitherData.Functor.ConstData.Functor.Identity Data.MonoidData.Type.Equality Data.Version GHC.GenericsGHC.IO.Exception GHC.TypeLits GHC.TypeNatsGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Libf $trModuleStringhi-file-parser-0.1.8.0/test-files/iface/x64/ghc8022/X.hi0000644000000000000000000000154215055415375020244 0ustar0000000000000000d8022Av^rw"РXp3'S+ MDʜNnfE};      !1[}3GRPm:@ _H,3.ìtdΖv|xQ=6 >C2uSs0pվ g~&p: ە΋,i>M=d[^.mainXbaseghc-prim integer-gmp GHC.FloatGHC.BaseControl.Applicative Data.EitherData.Functor.ConstData.Functor.Identity Data.MonoidData.Type.Equality GHC.GenericsGHC.IO.Exception GHC.TypeLits GHC.TypeNatsPreludeGHC.Integer.Typex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc8044/Main.hi0000644000000000000000000000422415055415375020725 0ustar0000000000000000d8044".9gPG.uN̉%-3;/2 5'Efɫug1B 4O՟q     ,  `AP(w~rud;PU⷗x)B=9@UɞS?'ٳ=JSCUC+b;0ߖp omϷKU7~D2m+9.QV7&:ଯIM؂;"S7vTest.hȝ^ YDQ7X/nix/store/30n64hjjzrvfbzs0z8wf9mkcjnmqlfbm-ghc-8.4.4/lib/ghc-8.4.4/include/ghcversion.hܕ1=mP/nix/store/sr4253np2gz2bpha4gn8gqlmiw604155-glibc-2.27-dev/include/stdc-predef.hdjDvX0q'sE#A README.md)_\CsQ|=;it+hlNS :vb̚-w~X&mYi.ɫ;:'N.3Xri>M=d[^. mainMainXbaseghc-boot-th-8.4.4ghc-prim integer-gmptemplate-haskell GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Version GHC.GenericsGHC.IO.ExceptionGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModuleStringhi-file-parser-0.1.8.0/test-files/iface/x64/ghc8044/X.hi0000644000000000000000000000146115055415375020250 0ustar0000000000000000d8044> j> #∄+b;0ߖp粔 O ē"Efɫug1B 4O՟q     &PU⷗x)B=9=80KV[&T omϷKCHUn)(l~ț&RR_=/,i>M=d[^.mainXbaseghc-prim integer-gmp GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal GHC.GenericsGHC.IO.ExceptionPreludeGHC.Integer.Typex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc8065/Main.hi0000644000000000000000000000355515055415375020736 0ustar0000000000000000d8065 vfJ#fE4SP/ @&G Iոvz0jЧ{4O@k\uᖓ 4O՟q@ֱIB4X /       eK>Bh˙$ɂQ..ǵU|WL{ .6a\ zD$&^Lʯȳi%G]ODOc SεyhWs/c(f6Test.h0!gPnX#g\C:\Users\mike\AppData\Local\Programs\stack\x86_64-windows\ghc-8.6.5\lib\include\ghcversion.hCDI /3 README.mdش6#>v2޹%." :vb̚-F~X&mYi.ɫ;i:'N.3Xri>M=d[^. mainMainXbaseghc-boot-th-8.6.5ghc-prim integer-gmptemplate-haskell GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Version GHC.GenericsGHC.IO.ExceptionGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModuleStringhi-file-parser-0.1.8.0/test-files/iface/x64/ghc8065/X.hi0000644000000000000000000000151415055415375020252 0ustar0000000000000000d8065R('AiE4zD$&4$nnt Ч{4O@k\uᖓ 4O՟q@ֱIB4X      7h˙$ɂX\9^Lʯȳi%GTYUn)(}~{Be= i =,i>M=d[^.mainXbaseghc-prim integer-gmp GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal GHC.GenericsGHC.IO.ExceptionPreludeGHC.Integer.Typex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc8084/Main.hi0000644000000000000000000000366615055415375020742 0ustar0000000000000000d8084ƈ|8Fi)B'209I@xq|H7] -v'@> 4O՟q@ֱIB4X A       ?r , `渺Hm9!_t3=Iq}žq\șe7p<"4EE~sv[&vp]Np28i)q8p(+T>P_ܔ]ېLH`rj\ZY"^J:"_ zG- 8#ݏTest.hȝ^ YDQ7@/home/hsyl20/.ghcup/ghc/8.8.4/lib/ghc-8.8.4/include/ghcversion.h*0*~,/usr/include/stdc-predef.hm3qRy+# README.md)_\CsQ7Ni F? "%zВb~KϹeQ[ }?$Ck4qo)`ri>M=d[^. mainMainXbaseghc-boot-th-8.8.4ghc-priminteger-wired-intemplate-haskell GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Version Data.Void GHC.GenericsGHC.IO.ExceptionGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModuleStringhi-file-parser-0.1.8.0/test-files/iface/x64/ghc8084/X.hi0000644000000000000000000000152115055415375020251 0ustar0000000000000000d8084 Rβ"wzGDE~sv[&vpB4u op -v'@> 4O՟q@ֱIB4X      7m9!_t3=IqNZroe],]Np28i)q8p(+TY{2hZL79}~Zvu߁0i>M=d[^.mainXbaseghc-priminteger-wired-in GHC.FloatGHC.BaseControl.ApplicativeData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal GHC.GenericsGHC.IO.ExceptionPreludeGHC.Integer.Typex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc8107/Main.hi0000644000000000000000000000236315055415375020727 0ustar00000000000000008107&Ї⒛.㮯휐 딝/̶ƌNߵܓǵ̈B     Q  ֍δĹ$▥oڃˋû«pw좉𥱖EÏܝ!߸Uљ° 觭âٮͬӻ͈ޓ=Test.hǩúĐ0羒nC:\Users\mike\AppData\Local\Programs\stack\x86_64-windows\ghc-8.10.7\lib\include\ghcversion.hѻꑎ README.md΀}贈՝8ŕŗ̔qvȃ׊ s ˮ˹ߦiޅ   mainMainXbaseghc-boot-th-8.10.7ghc-priminteger-wired-intemplate-haskell GHC.FloatGHC.BaseControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Version Data.Void GHC.GenericsGHC.IO.ExceptionGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModuleStringhi-file-parser-0.1.8.0/test-files/iface/x64/ghc8107/X.hi0000644000000000000000000000117215055415375020247 0ustar00000000000000008107ڽݗ荇:w좉؃딝/̶ƌNߵܓǵ̈B     ▥oܠ۶m𥱖EÏܝ! ۙ貴3әӬW^ߦiޅy~mainXbaseghc-priminteger-wired-in GHC.FloatGHC.BaseControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal GHC.GenericsGHC.IO.ExceptionPreludeGHC.Integer.Typex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9002/Main.hi0000644000000000000000000000244715055415375020725 0ustar0000000000000000d9002&P@Àڣ߮뇼ۮ"ڃ֥ߦfߵܓǵ̈B     ~  ™졈ɀ׆΀Bԑyˎ6꒪gक़帐#ՃIߞ돳芲ٹ}ȬܽcާIJTest.hǩúĐ0羒nC:\Users\mike\AppData\Local\Programs\stack\x86_64-windows\ghc-9.0.2\lib\x86_64-windows-ghc-9.0.2\rts-1.0.2\include\ghcversion.hˤ README.md΀}贈՝8оۨ/ʌЖ0⑍Sوߦiޅ6;@ !mainMainXbase ghc-bignumghc-boot-th-9.0.2ghc-primtemplate-haskell GHC.FloatGHC.BaseControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Version Data.VoidGHC.Exts GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9002/X.hi0000644000000000000000000000113515055415375020241 0ustar0000000000000000d9002\ynʒٴ+ #ć5ڃ֥ߦfߵܓǵ̈B      ׆΀BԑyՃIߞi聊}%䶞BIߦiޅdinmainXbase ghc-bignumghc-prim GHC.FloatGHC.BaseControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9028/Main.hi0000644000000000000000000000244315055415375020731 0ustar0000000000000000d9028">.ύܝӞ߱/Ҥߵܓǵ̈B     j  ۢܯը݂!ΘؤVߗՔ˂נމĢމڴz鎘@ӣ⍉*ЛɪԇƮΨTest.hǩúĐ0羒nD:\sr\programs\x86_64-windows\ghc-9.2.8\lib\x86_64-windows-ghc-9.2.8\rts-1.0.2\include\ghcversion.h凖#𸔅\ README.mdڴڮ׾|ٟʑ莦ϧЖ0܍X ߦiޅ$). !"mainMainXbase ghc-bignumghc-boot-th-9.2.8ghc-primtemplate-haskell GHC.FloatGHC.BaseControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Type.Ord Data.Version Data.VoidGHC.Exts GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9028/X.hi0000644000000000000000000000116415055415375020253 0ustar0000000000000000d9028swӢҲމڴz夬Lߵܓǵ̈B      ݂!Θ鎘@ӣB‘b'%䶞KRߦiޅmrwmainXbase ghc-bignumghc-prim GHC.FloatGHC.BaseControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Type.Ord GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9044/Main.hi0000644000000000000000000000513615055415375020731 0ustar0000000000000000d9044˴Τ ]eUýǯ^򝖀Ĺסɘŋ؁$Ӻ񪏧aߵܓǵ̈B     ԩ֡Ύڠݹ˃߼Փwᩋ˥jӞH뀚ф ڳW ԉՙ]ІǞ[Test.hǩúĐ0羒nC:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\rts-1.0.2\include\ghcversion.hމҜȕ README.md됒GަLC:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\ghc-prim-0.9.0\libHSghc-prim-0.9.0.aΑړ͌C:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\ghc-bignum-1.3\libHSghc-bignum-1.3.a菫ͦ͌C:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\base-4.17.0.0\libHSbase-4.17.0.0.a™Śˁ[C:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\ghc-boot-th-9.4.4\libHSghc-boot-th-9.4.4.aXɞ߷#C:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\array-0.5.4.0\libHSarray-0.5.4.0.a՞⌄C:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\deepseq-1.4.8.0\libHSdeepseq-1.4.8.0.aͮº;ݝC:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\pretty-1.1.3.6\libHSpretty-1.1.3.6.aܹۑqC:\Users\mikep\AppData\Local\Programs\stack\x86_64-windows\ghc-9.4.4\lib\x86_64-windows-ghc-9.4.4\template-haskell-2.19.0.0\libHStemplate-haskell-2.19.0.0.aݳŢǿՕQʑ莦ϧҁЖ0 ʍ"梹7>ߦiޅ!"#mainMainXbaseghc-primtemplate-haskellGHC.Base GHC.Float GHC.Prim.ExtControl.Applicative Control.ArrowData.Array.ByteData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Type.Ord Data.Version Data.Void GHC.GenericsGHC.IO.Exception GHC.IsList GHC.RTS.Flagsghc-boot-th-9.4.4GHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9044/X.hi0000644000000000000000000000117315055415375020251 0ustar0000000000000000d9044ĜԾ@”Sz|͍#͂ࡺFᩋ˥jӞ̈⚤Ӻ񪏧aߵܓǵ̈B      Ύڠݹ˃H뀚фB‘b:ҁ%䶞^eߦiޅmainXbaseGHC.Base GHC.Floatghc-prim GHC.Prim.ExtControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Type.Ord GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9048/Main.hi0000644000000000000000000000452615056132216020726 0ustar0000000000000000d9048˴Τ U]M㗟Ұ΍奵rΐҡ;ŋ؁$Ӻ񪏧aߵܓǵ̈B     쾳j}g˴ݰۦ㻑ת̢8涻؜݁èϤ;څ ֒~꼭ה RTest.hǩúĐ0羒nD:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\rts-1.0.2\include\ghcversion.hÌòr README.mdȄـQD:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\ghc-prim-0.9.1\libHSghc-prim-0.9.1.a츫꺐D:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\ghc-bignum-1.3\libHSghc-bignum-1.3.aםĄD:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\base-4.17.2.1\libHSbase-4.17.2.1.aۍ]ȚխD:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\ghc-boot-th-9.4.8\libHSghc-boot-th-9.4.8.a܀̞:﹞ZD:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\array-0.5.4.0\libHSarray-0.5.4.0.aخˎ탫MD:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\deepseq-1.4.8.0\libHSdeepseq-1.4.8.0.aU񨏘^D:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\pretty-1.1.3.6\libHSpretty-1.1.3.6.aٳͽ¾-D:\sr\programs\x86_64-windows\ghc-9.4.8\lib\x86_64-windows-ghc-9.4.8\template-haskell-2.19.0.0\libHStemplate-haskell-2.19.0.0.aߑٚnݿDʑ莦ϧҁЖ0ʍ"梹/6ߦiޅ!"#mainMainXbaseghc-primtemplate-haskellGHC.Base GHC.Float GHC.Prim.ExtControl.Applicative Control.ArrowData.Array.ByteData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Type.Ord Data.Version Data.Void GHC.GenericsGHC.IO.Exception GHC.IsList GHC.RTS.Flagsghc-boot-th-9.4.8GHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9048/X.hi0000644000000000000000000000117515056132216020246 0ustar0000000000000000d9048ĜԾ@”S|~Ӧ丷ҵ؜݁̈⚤Ӻ񪏧aߵܓǵ̈B      g˴èϤB‘b<ҁ%䶞`gߦiޅmainXbaseGHC.Base GHC.Floatghc-prim GHC.Prim.ExtControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Type.Ord GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9067/Main.hi0000644000000000000000000000451315056132216020723 0ustar0000000000000000d9067˴Τ J\LܛԥEѧ'˖֣ݘnDوߵܓǵ̈B     ߥÅ۱⹃ѵ~χ̛؛ު@ϔꯡՌaIÃܩ̽ە鄶鉓ԏOœʉǖRTest.hǩúĐ0羒nD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\rts-1.0.2\include\ghcversion.h􋿧ߠ֐A README.mdȄـQD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\ghc-prim-0.10.0\libHSghc-prim-0.10.0.aͥ֋&֎ߨD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\ghc-bignum-1.3\libHSghc-bignum-1.3.a ٙůūD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\base-4.18.3.0\libHSbase-4.18.3.0.a֤ŻꑤőD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\ghc-boot-th-9.6.7\libHSghc-boot-th-9.6.7.aɉ8ѝ+D:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\array-0.5.8.0\libHSarray-0.5.8.0.a 澗͓vD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\deepseq-1.4.8.1\libHSdeepseq-1.4.8.1.aӏ VD:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\pretty-1.1.3.6\libHSpretty-1.1.3.6.a̐4D:\sr\programs\x86_64-windows\ghc-9.6.7\lib\x86_64-windows-ghc-9.6.7\template-haskell-2.20.0.0\libHStemplate-haskell-2.20.0.0.a˜ݲӲ9͉ɢȣQҁЖ0G˜8-5ߦiޅ !"mainMainXbaseghc-primtemplate-haskellGHC.Base GHC.Float GHC.Prim.ExtControl.Applicative Control.ArrowData.Array.ByteData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Type.Ord Data.Version GHC.GenericsGHC.IO.Exception GHC.IsList GHC.RTS.Flagsghc-boot-th-9.6.7GHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.Internalf $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9067/X.hi0000644000000000000000000000117715056132216020251 0ustar0000000000000000d9067ĜԾ@”S~ݒDڮꯡՌaIևֵDوߵܓǵ̈B      ⹃ѵ~χÃܩ̽Ʈϡކفŋ=ҁ%䶞aiߦiޅmainXbaseGHC.Base GHC.Floatghc-prim GHC.Prim.ExtControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Type.Ord GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9084/Main.hi0000644000000000000000000000444515056132216020726 0ustar0000000000000000d9084˴Τ $jZռƞVӰnݘnҸҭߵܓǵ̈B     ͂ǐۄۄ觡ƮTꭗϘl֏ð7̇מM炀եQ坩BƮ߀ ǩúĐ0羒n!׋1Ȯբ "ȄـQ#ʈū[$ԁߙȦc%ՎځĤ؏O&gМ'듌z(ʺۢ܁)ȸϫڃ 뭍LȞ֮}ɢȣQҁЖ0߿ɑ;Cߦiޅ*+,mainMainXbaseghc-primtemplate-haskellGHC.Base GHC.Float GHC.Prim.ExtControl.Applicative Control.ArrowData.Array.ByteData.Functor.ConstData.Functor.Identity Data.MonoidData.SemigroupData.Semigroup.Internal Data.Type.Ord Data.Version GHC.GenericsGHC.IO.Exception GHC.IsList GHC.RTS.Flagsghc-boot-th-9.8.4-e53cGHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeLanguage.Haskell.TH.SyntaxPrelude System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.InternalTest.hD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\rts-1.0.2\include\ghcversion.h README.mdD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\ghc-prim-0.11.0-4de7\libHSghc-prim-0.11.0-4de7.aD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\ghc-bignum-1.3-15b3\libHSghc-bignum-1.3-15b3.aD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\base-4.19.2.0-943b\libHSbase-4.19.2.0-943b.aD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\ghc-boot-th-9.8.4-e53c\libHSghc-boot-th-9.8.4-e53c.aD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\deepseq-1.5.1.0-f918\libHSdeepseq-1.5.1.0-f918.aD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\pretty-1.1.3.6-bba9\libHSpretty-1.1.3.6-bba9.aD:\sr\programs\x86_64-windows\ghc-9.8.4\lib\x86_64-windows-ghc-9.8.4\template-haskell-2.21.0.0-356f\libHStemplate-haskell-2.21.0.0-356f.af $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9084/X.hi0000644000000000000000000000120015056132216020233 0ustar0000000000000000d9084ĜԾ@”SᇟR֏ð7ևֵҸҭߵܓǵ̈B      觡ƮṪמMƮϡކفŋ>ҁ%䶞bjߦiޅmainXbaseGHC.Base GHC.Floatghc-prim GHC.Prim.ExtControl.Applicative Control.ArrowData.Functor.ConstData.Functor.Identity Data.MonoidData.Semigroup.Internal Data.Type.Ord GHC.GenericsGHC.IO.Exception GHC.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9102/Main.hi0000644000000000000000000000545515056132216020717 0ustar0000000000000000d9102˴Τ ,ЂrŅ~Ó*ʬ[祮ěYћȠ䄋ߵܓǵ̈B     丒Qڜx񢆜5ˣū{ƾ\ŀךǾ@ˎ ɿ+!뽵mހ瑜+ҍ"ǩúĐ0羒n#ފ㿊8Ĵ{$ȄـQ%˳Օ&ܗ̫ϼ'ꨄŀՓ(݆ǹΐШɇq)É[*ԍՠ+r١,ʁm-̊HܖɢȣQҁʤϴC߿ɑnvߦiޅ./0mainMainXbaseghc-primtemplate-haskell ghc-internalGHC.Internal.BaseGHC.Internal.Float GHC.Prim.ExtControl.ApplicativeData.Array.ByteData.Semigroupghc-boot-th-9.10.2-d5e0GHC.ForeignSrcLang.TypeGHC.LanguageExtensions.TypeGHC.Internal.Control.ArrowGHC.Internal.Data.Functor.Const"GHC.Internal.Data.Functor.IdentityGHC.Internal.Data.Monoid$GHC.Internal.Data.Semigroup.InternalGHC.Internal.Data.Type.OrdGHC.Internal.Data.VersionGHC.Internal.Functor.ZipListGHC.Internal.GenericsGHC.Internal.IO.ExceptionGHC.Internal.IsListGHC.Internal.RTS.FlagsLanguage.Haskell.TH.SyntaxPreludeGHC.Internal.System.IO GHC.TypesLanguage.Haskell.TH.Lib Language.Haskell.TH.Lib.InternalTest.hD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\rts-1.0.2\include\ghcversion.h README.mdD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\ghc-prim-0.12.0-ffdd\libHSghc-prim-0.12.0-ffdd.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\ghc-bignum-1.3-cf13\libHSghc-bignum-1.3-cf13.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\ghc-internal-9.1002.0-b8e0\libHSghc-internal-9.1002.0-b8e0.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\base-4.20.1.0-fed5\libHSbase-4.20.1.0-fed5.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\ghc-boot-th-9.10.2-d5e0\libHSghc-boot-th-9.10.2-d5e0.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\array-0.5.8.0-2b9d\libHSarray-0.5.8.0-2b9d.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\deepseq-1.5.0.0-f87e\libHSdeepseq-1.5.0.0-f87e.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\pretty-1.1.3.6-ceb3\libHSpretty-1.1.3.6-ceb3.aD:\sr\programs\x86_64-windows\ghc-9.10.2\lib\x86_64-windows-ghc-9.10.2\template-haskell-2.22.0.0-f314\libHStemplate-haskell-2.22.0.0-f314.af $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9102/X.hi0000644000000000000000000000132115056132216020226 0ustar0000000000000000d9102ĜԾ@”Sy/밾ƾ\ŀך󲙨Ҹ߸ěYћȠ䄋ߵܓǵ̈B     丒QǾ@ˎ Ʈϡކفŋ6ҁ%䶞ZbߦiޅmainXbase ghc-internalGHC.Internal.BaseGHC.Internal.Floatghc-prim GHC.Prim.ExtGHC.Internal.Data.Functor.Const"GHC.Internal.Data.Functor.IdentityGHC.Internal.Data.Monoid$GHC.Internal.Data.Semigroup.InternalGHC.Internal.Data.Type.OrdGHC.Internal.GenericsGHC.Internal.IO.ExceptionGHC.Internal.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9122/Main.hi0000644000000000000000000000404615056132216020714 0ustar0000000000000000d9122˴Τ1ѤʟӑЌ‡ɪʒјěYћȠ䄋ߵܓǵ̈BQ     wûzт֭ץç蹱շ܋ǹ{l拽ׁ;ݶܹt+ڔA㽡ﬦ܆݌ٕ Žހ֖Օܞ!|ˀ叓"ǩúĐ0羒n#ȯ²𹌈$$ȄـQ%ᠤ&҇ݴ?'ށ֚㋗χȯ̱cЇy҆ӓȇ:cθկsγƉcߦiޅ0 ҁ ()*mainMainXbase-4.21.0.0-55e3ghc-primtemplate-haskell-2.23.0.0-2522 ghc-internalGHC.Internal.BaseGHC.Internal.Float GHC.Prim.ExtControl.ApplicativeData.Array.ByteData.SemigroupGHC.Internal.Control.ArrowGHC.Internal.Data.Functor.Const"GHC.Internal.Data.Functor.IdentityGHC.Internal.Data.Monoid$GHC.Internal.Data.Semigroup.InternalGHC.Internal.Data.Type.OrdGHC.Internal.Data.VersionGHC.Internal.ForeignSrcLangGHC.Internal.Functor.ZipListGHC.Internal.GenericsGHC.Internal.IO.ExceptionGHC.Internal.IsListGHC.Internal.LanguageExtensionsGHC.Internal.RTS.FlagsGHC.Internal.TH.SyntaxPreludeGHC.Internal.System.IOGHC.Internal.TH.Lib GHC.TypesLanguage.Haskell.TH.LibLanguage.Haskell.TH.SyntaxTest.hD:\sr\programs\x86_64-windows\ghc-9.12.2\lib\x86_64-windows-ghc-9.12.2-e430\rts-1.0.2\include\ghcversion.h README.mdD:\sr\programs\x86_64-windows\ghc-9.12.2\lib\x86_64-windows-ghc-9.12.2-e430\ghc-prim-0.13.0-869e\libHSghc-prim-0.13.0-869e.aD:\sr\programs\x86_64-windows\ghc-9.12.2\lib\x86_64-windows-ghc-9.12.2-e430\ghc-bignum-1.3-89fe\libHSghc-bignum-1.3-89fe.aD:\sr\programs\x86_64-windows\ghc-9.12.2\lib\x86_64-windows-ghc-9.12.2-e430\ghc-internal-9.1202.0-cfbf\libHSghc-internal-9.1202.0-cfbf.af $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9122/X.hi0000644000000000000000000000136715056132216020242 0ustar0000000000000000d9122ĜԾ@”S|mJ܀G뎻ڔA㽡ǘݭЌٳ9ěYћȠ䄋ߵܓǵ̈B.     ûzтﬦ܆݌ٕҟcƑɌܱ'cߦiޅ ҁ mainXbase-4.21.0.0-55e3 ghc-internalGHC.Internal.BaseGHC.Internal.Floatghc-prim GHC.Prim.ExtGHC.Internal.Data.Functor.Const"GHC.Internal.Data.Functor.IdentityGHC.Internal.Data.Monoid$GHC.Internal.Data.Semigroup.InternalGHC.Internal.Data.Type.OrdGHC.Internal.GenericsGHC.Internal.IO.ExceptionGHC.Internal.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9140/Main.hi0000644000000000000000000000364315055415375020727 0ustar0000000000000000d 914020250819K͘O      [M c㰱ᆮcㅕ>ЇPcN륮䭧Qߖ ԩˤԸH̏QBʱߦiޅ7˴ΤX ㎴Dخׂ]Ҭ_ś庺Qߐ#͖&Ȃ}دٟԴӋŃD żΥVʗ跪d紾еᅢΦ,҈ݤ ǩúĐ0羒n!Ư0"ȄـQ#îŊ$ꓬ8w׽萂(ţ;ծꆵߵܓǵ̈B0 ҁ $%&mainMainXbase-4.22.0.0-1109 ghc-internaltemplate-haskell-2.24.0.0-35e0GHC.Internal.BaseGHC.Internal.Data.NonEmptyGHC.Internal.FloatGHC.Internal.Prim.ExtControl.ApplicativeGHC.Internal.Control.ArrowGHC.Internal.Data.Functor.Const"GHC.Internal.Data.Functor.IdentityGHC.Internal.Data.Monoid$GHC.Internal.Data.Semigroup.InternalGHC.Internal.Data.Type.OrdGHC.Internal.Data.VersionGHC.Internal.ForeignSrcLangGHC.Internal.Functor.ZipListGHC.Internal.GenericsGHC.Internal.IO.ExceptionGHC.Internal.LanguageExtensionsGHC.Internal.RTS.FlagsGHC.Internal.TH.SyntaxPreludeGHC.Internal.Types GHC.TypesLanguage.Haskell.TH.LibLanguage.Haskell.TH.SyntaxGHC.Internal.System.IOGHC.Internal.TH.LibTest.hD:\sr\programs\x86_64-windows\ghc-9.14.0.20250819\lib\x86_64-windows-ghc-9.14.0.20250819-ad6d\rts-1.0.3\include\ghcversion.h README.mdD:\sr\programs\x86_64-windows\ghc-9.14.0.20250819\lib\x86_64-windows-ghc-9.14.0.20250819-ad6d\ghc-internal-9.1400.0-fee7\libHSghc-internal-9.1400.0-fee7.af $trModulehi-file-parser-0.1.8.0/test-files/iface/x64/ghc9140/X.hi0000644000000000000000000000155715055415375020254 0ustar0000000000000000d 914020250819\יz˖󍩺2     @ӑޑጬ*cՒבѪΟcPٟԴӋŃDʗ跪d紾 żΥVߦiޅĜԾ@”S㎴D椈ϊţ;ծꆵߵܓǵ̈B ҁ mainXbase-4.22.0.0-1109 ghc-internalGHC.Internal.BaseGHC.Internal.Data.NonEmptyGHC.Internal.FloatGHC.Internal.Prim.ExtGHC.Internal.Data.Functor.Const"GHC.Internal.Data.Functor.IdentityGHC.Internal.Data.Monoid$GHC.Internal.Data.Semigroup.InternalGHC.Internal.Data.Type.OrdGHC.Internal.GenericsGHC.Internal.IO.ExceptionGHC.Internal.RTS.FlagsPreludex $trModulehi-file-parser-0.1.8.0/LICENSE0000644000000000000000000000276115056140661013672 0ustar0000000000000000Copyright (c) 2015-2025, Stack contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. * Neither the name of Stack 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 STACK 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. hi-file-parser-0.1.8.0/Setup.hs0000644000000000000000000000006015055415375014315 0ustar0000000000000000import Distribution.Simple main = defaultMain hi-file-parser-0.1.8.0/hi-file-parser.cabal0000644000000000000000000000601015056143621016446 0ustar0000000000000000cabal-version: 1.12 -- This file has been generated from package.yaml by hpack version 0.38.2. -- -- see: https://github.com/sol/hpack name: hi-file-parser version: 0.1.8.0 synopsis: Parser for GHC's *.hi files description: A parser for GHC's *.hi files. Extracts information about dependencies and usage of files. category: Development homepage: https://github.com/commercialhaskell/hi-file-parser#readme bug-reports: https://github.com/commercialhaskell/hi-file-parser/issues author: Hussein Ait-Lahcen maintainer: Michael Snoyman , Mike Pilgrem copyright: Copyright 2015-2025, Stack contributors license: BSD3 license-file: LICENSE build-type: Simple extra-source-files: README.md ChangeLog.md test-files/iface/x32/ghc7103/Main.hi test-files/iface/x32/ghc8002/Main.hi test-files/iface/x32/ghc8022/Main.hi test-files/iface/x32/ghc8044/Main.hi test-files/iface/x64/ghc8022/Main.hi test-files/iface/x64/ghc8022/X.hi test-files/iface/x64/ghc8044/Main.hi test-files/iface/x64/ghc8044/X.hi test-files/iface/x64/ghc8065/Main.hi test-files/iface/x64/ghc8065/X.hi test-files/iface/x64/ghc8084/Main.hi test-files/iface/x64/ghc8084/X.hi test-files/iface/x64/ghc8107/Main.hi test-files/iface/x64/ghc8107/X.hi test-files/iface/x64/ghc9002/Main.hi test-files/iface/x64/ghc9002/X.hi test-files/iface/x64/ghc9028/Main.hi test-files/iface/x64/ghc9028/X.hi test-files/iface/x64/ghc9044/Main.hi test-files/iface/x64/ghc9044/X.hi test-files/iface/x64/ghc9048/Main.hi test-files/iface/x64/ghc9048/X.hi test-files/iface/x64/ghc9067/Main.hi test-files/iface/x64/ghc9067/X.hi test-files/iface/x64/ghc9084/Main.hi test-files/iface/x64/ghc9084/X.hi test-files/iface/x64/ghc9102/Main.hi test-files/iface/x64/ghc9102/X.hi test-files/iface/x64/ghc9122/Main.hi test-files/iface/x64/ghc9122/X.hi test-files/iface/x64/ghc9140/Main.hi test-files/iface/x64/ghc9140/X.hi source-repository head type: git location: https://github.com/commercialhaskell/hi-file-parser library exposed-modules: HiFileParser hs-source-dirs: src ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints build-depends: base >=4.10 && <5 , binary , bytestring , mtl , rio , text , vector default-language: Haskell2010 test-suite hi-file-parser-test type: exitcode-stdio-1.0 main-is: Spec.hs other-modules: HiFileParserSpec hs-source-dirs: test ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N build-depends: base >=4.10 && <5 , binary , bytestring , hi-file-parser , hspec , mtl , rio , text , vector default-language: Haskell2010