ghc-8.2.2: The GHC API

Safe HaskellNone
LanguageHaskell2010

Binary

Contents

Synopsis

Documentation

data Bin a #

Instances

Bounded (Bin k a) # 

Methods

minBound :: Bin k a Source #

maxBound :: Bin k a Source #

Eq (Bin k a) # 

Methods

(==) :: Bin k a -> Bin k a -> Bool #

(/=) :: Bin k a -> Bin k a -> Bool #

Ord (Bin k a) # 

Methods

compare :: Bin k a -> Bin k a -> Ordering #

(<) :: Bin k a -> Bin k a -> Bool #

(<=) :: Bin k a -> Bin k a -> Bool #

(>) :: Bin k a -> Bin k a -> Bool #

(>=) :: Bin k a -> Bin k a -> Bool #

max :: Bin k a -> Bin k a -> Bin k a #

min :: Bin k a -> Bin k a -> Bin k a #

Show (Bin k a) # 

Methods

showsPrec :: Int -> Bin k a -> ShowS Source #

show :: Bin k a -> String Source #

showList :: [Bin k a] -> ShowS Source #

Binary (Bin k a) # 

Methods

put_ :: BinHandle -> Bin k a -> IO () #

put :: BinHandle -> Bin k a -> IO (Bin * (Bin k a)) #

get :: BinHandle -> IO (Bin k a) #

class Binary a where #

Minimal complete definition

get

Methods

put_ :: BinHandle -> a -> IO () #

put :: BinHandle -> a -> IO (Bin a) #

get :: BinHandle -> IO a #

Instances

Binary Bool # 

Methods

put_ :: BinHandle -> Bool -> IO () #

put :: BinHandle -> Bool -> IO (Bin * Bool) #

get :: BinHandle -> IO Bool #

Binary Char # 

Methods

put_ :: BinHandle -> Char -> IO () #

put :: BinHandle -> Char -> IO (Bin * Char) #

get :: BinHandle -> IO Char #

Binary Int # 

Methods

put_ :: BinHandle -> Int -> IO () #

put :: BinHandle -> Int -> IO (Bin * Int) #

get :: BinHandle -> IO Int #

Binary Int8 # 

Methods

put_ :: BinHandle -> Int8 -> IO () #

put :: BinHandle -> Int8 -> IO (Bin * Int8) #

get :: BinHandle -> IO Int8 #

Binary Int16 # 

Methods

put_ :: BinHandle -> Int16 -> IO () #

put :: BinHandle -> Int16 -> IO (Bin * Int16) #

get :: BinHandle -> IO Int16 #

Binary Int32 # 

Methods

put_ :: BinHandle -> Int32 -> IO () #

put :: BinHandle -> Int32 -> IO (Bin * Int32) #

get :: BinHandle -> IO Int32 #

Binary Int64 # 

Methods

put_ :: BinHandle -> Int64 -> IO () #

put :: BinHandle -> Int64 -> IO (Bin * Int64) #

get :: BinHandle -> IO Int64 #

Binary Integer # 
Binary Word8 # 

Methods

put_ :: BinHandle -> Word8 -> IO () #

put :: BinHandle -> Word8 -> IO (Bin * Word8) #

get :: BinHandle -> IO Word8 #

Binary Word16 # 

Methods

put_ :: BinHandle -> Word16 -> IO () #

put :: BinHandle -> Word16 -> IO (Bin * Word16) #

get :: BinHandle -> IO Word16 #

Binary Word32 # 

Methods

put_ :: BinHandle -> Word32 -> IO () #

put :: BinHandle -> Word32 -> IO (Bin * Word32) #

get :: BinHandle -> IO Word32 #

Binary Word64 # 

Methods

put_ :: BinHandle -> Word64 -> IO () #

put :: BinHandle -> Word64 -> IO (Bin * Word64) #

get :: BinHandle -> IO Word64 #

Binary RuntimeRep # 
Binary VecCount # 
Binary VecElem # 
Binary SomeTypeRep # 
Binary () # 

Methods

put_ :: BinHandle -> () -> IO () #

put :: BinHandle -> () -> IO (Bin * ()) #

get :: BinHandle -> IO () #

Binary TyCon # 

Methods

put_ :: BinHandle -> TyCon -> IO () #

put :: BinHandle -> TyCon -> IO (Bin * TyCon) #

get :: BinHandle -> IO TyCon #

Binary KindRep # 
Binary TypeLitSort # 
Binary Fingerprint # 
Binary ByteString # 
Binary UTCTime # 
Binary DiffTime # 
Binary Day # 

Methods

put_ :: BinHandle -> Day -> IO () #

put :: BinHandle -> Day -> IO (Bin * Day) #

get :: BinHandle -> IO Day #

Binary Serialized # 
Binary Name #

Assumes that the Name is a non-binding one. See putIfaceTopBndr and getIfaceTopBndr for serializing binding Names. See UserData for the rationale for this distinction.

Methods

put_ :: BinHandle -> Name -> IO () #

put :: BinHandle -> Name -> IO (Bin * Name) #

get :: BinHandle -> IO Name #

Binary OccName # 
Binary FastString # 
Binary ComponentId # 
Binary InstalledUnitId # 
Binary UnitId # 

Methods

put_ :: BinHandle -> UnitId -> IO () #

put :: BinHandle -> UnitId -> IO (Bin * UnitId) #

get :: BinHandle -> IO UnitId #

Binary ModuleName # 
Binary Module # 

Methods

put_ :: BinHandle -> Module -> IO () #

put :: BinHandle -> Module -> IO (Bin * Module) #

get :: BinHandle -> IO Module #

Binary SrcSpan # 
Binary InlineSpec # 
Binary InlinePragma # 
Binary RuleMatchInfo # 
Binary Activation # 
Binary SourceText # 
Binary TupleSort # 
Binary OverlapMode # 
Binary OverlapFlag # 
Binary RecFlag # 
Binary FixityDirection # 
Binary Fixity # 

Methods

put_ :: BinHandle -> Fixity -> IO () #

put :: BinHandle -> Fixity -> IO (Bin * Fixity) #

get :: BinHandle -> IO Fixity #

Binary WarningTxt # 
Binary StringLiteral # 
Binary FunctionOrData # 
Binary LeftOrRight # 
Binary DefUnitId # 
Binary IndefUnitId # 
Binary CType # 

Methods

put_ :: BinHandle -> CType -> IO () #

put :: BinHandle -> CType -> IO (Bin * CType) #

get :: BinHandle -> IO CType #

Binary Header # 

Methods

put_ :: BinHandle -> Header -> IO () #

put :: BinHandle -> Header -> IO (Bin * Header) #

get :: BinHandle -> IO Header #

Binary CCallConv # 
Binary CCallTarget # 
Binary CCallSpec # 
Binary CExportSpec # 
Binary Safety # 

Methods

put_ :: BinHandle -> Safety -> IO () #

put :: BinHandle -> Safety -> IO (Bin * Safety) #

get :: BinHandle -> IO Safety #

Binary ForeignCall # 
Binary HscSource # 
Binary NameSpace # 
Binary AvailInfo # 
Binary ArgFlag # 
Binary IsCafCC # 
Binary CostCentre # 
Binary Role # 

Methods

put_ :: BinHandle -> Role -> IO () #

put :: BinHandle -> Role -> IO (Bin * Role) #

get :: BinHandle -> IO Role #

Binary Injectivity # 
Binary TyConBndrVis # 
Binary IfaceTcArgs # 
Binary IfaceCoercion # 
Binary IfaceTyLit # 
Binary IfaceTyCon # 
Binary IfaceType # 
Binary IfaceUnivCoProv # 
Binary IfaceTyConInfo # 
Binary IfaceTyConSort # 
Binary IsPromoted # 
Binary IfaceOneShot # 
Binary IfaceBndr # 
Binary Literal # 
Binary SrcUnpackedness # 
Binary SrcStrictness # 
Binary StrictSig # 
Binary DmdType # 
Binary CPRResult # 
Binary DmdResult # 
Binary Count # 

Methods

put_ :: BinHandle -> Count -> IO () #

put :: BinHandle -> Count -> IO (Bin * Count) #

get :: BinHandle -> IO Count #

Binary UseDmd # 

Methods

put_ :: BinHandle -> UseDmd -> IO () #

put :: BinHandle -> UseDmd -> IO (Bin * UseDmd) #

get :: BinHandle -> IO UseDmd #

Binary StrDmd # 

Methods

put_ :: BinHandle -> StrDmd -> IO () #

put :: BinHandle -> StrDmd -> IO (Bin * StrDmd) #

get :: BinHandle -> IO StrDmd #

Binary IsOrphan # 
Binary IfaceJoinInfo # 
Binary IfaceLetBndr # 
Binary IfaceBinding # 
Binary IfaceConAlt # 
Binary IfaceTickish # 
Binary IfaceExpr # 
Binary IfaceIdDetails # 
Binary IfaceUnfolding # 
Binary IfaceInfoItem # 
Binary IfaceIdInfo # 
Binary IfaceCompleteMatch # 
Binary IfaceAnnotation # 
Binary IfaceRule # 
Binary IfaceFamInst # 
Binary IfaceClsInst # 
Binary IfaceSrcBang # 
Binary IfaceBang # 
Binary IfaceConDecl # 
Binary IfaceConDecls # 
Binary IfaceAxBranch # 
Binary IfaceAT # 
Binary IfaceClassOp # 
Binary IfaceFamTyConFlav # 
Binary IfaceTyConParent # 
Binary IfaceDecl # 
Binary IfaceTrustInfo # 
Binary IfaceVectInfo # 
Binary Usage # 

Methods

put_ :: BinHandle -> Usage -> IO () #

put :: BinHandle -> Usage -> IO (Bin * Usage) #

get :: BinHandle -> IO Usage #

Binary Dependencies # 
Binary Warnings # 
Binary ModIface # 
Binary a => Binary [a] # 

Methods

put_ :: BinHandle -> [a] -> IO () #

put :: BinHandle -> [a] -> IO (Bin * [a]) #

get :: BinHandle -> IO [a] #

Binary a => Binary (Maybe a) # 

Methods

put_ :: BinHandle -> Maybe a -> IO () #

put :: BinHandle -> Maybe a -> IO (Bin * (Maybe a)) #

get :: BinHandle -> IO (Maybe a) #

Binary a => Binary (Ratio a) # 

Methods

put_ :: BinHandle -> Ratio a -> IO () #

put :: BinHandle -> Ratio a -> IO (Bin * (Ratio a)) #

get :: BinHandle -> IO (Ratio a) #

Binary (DefMethSpec IfaceType) # 
Binary a => Binary (BooleanFormula a) # 
Binary a => Binary (FieldLbl a) # 

Methods

put_ :: BinHandle -> FieldLbl a -> IO () #

put :: BinHandle -> FieldLbl a -> IO (Bin * (FieldLbl a)) #

get :: BinHandle -> IO (FieldLbl a) #

Binary name => Binary (AnnTarget name) # 

Methods

put_ :: BinHandle -> AnnTarget name -> IO () #

put :: BinHandle -> AnnTarget name -> IO (Bin * (AnnTarget name)) #

get :: BinHandle -> IO (AnnTarget name) #

(Binary a, Binary b) => Binary (Either a b) # 

Methods

put_ :: BinHandle -> Either a b -> IO () #

put :: BinHandle -> Either a b -> IO (Bin * (Either a b)) #

get :: BinHandle -> IO (Either a b) #

Typeable k a => Binary (TypeRep k a) # 

Methods

put_ :: BinHandle -> TypeRep k a -> IO () #

put :: BinHandle -> TypeRep k a -> IO (Bin * (TypeRep k a)) #

get :: BinHandle -> IO (TypeRep k a) #

(Binary a, Binary b) => Binary (a, b) # 

Methods

put_ :: BinHandle -> (a, b) -> IO () #

put :: BinHandle -> (a, b) -> IO (Bin * (a, b)) #

get :: BinHandle -> IO (a, b) #

Binary a => Binary (GenLocated SrcSpan a) # 
Binary (Bin k a) # 

Methods

put_ :: BinHandle -> Bin k a -> IO () #

put :: BinHandle -> Bin k a -> IO (Bin * (Bin k a)) #

get :: BinHandle -> IO (Bin k a) #

(Binary tv, Binary vis) => Binary (TyVarBndr tv vis) # 

Methods

put_ :: BinHandle -> TyVarBndr tv vis -> IO () #

put :: BinHandle -> TyVarBndr tv vis -> IO (Bin * (TyVarBndr tv vis)) #

get :: BinHandle -> IO (TyVarBndr tv vis) #

(Binary a, Binary b, Binary c) => Binary (a, b, c) # 

Methods

put_ :: BinHandle -> (a, b, c) -> IO () #

put :: BinHandle -> (a, b, c) -> IO (Bin * (a, b, c)) #

get :: BinHandle -> IO (a, b, c) #

(Binary a, Binary b, Binary c, Binary d) => Binary (a, b, c, d) # 

Methods

put_ :: BinHandle -> (a, b, c, d) -> IO () #

put :: BinHandle -> (a, b, c, d) -> IO (Bin * (a, b, c, d)) #

get :: BinHandle -> IO (a, b, c, d) #

(Binary a, Binary b, Binary c, Binary d, Binary e) => Binary (a, b, c, d, e) # 

Methods

put_ :: BinHandle -> (a, b, c, d, e) -> IO () #

put :: BinHandle -> (a, b, c, d, e) -> IO (Bin * (a, b, c, d, e)) #

get :: BinHandle -> IO (a, b, c, d, e) #

(Binary a, Binary b, Binary c, Binary d, Binary e, Binary f) => Binary (a, b, c, d, e, f) # 

Methods

put_ :: BinHandle -> (a, b, c, d, e, f) -> IO () #

put :: BinHandle -> (a, b, c, d, e, f) -> IO (Bin * (a, b, c, d, e, f)) #

get :: BinHandle -> IO (a, b, c, d, e, f) #

(Binary a, Binary b, Binary c, Binary d, Binary e, Binary f, Binary g) => Binary (a, b, c, d, e, f, g) # 

Methods

put_ :: BinHandle -> (a, b, c, d, e, f, g) -> IO () #

put :: BinHandle -> (a, b, c, d, e, f, g) -> IO (Bin * (a, b, c, d, e, f, g)) #

get :: BinHandle -> IO (a, b, c, d, e, f, g) #

seekBin :: BinHandle -> Bin a -> IO () #

seekBy :: BinHandle -> Int -> IO () #

castBin :: Bin a -> Bin b #

withBinBuffer :: BinHandle -> (ByteString -> IO a) -> IO a #

Get access to the underlying buffer.

It is quite important that no references to the ByteString leak out of the continuation lest terrible things happen.

putAt :: Binary a => BinHandle -> Bin a -> a -> IO () #

getAt :: Binary a => BinHandle -> Bin a -> IO a #

For writing instances

putByte :: BinHandle -> Word8 -> IO () #

Lazy Binary I/O

lazyGet :: Binary a => BinHandle -> IO a #

lazyPut :: Binary a => BinHandle -> a -> IO () #

User data

data UserData #

Information we keep around during interface file serialization/deserialization. Namely we keep the functions for serializing and deserializing Names and FastStrings. We do this because we actually use serialization in two distinct settings,

  • When serializing interface files themselves
  • When computing the fingerprint of an IfaceDecl (which we computing by hashing its Binary serialization)

These two settings have different needs while serializing Names:

  • Names in interface files are serialized via a symbol table (see Note [Symbol table representation of names] in BinIface).
  • During fingerprinting a binding Name is serialized as the OccName and a non-binding Name is serialized as the fingerprint of the thing they represent. See Note [Fingerprinting IfaceDecls] for further discussion.

Constructors

UserData 

Fields

newReadState #

Arguments

:: (BinHandle -> IO Name)

how to deserialize Names

-> (BinHandle -> IO FastString) 
-> UserData 

newWriteState #

Arguments

:: (BinHandle -> Name -> IO ())

how to serialize non-binding Names

-> (BinHandle -> Name -> IO ())

how to serialize binding Names

-> (BinHandle -> FastString -> IO ()) 
-> UserData