qtil
advanced-security/qtil-swift 0.0.3
Search

Module SignaturePredicates

A module for creating signature predicates without requiring separate declarations.

Examples:

  • Nullary::pred/0: A predicate with no parameters and no result.
  • Nullary::Ret<int>::pred/0: A predicate with no parameters and an int result.
  • Unary<int>::pred/1: A predicate with one int parameter and no result.
  • Unary<int>::Ret<string>::pred/1: A predicate with one int parameter and a string result.
  • Binary<int, string>::pred/2: A predicate with two parameters, an int and a string, and no result.
  • Binary<int, string>::Ret<int>::pred/2: A predicate with two parameters, an int and a string, and an int result.
  • Ternary<A, B, C>::pred/3: A predicate with three parameters, an A, a B, and a C, and no result.
  • Ternary<A, B, C>::Ret<D>::pred/3: A predicate with three parameters, an A, a B, and a C, and a D result.
  • etc., for Quaternary, Quinary, and Senary predicates.

What is the purpose of this module?

Creating a parameterized module often requires declaring a signature predicate:

signature predicate isImportant(Foo f);
module MyModule<isImportant/1> { ... }

Sometimes this signature predicate declaration adds clarity, but other times it may feel like boilerplate. Particularly, when the predicate depends on the module’s parameters, it requires an additional module declaration.

module PredicateModule<Foo F> {
  signature predicate isImportant(F f);
}

module MyModule<Foo F, PredicateModule<F>::isImportart/1 isImportant> { ... }

Again, such a declaration may be useful. However, this module provides an option to avoid signature predicate declarations altogether (up to quinary predicates).

With this module, you can simply declare:

module MyModule1<Unary<Foo>::pred/1 isImportart> { ... }

module MyModule2<Foo F, Unary<F>::pred/1 isImportant> { ... }

Import path

import qtil.parameterization.SignaturePredicates

Modules

Binary

A module for creating binary predicates (predicates with two parameters) without requiring a signature predicate declaration.

Nullary

A module for creating nullary predicates (predicates with no parameters) without requiring a signature predicate declaration.

Quaternary

A module for creating quaternary predicates (predicates with four parameters) without requiring a signature predicate declaration.

Quinary

A module for creating quinary predicates (predicates with five parameters) without requiring a signature predicate declaration.

Senary

A module for creating senary predicates (predicates with six parameters) without requiring a signature predicate declaration.

Ternary

A module for creating ternary predicates (predicates with three parameters) without requiring a signature predicate declaration.

Unary

A module for creating unary predicates (predicates with one parameter) without requiring a signature predicate declaration.