candidates :: ((Id, TypeScheme) -> Maybe Term) -- ^ Definiens extractor
           -> (TypeScheme -> Bool) -- ^ Filter predicate for types
           -> Set.Set Symbol -> Set.Set Symbol -> [[(MatchOp, MatchOp)]]
candidates df tPred s1 s2 = map toList $ candidatesAux tp1 tp2
    where (tp1, tp2) = (typePartition df tPred s1, typePartition df tPred s2)

-- ** 3. Matching of candidates
candidates :: ((Id, TypeScheme) -> Maybe Term) -- ^ Definiens extractor
           -> (TypeScheme -> Bool) -- ^ Filter predicate for types
           -> Set.Set Symbol -> Set.Set Symbol -> [[(MatchOp, MatchOp)]]
candidates df tPred s1 s2 = map toList $ candidatesAux tp1 tp2
    where (tp1, tp2) = (typePartition df tPred s1, typePartition df tPred s2)

-- ** 3. Matching of candidates
candidates df tPred s1 s2 = map toList $ candidatesAux tp1 tp2
    where (tp1, tp2) = (typePartition df tPred s1, typePartition df tPred s2)

-- ** 3. Matching of candidates