Function types
Noir supports higher-order functions. The syntax for a function type is as follows:
fn(arg1_type, arg2_type, ...) -> return_type
Example:
fn assert_returns_100(f: fn() -> Field) { // f takes no args and returns a Field
assert(f() == 100);
}
fn main() {
assert_returns_100(|| 100); // ok
assert_returns_100(|| 150); // fails
}
A function type also has an optional capture environment - this is necessary to support closures. See Lambdas for more details.