Witchcraft.Applicative (Witchcraft v1.0.4) View Source
Applicative extends Apply with the ability to lift value into a
particular data type or "context".
This fills in the connection between regular function application and Apply
           data --------------- function ---------------> result
             |                      |                       |
 of(Container, data)    of(Container, function) of(Container, result)
             ↓                      ↓                       ↓
%Container<data> --- %Container<function> ---> %Container<result>Type Class
An instance of Witchcraft.Applicative must also implement Witchcraft.Apply,
and define Witchcraft.Applicative.of/2.
   Functor    [map/2]
      ↓
    Apply     [convey/2]
      ↓
 Applicative  [of/2]
  Link to this section Summary
Functions
Partially apply of/2, generally as a way to bring many values into the same context.
Bring a value into the same data type as some sample
Alias for of/2, for cases that this helps legibility or style.
Prime a value to be brought into other data types
of/2 with arguments reversed.
Alias for of/2, for cases that this helps legibility or style
Alias for of/2, for cases that this helps legibility or style.
Link to this section Types
Specs
t() :: any()
Link to this section Functions
Specs
Partially apply of/2, generally as a way to bring many values into the same context.
Examples
iex> {"very example", "much wow"}
...> |> of()
...> |> Witchcraft.Functor.across([42, "hello", [1, 2, 3]])
[{"", 42}, {"", "hello"}, {"", [1, 2, 3]}]
  Specs
Bring a value into the same data type as some sample
Examples
iex> of([], 42)
[42]
iex> of([1, 2, 3], 42)
[42]
iex> of({"a", "b", 155}, 42)
{"", "", 42}
iex> of(fn -> nil end, 42).(55)
42
iex> of(fn(a, b, c) -> a + b - c end, 42).(55)
42
iex> import Witchcraft.Apply
...>
...> []
...> |> of(&+/2)
...> |> provide([1, 2, 3])
...> |> ap(of([], 42))
[43, 44, 45]
  Specs
Alias for of/2, for cases that this helps legibility or style.
Example
iex> pure({"ohai", "thar"}, 42)
{"", 42}
iex> [] |> pure(42)
[42]
  Specs
Prime a value to be brought into other data types
Example
iex> make = to(42)
...> make.({"ohai", "thar"})
{"", 42}
...> make.([])
[42]
  Specs
of/2 with arguments reversed.
Example
iex> to(42, {"ohai", "thar"})
{"", 42}
iex> 42 |> to([])
[42]
42 |> to(%Algae.Id{})
#=> %Algae.Id{id: 42}
  Specs
Alias for of/2, for cases that this helps legibility or style
Example
iex> unit({":)", ":("}, 42)
{"", 42}
iex> [] |> unit(42)
[42]
  Specs
Alias for of/2, for cases that this helps legibility or style.
Example
iex> wrap({":|", "^.~"}, 42)
{"", 42}
iex> [] |> wrap(42)
[42]