# `extends_category/2-3`

## Description

    extends_category(Category, ParentCategory)
    extends_category(Category, ParentCategory, Scope)

Enumerates, by backtracking, all pairs of categories such that the first one extends the second. The relation scope is represented by the atoms `public`, `protected`, and `private`.

## Modes and number of proofs

    extends_category(?category_identifier, ?category_identifier) - zero_or_more
    extends_category(?category_identifier, ?category_identifier, ?scope) - zero_or_more

## Errors

`Category` is neither a variable nor a valid protocol identifier:
`type_error(category_identifier, Category)`
`ParentCategory` is neither a variable nor a valid protocol identifier:
`type_error(category_identifier, ParentCategory)`
`Scope` is neither a variable nor an atom:
`type_error(atom, Scope)`
`Scope` is an atom but an invalid entity scope:
`domain_error(scope, Scope)`

## Examples

    % enumerate the categories extended by the derailleur category:
    | ?- extends_category(derailleur, Category).

    % enumerate categories that privately extend the basics category:
    | ?- extends_category(Category, basics, private).

See also

current_category/1, complements_object/2, imports_category/2-3