package scotch.symbol; import static java.util.Arrays.asList; import java.util.List; import java.util.Optional; import java.util.Set; import scotch.symbol.descriptor.TypeInstanceDescriptor; import scotch.symbol.type.SumTypeDescriptor; import scotch.symbol.type.TypeDescriptor; public interface SymbolResolver { Optional<SymbolEntry> getEntry(Symbol symbol); Set<TypeInstanceDescriptor> getTypeInstances(Symbol symbol, List<TypeDescriptor> types); Set<TypeInstanceDescriptor> getTypeInstancesByModule(String moduleName); default boolean isDefined(Symbol symbol) { return getEntry(symbol).isPresent(); } default boolean isImplemented(Symbol typeClass, SumTypeDescriptor type) { return !getTypeInstances(typeClass, asList(type)).isEmpty(); } }