Witchcraft.Semigroupoid (Witchcraft v1.0.4) View Source
A semigroupoid describes some way of composing morphisms on between some collection of objects.
Type Class
An instance of Witchcraft.Semigroupoid must define Witchcraft.Semigroupoid.compose/2.
Semigroupoid  [compose/2]
  Link to this section Summary
Functions
Composition operator "the pipe way". Alias for pipe_compose/2.
Express how to apply arguments to the very end of a semigroupoid, or "run the morphism". This should not be used to inject values part way though a composition chain.
Take two morphisms and return their composition "the math way".
That is, (b -> c) -> (a -> b) -> (a -> c).
Pipe some data through a morphism.
compose/2, but with the arguments flipped (same direction as |>).
Link to this section Types
Specs
t() :: any()
Link to this section Functions
Specs
Composition operator "the math way". Alias for compose/2.
Examples
iex> times_ten_plus_one =
...>       fn x -> x + 1  end
...>   <|> fn y -> y * 10 end
...>
...> times_ten_plus_one.(5)
51
  Specs
Composition operator "the pipe way". Alias for pipe_compose/2.
Examples
iex> times_ten_plus_one =
...>       fn y -> y * 10 end
...>   <~> fn x -> x + 1  end
...>
...> times_ten_plus_one.(5)
51
  Specs
Express how to apply arguments to the very end of a semigroupoid, or "run the morphism". This should not be used to inject values part way though a composition chain.
It is provided here to remain idiomatic with Elixir, and to make prop testing possible.
Examples
iex> Witchcraft.Semigroupoid.apply(&inspect/1, [42])
"42"
  Specs
Take two morphisms and return their composition "the math way".
That is, (b -> c) -> (a -> b) -> (a -> c).
Examples
iex> times_ten_plus_one = compose(fn x -> x + 1 end, fn y -> y * 10 end)
...> times_ten_plus_one.(5)
51
  Specs
Pipe some data through a morphism.
Similar to apply/2, but with a single argument, not needing to wrap
the argument in a list.
Examples
iex> pipe(42, &(&1 + 1))
43
  Specs
compose/2, but with the arguments flipped (same direction as |>).
Examples
iex> times_ten_plus_one = pipe_compose(fn y -> y * 10 end, fn x -> x + 1 end)
...> times_ten_plus_one.(5)
51