module Control.Monad.Foil (
S(..),
Scope,
Name,
NameBinder,
emptyScope,
extendScope,
extendScopePattern,
member,
nameOf,
namesOfPattern,
nameId,
Id,
RawName,
withFreshBinder,
withFresh,
NameRange(..),
fullNameRange,
withFreshIn,
tryWithFreshIn,
withFreshPattern,
withRefreshed,
withRefreshedIn,
withRefreshedPattern,
withRefreshedPattern',
unsinkName,
unsinkNamePattern,
NameSet,
emptyNameSet,
nameSetSingleton,
nameSetInsert,
nameSetMember,
nameSetNull,
nameSetSize,
nameSetToList,
nameSetFromList,
nameSetOfPattern,
scopeToNameSet,
nameSetSubsetOfScope,
unsinkNameSet,
withRestrictedScope,
SinkableK(..),
Sinkable(..),
CoSinkable(..),
PatternTransport,
verbatimTransport,
transportUnderBinder,
transportPayload,
transportName,
HasNameBinders(getNameBinders),
sink,
sink1,
sink2,
sinkabilityProof2,
sinkContainer,
extendRenaming,
extendNameBinderRenaming,
composeNameBinderRenamings,
fromNameBinderRenaming,
extendRenamingNameBinder,
Substitution,
lookupSubst,
identitySubst,
nullSubst,
voidSubst,
addSubst,
addSubstPattern,
addSubstList,
addRename,
UnifyNameBinders(..),
unifyNameBinders,
andThenUnifyPatterns,
andThenUnifyNameBinders,
UnifiablePattern(..),
UnifiableInPattern(..),
AlphaEquiv(..),
NameBinders,
emptyNameBinders,
mergeNameBinders,
V2, absurd2,
NameMap,
emptyNameMap,
mapWithName,
lookupName,
addNameBinder,
popNameBinder,
nameMapToSubstitution,
nameMapToScope,
addNameBinders,
addNameBinderList,
withFreshNameBinderList,
withFreshNameBinderListIn,
NameBinderList(..),
nameBindersList,
nameBinderListOf,
fromNameBindersList,
snocNameBinderList,
concatNameBinderLists,
withThinnedNameBinderList,
Ext,
ExtEvidence(..),
Distinct,
DistinctEvidence(..),
assertDistinct,
assertExt,
DExt,
InjectName(..),
) where
import Control.Monad.Foil.Internal