CocoaPods trunk is moving to be read-only. Read more on the blog, there are 19 months to go.

Swiftional 2.2.0

Swiftional 2.2.0

Maintained by VAndrJ.



Swiftional

Swiftional introduce some functional primitives that complement the Swift standard library.

Created for writing Swift code with a slight touch of functional programming.

Functions

curry Converts an uncurried function to a curried function.

Example:

(A, B) -> R
becomes
(A) -> (B) -> R
uncurry Converts a curried function into aan uncurried function.

Example:

(A) -> (B) -> R
becomes
(A, B) -> R
partial Partial application. Applies an argument to a function.

Example:

(A, B) -> R
with applied first argument becomes
(B) -> R
identity Identity combinator function. Returns the input without changing it.
constant The constant combinator function. Ignores the function arguments and always returns the provided value.
flip Flips the arguments of a function.

Example:

(A, B) -> R
becomes
(B, A) -> R
with Calls the specified closure with the given attrubute as its receiver and returns its result.
ignored Ignores the function return and always returns `Void`.
weakify Weakifying function.

Example:

// Instead of this:
someObject.onActionClosure = otherObject.someFunc // `otherObject` captured by strong reference
// Use operator:
someObject.onActionClosure = weakify(otherObject) { $0.someFunc() } // `otherObject` is weakified, not captured by strong reference

Extensions

Bool * `fold` Case analysis for the `Bool` type. Applies the provided closures based on the value.
  • foldRun Runs the provided closures based on the content of this value.

  • oldEither Case analysis for the Bool type. Applies the provided closures based on the value and return Either.

Optional * `fold` Case analysis for the `Optional` type. Applies the provided closures based on the content of this `Optional` value.

Protocols

Applyable * `apply` Calls the specified closure with Self value as its receiver and returns Self value.
  • applied Calls the specified closure with Self value as its receiver and returns copy of Self value.

Operators

>>> Composes a functions and return a function that is the result of applying `g` to the output of `f`.
<<< Composes a functions and return a function that is the result of applying `g` to the output of `f`.
|> Pipe forward. Applies an argument to a function.

Example. This:

let result = h(parameter: g(parameter: f(parameter: a)))

Can also be written as:

let result = a |> f |> g |> h
<| Pipe forward. Applies an argument to a function.

Example. This:

let result = h(parameter: g(parameter: f(parameter: a)))

Can also be written as:

let result = h <| g <| f <| a
|>> Applies a function to an argument an returns callable function.

Example. This:

let result = { a in f(parameter: a) }

Can also be written as:

let result = a |>> f
<<| Applies a function to an argument an returns callable function.

Example. This:

let result = { a in f(parameter: a) }

Can also be written as:

let result = f <<| a
~~> Asynchronous function composition
>=> Effectful function composition
?> Weakifying function.

Example:

// Instead of this:
someObject.onActionClosure = otherObject.someFunc // `otherObject` captured by strong reference
// Use operator:
someObject.onActionClosure = otherObject ?> { $0.someFunc() } // `otherObject` is weakified, not captured by strong reference

Types

Either The type `Either` represents a value of one of these types, but not both: `.left(Left)` or `.right(Right)`.

The Either type is shifted to the right by convention. That is, the .left constructor is usually used to hold errors or secondary data, while .right is used to store a "correct", primary value - one that can be worked on further.

Wordplay: "Right" also means "Correct".