1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use *;
///
///A [monoid](MulMonoid) constructed from free multiplication of elements of a set
///
///Concretely, given a set `C`, we construct the free-monoid of `C` as the set of all finite lists
///of members of `C` where multiplication is given by concatenation. In other words, it's basically
///[`Vec<C>`](Vec) but with `a*b == {a.append(&mut b); a}`.
///
///# Examples
///```
///use maths_traits::algebra::One;
///use free_algebra::FreeMonoid;
///
///let s1 = FreeMonoid::one() * 'a' * 'b' * 'c';
///let s2 = s1.clone().reverse();
///
///assert_eq!(s1, ['a','b','c']);
///assert_eq!(s2, ['c','b','a']);
///
///let mul = s1 * s2;
///
///assert_eq!(mul, ['a','b','c','c','b','a']);
///
///```
///
pub type FreeMonoid<C> = ;