ghc-8.2.2: The GHC API

Safe Haskell | None
Language | Haskell2010

RtClosureInspect

Synopsis

- cvObtainTerm :: HscEnv -> Int -> Bool -> RttiType -> HValue -> IO Term
- cvReconstructType :: HscEnv -> Int -> GhciType -> HValue -> IO (Maybe Type)
- improveRTTIType :: HscEnv -> RttiType -> RttiType -> Maybe TCvSubst
- data Term
  - = Term {
    - ty :: RttiType
    - dc :: Either String DataCon
    - val :: HValue
    - subTerms :: [Term]
    }
  - | Prim {
    - ty :: RttiType
    - value :: [Word]
    }
  - | Suspension {
    - ctype :: ClosureType
    - ty :: RttiType
    - val :: HValue
    - bound_to :: Maybe Name
    }
  - | NewtypeWrap {
    - ty :: RttiType
    - dc :: Either String DataCon
    - wrapped_term :: Term
    }
  - | RefWrap {
    - ty :: RttiType
    - wrapped_term :: Term
    }
- isTerm :: Term -> Bool
- isSuspension :: Term -> Bool
- isPrim :: Term -> Bool
- isFun :: Term -> Bool
- isFunLike :: Term -> Bool
- isNewtypeWrap :: Term -> Bool
- isFullyEvaluated :: DynFlags -> a -> IO Bool
- isFullyEvaluatedTerm :: Term -> Bool
- termType :: Term -> RttiType
- mapTermType :: (RttiType -> Type) -> Term -> Term
- termTyCoVars :: Term -> TyCoVarSet
- foldTerm :: TermFold a -> Term -> a
- data TermFold a = TermFold {
  - fTerm :: TermProcessor a a
  - fPrim :: RttiType -> [Word] -> a
  - fSuspension :: ClosureType -> RttiType -> HValue -> Maybe Name -> a
  - fNewtypeWrap :: RttiType -> Either String DataCon -> a -> a
  - fRefWrap :: RttiType -> a -> a
  }
- foldTermM :: Monad m => TermFoldM m a -> Term -> m a
- data TermFoldM m a = TermFoldM {
  - fTermM :: TermProcessor a (m a)
  - fPrimM :: RttiType -> [Word] -> m a
  - fSuspensionM :: ClosureType -> RttiType -> HValue -> Maybe Name -> m a
  - fNewtypeWrapM :: RttiType -> Either String DataCon -> a -> m a
  - fRefWrapM :: RttiType -> a -> m a
  }
- idTermFold :: TermFold Term
- pprTerm :: TermPrinter -> TermPrinter
- cPprTerm :: Monad m => CustomTermPrinter m -> Term -> m SDoc
- cPprTermBase :: forall m. Monad m => CustomTermPrinter m
- type CustomTermPrinter m = TermPrinterM m -> [Precedence -> Term -> m (Maybe SDoc)]
- data Closure = Closure {
  - tipe :: ClosureType
  - infoPtr :: Ptr ()
  - infoTable :: StgInfoTable
  - ptrs :: Array Int HValue
  - nonPtrs :: [Word]
  }
- getClosureData :: DynFlags -> a -> IO Closure
- data ClosureType
  - = Constr
  - | Fun
  - | Thunk Int
  - | ThunkSelector
  - | Blackhole
  - | AP
  - | PAP
  - | Indirection Int
  - | MutVar Int
  - | MVar Int
  - | Other Int
- isConstr :: ClosureType -> Bool
- isIndirection :: ClosureType -> Bool

# Documentation

cvObtainTerm :: HscEnv -> Int -> Bool -> RttiType -> HValue -> IO Term #

cvReconstructType :: HscEnv -> Int -> GhciType -> HValue -> IO (Maybe Type) #

improveRTTIType :: HscEnv -> RttiType -> RttiType -> Maybe TCvSubst #

data Term #

Constructors

Term |

Fields

- ty :: RttiType
- dc :: Either String DataCon
- val :: HValue
- subTerms :: [Term]

Prim |

Fields

- ty :: RttiType
- value :: [Word]

Suspension |

Fields

- ctype :: ClosureType
- ty :: RttiType
- val :: HValue
- bound_to :: Maybe Name

NewtypeWrap |

Fields

- ty :: RttiType
- dc :: Either String DataCon
- wrapped_term :: Term

RefWrap |

Fields

- ty :: RttiType
- wrapped_term :: Term

Instances

Outputable Term # |
Methods ppr :: Term -> SDoc # pprPrec :: Rational -> Term -> SDoc #

isTerm :: Term -> Bool #

isSuspension :: Term -> Bool #

isPrim :: Term -> Bool #

isFun :: Term -> Bool #

isFunLike :: Term -> Bool #

isNewtypeWrap :: Term -> Bool #

isFullyEvaluated :: DynFlags -> a -> IO Bool #

isFullyEvaluatedTerm :: Term -> Bool #

termType :: Term -> RttiType #

mapTermType :: (RttiType -> Type) -> Term -> Term #

termTyCoVars :: Term -> TyCoVarSet #

foldTerm :: TermFold a -> Term -> a #

data TermFold a #

Constructors

TermFold |

Fields

- fTerm :: TermProcessor a a
- fPrim :: RttiType -> [Word] -> a
- fSuspension :: ClosureType -> RttiType -> HValue -> Maybe Name -> a
- fNewtypeWrap :: RttiType -> Either String DataCon -> a -> a
- fRefWrap :: RttiType -> a -> a

foldTermM :: Monad m => TermFoldM m a -> Term -> m a #

data TermFoldM m a #

Constructors

TermFoldM |

Fields

- fTermM :: TermProcessor a (m a)
- fPrimM :: RttiType -> [Word] -> m a
- fSuspensionM :: ClosureType -> RttiType -> HValue -> Maybe Name -> m a
- fNewtypeWrapM :: RttiType -> Either String DataCon -> a -> m a
- fRefWrapM :: RttiType -> a -> m a

idTermFold :: TermFold Term #

pprTerm :: TermPrinter -> TermPrinter #

cPprTerm :: Monad m => CustomTermPrinter m -> Term -> m SDoc #

Takes a list of custom printers with a explicit recursion knot and a term, and returns the output of the first successful printer, or the default printer

cPprTermBase :: forall m. Monad m => CustomTermPrinter m #

type CustomTermPrinter m = TermPrinterM m -> [Precedence -> Term -> m (Maybe SDoc)] #

data Closure #

Constructors

Closure |

Fields

- tipe :: ClosureType
- infoPtr :: Ptr ()
- infoTable :: StgInfoTable
- ptrs :: Array Int HValue
- nonPtrs :: [Word]

getClosureData :: DynFlags -> a -> IO Closure #

data ClosureType #

Constructors

Constr |
Fun |
Thunk Int |
ThunkSelector |
Blackhole |
AP |
PAP |
Indirection Int |
MutVar Int |
MVar Int |
Other Int |

Instances

Eq ClosureType # |
Methods (==) :: ClosureType -> ClosureType -> Bool # (/=) :: ClosureType -> ClosureType -> Bool #
Show ClosureType # |
Methods showsPrec :: Int -> ClosureType -> ShowS Source # show :: ClosureType -> String Source # showList :: [ClosureType] -> ShowS Source #
Outputable ClosureType # |
Methods ppr :: ClosureType -> SDoc # pprPrec :: Rational -> ClosureType -> SDoc #

isConstr :: ClosureType -> Bool #

isIndirection :: ClosureType -> Bool #