Abstract

Simple functional combinators.

Synopsis

val |> '^a '^b : (x: a) -> (f: a -> b) -> b
val <| '^a '^b : (f: a -> b) -> (x: a) -> b
val >-> '^a '^b '^c : (f: a -> b) -> (g: b -> c) -> (x: a) -> c
val <-< '^a '^b '^c : (g: b -> c) -> (f: a -> b) -> (x: a) -> c
val flip '^a '^b '^c : (f: a -> b -> c) -> (b: b) -> (a: a) -> c
val curry '^a '^b '^c : (f: (a, b) -> c) -> (a: a) -> (b: b) -> c
val uncurry '^a '^b '^c : (f: a -> b -> c) -> (a, b) -> c
val const '^a '^b : (x: a) -> b -> a
val id '^a : (x: a) -> a
val iterate 'a : (n: i32) -> (f: a -> a) -> (x: a) -> a
val iterate_until 'a : (p: a -> bool) -> (f: a -> a) -> (x: a) -> a
val iterate_while 'a : (p: a -> bool) -> (f: a -> a) -> (x: a) -> a

Description

val |> '^a '^b: (x: a) -> (f: a -> b) -> b

Left-to-right application. Particularly useful for describing computation pipelines:

x |> f |> g |> h
val <| '^a '^b: (f: a -> b) -> (x: a) -> b

Right to left application.

val >-> '^a '^b '^c: (f: a -> b) -> (g: b -> c) -> (x: a) -> c

Function composition, with values flowing from left to right.

val <-< '^a '^b '^c: (g: b -> c) -> (f: a -> b) -> (x: a) -> c

Function composition, with values flowing from right to left. This is the same as the operator known from mathematics.

val flip '^a '^b '^c: (f: a -> b -> c) -> (b: b) -> (a: a) -> c

Flip the arguments passed to a function.

f x y == flip f y x
val curry '^a '^b '^c: (f: (a, b) -> c) -> (a: a) -> (b: b) -> c

Transform a function taking a pair into a function taking two arguments.

val uncurry '^a '^b '^c: (f: a -> b -> c) -> (a, b) -> c

Transform a function taking two arguments in a function taking a pair.

val const '^a '^b: (x: a) -> b -> a

The constant function.

val id '^a: (x: a) -> a

The identity function.

val iterate 'a: (n: i32) -> (f: a -> a) -> (x: a) -> a

Apply a function some number of times.

val iterate_until 'a: (p: a -> bool) -> (f: a -> a) -> (x: a) -> a

Keep applying f until p returns true for the input value. May apply zero times. Note: may not terminate.

val iterate_while 'a: (p: a -> bool) -> (f: a -> a) -> (x: a) -> a

Keep applying f while p returns true for the input value. May apply zero times. Note: may not terminate.