CoreSyn

# Main data types

data Expr b
type Alt b
data Bind b
data AltCon
type Arg b
data Note
type CoreExpr
type CoreAlt
type CoreBind
type CoreArg
type CoreBndr
type TaggedExpr t
type TaggedAlt t
type TaggedBind t
type TaggedArg t
data TaggedBndr t

## `Expr` construction

mkLets
mkLams
mkApps
mkTyApps
mkVarApps
mkIntLit
mkIntLitInt
mkWordLit
mkWordLitWord
mkCharLit
mkStringLit
mkFloatLit
mkFloatLitFloat
mkDoubleLit
mkDoubleLitDouble
mkConApp
mkTyBind
varToCoreExpr
varsToCoreExprs
isTyVar
isIdVar
cmpAltCon
cmpAlt
ltAlt

## Simple `Expr` access functions and predicates

bindersOf
bindersOfBinds
rhssOfBind
rhssOfAlts
collectBinders
collectTyBinders
collectValBinders
collectTyAndValBinders
collectArgs
coreExprCc
flattenBinds
isValArg
isTypeArg
valArgCount
valBndrCount
isRuntimeArg
isRuntimeVar

# Unfolding data types

data Unfolding
data UnfoldingGuidance

## Constructing `Unfolding`s

noUnfolding
evaldUnfolding
mkOtherCon

## Predicates and deconstruction on `Unfolding`

unfoldingTemplate
maybeUnfoldingTemplate
otherCons
isValueUnfolding
isEvaldUnfolding
isCheapUnfolding
isCompulsoryUnfolding
hasUnfolding
hasSomeUnfolding
neverUnfold

# Strictness

seqExpr
seqExprs
seqUnfolding

# Annotated expression data types

type AnnExpr bndr annot
data AnnExpr' bndr annot
data AnnBind bndr annot
type AnnAlt bndr annot

## Operations on annotations

deAnnotate
deAnnotate'
deAnnAlt
collectAnnBndrs

# Core rule data types

data CoreRule
type RuleName

## Operations on `CoreRule`s

seqRules
ruleArity
ruleName
ruleIdName
ruleActivation_maybe
setRuleIdName
isBuiltinRule
isLocalRule