-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathsemigroup.nix
62 lines (48 loc) · 910 Bytes
/
semigroup.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
with rec {
function = import ./function.nix;
inherit (function) compose id flip;
imports = {
list = import ./list.nix;
string = import ./string.nix;
nullable = import ./nullable.nix;
optional = import ./optional.nix;
nonempty = import ./nonempty.nix;
};
};
{
first = {
append = x: _: x;
};
last = {
append = _: x: x;
};
min = {
append = x: y:
if x < y
then x
else y;
};
max = {
append = x: y:
if x > y
then x
else y;
};
dual = semigroup: {
append = flip semigroup.append;
};
endo = {
append = compose;
};
all = {
append = x: y: x && y;
};
and = {
append = x: y: x || y;
};
list = imports.list.semigroup;
string = imports.string.semigroup;
nonempty = imports.nonempty.semigroup;
nullable = imports.nullable.semigroup;
optional = imports.optional.semigroup;
}