aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 715261594f34f94c1de2a4f271e7ffadbdde34cb (about) (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# algebraic-structures

Provides useful algebraic structures for programming using parameterized module.

## Install

Run `chicken-install` in the project's root directory.

```
$ cd algebraic-structures
$ chicken-install
```

## Supported Features

- Semigroup: `(algebraic-structures semigroup)`
  - Number (product): `(algebraic-structures number product semigroup)`
  - Number (sum): `(algebraic-structures number sum semigroup)`
  - List: `(algebraic-structures list semigroup)`
  - Vector: `(algebraic-structures vector semigroup)`
  - Stream: `(algebraic-structures stream semigroup)`
- Semigroup.reduce: `(algebraic-structures semigroup reduce)`
- Monoid: `(algebraic-structures monoid)`
  - Number (product): `(algebraic-structures number product monoid)`
  - Number (sum): `(algebraic-structures number sum monoid)`
  - List: `(algebraic-structures list monoid)`
  - Vector: `(algebraic-structures vector monoid)`
  - Stream: `(algebraic-structures stream monoid)`
- Monoid.fold: `(algebraic-structures monoid fold)`
- Group
  - Number (product): `(algebraic-structures number product group)`
  - Number (sum): `(algebraic-structures number sum group)`
- Foldable: `(algebraic-structures foldable)` 
  - List: `(algebraic-structures list foldable)`
  - Vector: `(algebraic-structures vector foldable)`
  - Stream: `(algebraic-structures stream foldable)`
- Reducible: `(algebraic-structures reducible)` 
  - List: `(algebraic-structures list reducible)`
  - Vector: `(algebraic-structures vector reducible)`
  - Stream: `(algebraic-structures stream reducible)`
- Functor: `(algebraic-structures functor)` 
  - List: `(algebraic-structures list functor)`
  - Vector: `(algebraic-structures vector functor)`
  - Stream: `(algebraic-structures stream functor)`
- Applicative: `(algebraic-structures applicative)` 
  - List: `(algebraic-structures list applicative)`
  - List (zip): `(algebraic-structures list zip applicative)`
  - Vector (zip): `(algebraic-structures vector zip applicative)`
  - Stream: `(algebraic-structures stream applicative)`
  - Stream (zip): `(algebraic-structures stream zip applicative)`
- Monad: `(algebraic-structures monad)` 
  - List: `(algebraic-structures list monad)`
  - Stream: `(algebraic-structures stream monad)`
- Alternative: `(algebraic-structures alternative)` 
  - List: `(algebraic-structures list alternative)`
  - Stream: `(algebraic-structures stream alternative)`

## Examples

- Monad
  - [optional](./examples/optional.scm)
  - [state](./examples/state.scm)