Witchcraft.Semigroup (Witchcraft v1.0.4) View Source
A semigroup is a structure describing data that can be appendenated with others of its type. That is to say that appending another list returns a list, appending one map to another returns a map, and appending two integers returns an integer, and so on.
These can be chained together an arbitrary number of times. For example:
1 <> 2 <> 3 <> 5 <> 7 == 18
[1, 2, 3] <> [4, 5, 6] <> [7, 8, 9] == [1, 2, 3, 4, 5, 6, 7, 8, 9]
"foo" <> " " <> "bar" == "foo bar"
This generalizes the idea of a monoid, as it does not require an empty
version.
Type Class
An instance of Witchcraft.Semigroup
must define Witchcraft.Semigroup.append/2
.
Semigroup [append/2]
Link to this section Summary
Functions
append
enate two data of the same type. These can be chained together an arbitrary number of times. For example
Flatten a list of homogeneous semigroups to a single container.
Repeat the contents of a semigroup a certain number of times.
Link to this section Types
Specs
t() :: any()
Link to this section Functions
append
enate two data of the same type. These can be chained together an arbitrary number of times. For example:
iex> 1 |> append(2) |> append(3)
6
iex> [1, 2, 3]
...> |> append([4, 5, 6])
...> |> append([7, 8, 9])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
iex> "foo" |> append(" ") |> append("bar")
"foo bar"
Operator
iex> use Witchcraft.Semigroup
...> 1 <> 2 <> 3 <> 5 <> 7
18
iex> use Witchcraft.Semigroup
...> [1, 2, 3] <> [4, 5, 6] <> [7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
iex> use Witchcraft.Semigroup
...> "foo" <> " " <> "bar"
"foo bar"
There is an operator alias a <> b
. Since this conflicts with Kernel.<>/2
,
use Witchcraft,Semigroup
will automatically exclude the Kernel operator.
This is highly recommended, since <>
behaves the same on bitstrings, but is
now available on more datatypes.
Specs
Flatten a list of homogeneous semigroups to a single container.
Example
iex> concat [
...> [1, 2, 3],
...> [4, 5, 6]
...> ]
[1, 2, 3, 4, 5, 6]
Specs
repeat(t(), [{:times, non_neg_integer()}]) :: t()
Repeat the contents of a semigroup a certain number of times.
Examples
iex> [1, 2, 3] |> repeat(times: 3)
[1, 2, 3, 1, 2, 3, 1, 2, 3]