Compiler.Hoopl

# Body

type Body n

type Body' block n

emptyBody

bodyList

addBlock

bodyUnion

# Graph

type Graph

data Graph' block n e x

class NonLocal thing

## Constructing graphs

bodyGraph

blockGraph

gUnitOO

gUnitOC

gUnitCO

gUnitCC

catGraphNodeOC

catGraphNodeOO

catNodeCOGraph

catNodeOOGraph

## Splicing graphs

splice

gSplice

## Maps

mapGraph

mapGraphBlocks

## Folds

foldGraphNodes

## Extracting Labels

labelsDefined

labelsUsed

externalEntryLabels

## Depth-first traversals

postorder_dfs

postorder_dfs_from

postorder_dfs_from_except

preorder_dfs

preorder_dfs_from_except

class LabelsPtr l

# Shapes

data O

data C

data MaybeO ex t

data MaybeC ex t

type family IndexedCO ex a b :: *

data Shape ex

# Blocks

data Block n e x

## Predicates on Blocks

isEmptyBlock

## Constructing blocks

emptyBlock

blockCons

blockSnoc

blockJoinHead

blockJoinTail

blockJoin

blockJoinAny

blockAppend

## Deconstructing blocks

firstNode

lastNode

endNodes

blockSplitHead

blockSplitTail

blockSplit

blockSplitAny

## Modifying blocks

replaceFirstNode

replaceLastNode

## Converting to and from lists

blockToList

blockFromList

## Maps and folds

mapBlock

mapBlock'

mapBlock3'

foldBlockNodesF

foldBlockNodesF3

foldBlockNodesB

foldBlockNodesB3

## Biasing

frontBiasBlock

backBiasBlock

data AGraph n e x

graphOfAGraph

aGraphOfGraph

(<*>)

(|*><*|)

catGraphs

addEntrySeq

addExitSeq

addBlocks

unionBlocks

emptyGraph

emptyClosedGraph

withFresh

mkFirst

mkMiddle

mkMiddles

mkLast

mkBranch

mkLabel

mkWhileDo

class IfThenElseable x

mkEntry

mkExit

class HooplNode n

# Utilities for clients

firstXfer

distributeXfer

distributeFact

distributeFactBwd

successorFacts

joinFacts

joinOutFacts

joinMaps

analyzeAndRewriteFwdBody

analyzeAndRewriteBwdBody

analyzeAndRewriteFwdOx

analyzeAndRewriteBwdOx

class IsSet set

setInsertList

setDeleteList

setUnions

class IsMap map

mapInsertList

mapDeleteList

mapUnions

class CheckpointMonad m

data DataflowLattice a

type JoinFun a

data OldFact a

data NewFact a

type family Fact x f :: *

mkFactBase

data ChangeFlag

changeIf

data FwdPass m n f

data FwdTransfer n f

mkFTransfer

mkFTransfer3

data FwdRewrite m n f

mkFRewrite

mkFRewrite3

noFwdRewrite

wrapFR

wrapFR2

data BwdPass m n f

data BwdTransfer n f

mkBTransfer

mkBTransfer3

wrapBR

wrapBR2

data BwdRewrite m n f

mkBRewrite

mkBRewrite3

noBwdRewrite

analyzeAndRewriteFwd

analyzeAndRewriteBwd

# Respecting Fuel

data Label

freshLabel

data LabelSet

data LabelMap v

type FactBase f

noFacts

lookupFact

uniqueToLbl

lblToUnique

data Pointed t b a

addPoints

addPoints'

addTop

addTop'

liftJoinTop

extendJoinDomain

type WithTop a

type WithBot a

type WithTopAndBot a

thenFwdRw

deepFwdRw3

deepFwdRw

iterFwdRw

thenBwdRw

deepBwdRw3

deepBwdRw

iterBwdRw

pairFwd

pairBwd

pairLattice

type Fuel

infiniteFuel

fuelRemaining

withFuel

class FuelMonad m

class FuelMonadT fm

data CheckingFuelMonad m a

data InfiniteFuelMonad m a

type SimpleFuelMonad

type Unique

intToUnique

data UniqueSet

data UniqueMap v

class UniqueMonad m

data SimpleUniqueMonad a

runSimpleUniqueMonad

data UniqueMonadT m a

runUniqueMonadT

uniqueToInt

type TraceFn

debugFwdJoins

debugBwdJoins

debugFwdTransfers

debugBwdTransfers

showGraph

showFactBase