Documentation

Function type signatures

A function type signature describes a function’s input parameters and types, and the function’s output type. Use type signatures to identify data types expected by function parameters and to understand a function’s expected output.

Function type signature structure

(parameter: type) => output-type
  • Copy
  • Fill window

Parameter notation

Parameter notation indicates specific behaviors of function parameters.

?  // Optional parameter
<- // Pipe receive – indicates the parameter that, by default, represents
   // the piped-forward value
  • Copy
  • Fill window

Type variables

Flux type signatures use type variables to represent unique types in the signature. A type variable is polymorphic, meaning it can be one of many types, and may be constrained by type constraints.

Type variables use the following identifier patterns:

A
B
C
t11
// etc.
  • Copy
  • Fill window

Type notation

Stream types

Type signatures identify stream types (streams of tables) using the stream[A] syntax where A is a unique type variable. Stream types may included specific column names and column types.

// Stream of tables
stream[A]

// Stream of tables with specific columns, but inferred column types.
stream[{col1: A, col2: B}]

// Stream of tables additional or required "count" column with an
// explicit integer type.
stream[{A with count: int}]
  • Copy
  • Fill window

Basic types

Type signatures identify basic types with the following type identifiers:

bool     // boolean type
bytes    // bytes type
duration // duration type
float    // float type
int      // integer type
regexp   // regular expression type
string   // string type
time     // time type
uint     // unsigned integer type
  • Copy
  • Fill window

Composite types

Type signatures identify Flux composite types with the following syntaxes:

[A]             // array type
[B: A]          // dictionary type
(param: A) => B // function type
{_value: int}   // record type
  • Copy
  • Fill window

Type constraints

Some function parameters are “polymorphic” and can support multiple data types. Polymorphic parameters are bound by type constraints, which define what types can be used. Type signatures indicate type constraints for specific values using the where A: Constraint syntax.

For example, the following type signature describes a function that takes a single parameter, v and returns and integer. v can be any type that satisfies the Timeable constraint (duration or time).

(v: A) => int where A: Timeable
  • Copy
  • Fill window

For more information about the different type constraints and the types each supports, see Type constraints.

Example function type signatures


Function without parameters

The following type signature describes a function that:

  • Has no parameters
  • Returns a time value
() => time
  • Copy
  • Fill window

Function with parameters

The following type signature describes a function that:

  • Has two parameters of type A:
    • multiplier (Optional)
    • v (Required)
  • Returns a value the same type as the two input parameters
(?multiplier: A, v: A) => A
  • Copy
  • Fill window

Pass-through transformation

The following type signature describes a transformation that:

  • Takes a stream of tables of type A as piped-forward input
  • Returns the input stream of tables with an unmodified type
(<-tables: stream[A]) => stream[A]
  • Copy
  • Fill window

Basic transformation

The following type signature describes a transformation that:

  • Takes a stream of tables of type A as piped-forward input
  • Has an fn parameter with a function type
    • fn uses type A as input and returns type B
  • Returns a new, modified stream of tables of type B
(<-tables: stream[A], fn: (r: A) => B,) => stream[B]
  • Copy
  • Fill window

Transformation that adds a column with an explicit type

The following type signature describes a transformation that:

  • Takes a stream of tables of type A as piped-forward input
  • Has a required tag parameter of type B
    • The B type is constrained by the Stringable constraint
  • Returns a new, modified stream of tables of type A that includes a tag column with string values
(<-tables: stream[A], tag: B) => stream[{A with tag: string}] where B: Stringable
  • Copy
  • Fill window

Was this page helpful?

Thank you for your feedback!


The future of Flux

Flux is going into maintenance mode. You can continue using it as you currently are without any changes to your code.

Read more

InfluxDB 3 Core and Enterprise are now in Beta

InfluxDB 3 Core and Enterprise are now available for beta testing, available under MIT or Apache 2 license.

InfluxDB 3 Core is a high-speed, recent-data engine that collects and processes data in real-time, while persisting it to local disk or object storage. InfluxDB 3 Enterprise is a commercial product that builds on Core’s foundation, adding high availability, read replicas, enhanced security, and data compaction for faster queries. A free tier of InfluxDB 3 Enterprise will also be available for at-home, non-commercial use for hobbyists to get the full historical time series database set of capabilities.

For more information, check out: