Safe Haskell | None |
---|---|
Language | Haskell98 |
- initialIFSCandidates :: Type -> TCM (Maybe [Candidate])
- initializeIFSMeta :: String -> Type -> TCM Term
- findInScope :: MetaId -> Maybe [Candidate] -> TCM ()
- findInScope' :: MetaId -> [Candidate] -> TCM (Maybe ([Candidate], Maybe MetaId))
- rigidlyConstrainedMetas :: TCM [MetaId]
- isRigid :: MetaId -> TCM Bool
- areThereNonRigidMetaArguments :: Term -> TCM (Maybe MetaId)
- filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM Bool) -> TCM [Candidate]
- dropSameCandidates :: MetaId -> [(Candidate, Term, Type, a)] -> TCM [(Candidate, Term, Type, a)]
- checkCandidates :: MetaId -> Type -> [Candidate] -> TCM (Maybe [Candidate])
- applyDroppingParameters :: Term -> Args -> TCM Term
Documentation
initialIFSCandidates :: Type -> TCM (Maybe [Candidate]) Source
Compute a list of instance candidates.
Nothing
if type is a meta, error if type is not eligible
for instance search.
initializeIFSMeta :: String -> Type -> TCM Term Source
initializeIFSMeta s t
generates an instance meta of type t
with suggested name s
, possibly with leading lambdas.
findInScope :: MetaId -> Maybe [Candidate] -> TCM () Source
findInScope m (v,a)s
tries to instantiate on of the types a
s
of the candidate terms v
s to the type t
of the metavariable m
.
If successful, meta m
is solved with the instantiation of v
.
If unsuccessful, the constraint is regenerated, with possibly reduced
candidate set.
The list of candidates is equal to Nothing
when the type of the meta
wasn't known when the constraint was generated. In that case, try to find
its type again.
findInScope' :: MetaId -> [Candidate] -> TCM (Maybe ([Candidate], Maybe MetaId)) Source
Result says whether we need to add constraint, and if so, the set of remaining candidates and an eventual blocking metavariable.
rigidlyConstrainedMetas :: TCM [MetaId] Source
A meta _M is rigidly constrained if there is a constraint _M us == D vs, for inert D. Such metas can safely be instantiated by recursive instance search, since the constraint limits the solution space.
areThereNonRigidMetaArguments :: Term -> TCM (Maybe MetaId) Source
Returns True if one of the arguments of t
is a meta which isn’t rigidly
constrained. Note that level metas are never considered rigidly constrained
(#1865).
filterResetingState :: MetaId -> [Candidate] -> (Candidate -> TCM Bool) -> TCM [Candidate] Source
Apply the computation to every argument in turn by reseting the state every time. Return the list of the arguments giving the result True.
If the resulting list contains exactly one element, then the state is the same as the one obtained after running the corresponding computation. In all the other cases, the state is reseted.
dropSameCandidates :: MetaId -> [(Candidate, Term, Type, a)] -> TCM [(Candidate, Term, Type, a)] Source
checkCandidates :: MetaId -> Type -> [Candidate] -> TCM (Maybe [Candidate]) Source
Given a meta m
of type t
and a list of candidates cands
,
checkCandidates m t cands
returns a refined list of valid candidates.
applyDroppingParameters :: Term -> Args -> TCM Term Source
To preserve the invariant that a constructor is not applied to its
parameter arguments, we explicitly check whether function term
we are applying to arguments is a unapplied constructor.
In this case we drop the first conPars
arguments.
See Issue670a.
Andreas, 2013-11-07 Also do this for projections, see Issue670b.