-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathmonoid.nix
47 lines (33 loc) · 807 Bytes
/
monoid.nix
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
with rec {
function = import ./function.nix;
inherit (function) compose id flip;
semigroup = import ./semigroup.nix;
imports = {
list = import ./list.nix;
string = import ./string.nix;
nullable = import ./nullable.nix;
optional = import ./optional.nix;
};
};
rec {
first = optional semigroup.first;
last = optional semigroup.last;
min = optional semigroup.min;
max = optional semigroup.max;
dual = monoid: semigroup.dual monoid // {
empty = monoid.empty;
};
endo = semigroup.endo // {
empty = id;
};
all = semigroup.all // {
empty = true;
};
and = semigroup.and // {
empty = false;
};
list = imports.list.monoid;
string = imports.string.monoid;
nullable = imports.nullable.monoid;
optional = imports.optional.monoid;
}