object

# `optional`

Constructors for optional term references. A reference is either empty or holds a term. References should be regarded as opaque terms and always used with the `optional/1` object by passing the reference as a parameter.

Author: Paulo Moura
Version: 1.4
Date: 2019/1/23
Compilation flags:
`static, context_switching_calls`
Provides:
type::type/1
type::check/2
Remarks:

> - Type-checking support: This object also defines a type `optional` for use with the `type` library object.

- Public predicates

  - `empty/1`

  - `of/2`

  - `from_goal/3`

- Protected predicates

- Private predicates

- Operators

## Public predicates

### `empty/1`

Constructs an empty reference.

Compilation flags:
`static`
Template:
`empty(Reference)`
Mode and number of proofs:
`empty(--nonvar)` - `one`

### `of/2`

Constructs a reference holding a term.

Compilation flags:
`static`
Template:
`of(Term,Reference)`
Mode and number of proofs:
`of(@term,--nonvar)` - `one`

### `from_goal/3`

Constructs a reference by calling `Goal` that binds and holds `Term` on success. Returns an empty reference if the goal fails or throws an error.

Compilation flags:
`static`
Template:
`from_goal(Goal,Term,Reference)`
Meta-predicate template:
`from_goal(0,*,*)`
Mode and number of proofs:
`from_goal(+callable,--term,--nonvar)` - `one`

## Protected predicates

(see entity ancestors)

## Private predicates

(see entity ancestors)

## Operators

(none)

See also

optional(Reference), type