-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy patheitherT.dot
78 lines (64 loc) · 3.61 KB
/
eitherT.dot
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
digraph eitherT {
// rankdir=LR
label="EitherT in cats\n\n\n"
labelloc=top
fontname="times-italic"
color=grey
style=dotted
node [shape=oval fontname="courier-bold" color=grey]
edge [fontcolor=black color=grey fontname="courier"]
# issue: ] inside of < > seems to not be parsed correctly, replace with escape code ]
subgraph cluster_efea {
color=white
label=""
EFEA [label=<EitherT[F, <font color="red3">E</font>, <font color="green3">A</font>]>]
}
"error type" [shape=none fontname="times" fontcolor=grey]
"success type" [shape=none fontname="times" fontcolor=grey]
"error type" -> E [style=dashed arrowhead=onormal]
"success type" -> A [style=dashed arrowhead=empty]
subgraph cluster_intro {
label="introduction forms"
E [fontcolor=red3]
A [fontcolor=green3]
FE [label=<F[<font color="red3">E</font>]>]
FA [label=<F[<font color="green3">A</font>]>]
EAB [label=<Either[<font color="red3">E</font>, <font color="green3">A</font>]>]
FEAB [label=<F[Either[<font color="red3">E</font>, <font color="green3">A</font>]]>]
E -> EAB [label="asLeft[B]" fontcolor=grey]
A -> EAB [label="asRight[A]" fontcolor=grey]
E -> FE [label="pure[F]" fontcolor=grey]
A -> FA [label="pure[F]" fontcolor=grey]
E -> EFEA [label=<EitherT.<font color="red3">leftT</font>[F, <font color="green3">A</font>]>]
A -> EFEA [label=<EitherT.<font color="green3">rightT</font>[F, <font color="red3">E</font>]>]
FE -> EFEA [label=<EitherT.<font color="red3">left</font>[<font color="green3">A</font>]>]
FA -> EFEA [label=<EitherT.<font color="green3">right</font>[<font color="red3">E</font>]>]
EAB -> EFEA [label="EitherT.fromEither[F]"]
// FB -> FEAB [label="map(_.asRight[A])" fontcolor=grey]
// EAB -> EFEA [label="toEitherT[F]"]
EAB -> FEAB [label="pure[F]" fontcolor=grey]
FEAB -> EFEA [label="EitherT.apply"]
}
subgraph cluster_elim {
label="elimination forms"
FEAB_ [label=<F[Either[<font color="red3">E</font>, <font color="green3">A</font>]]>]
FB_ [label=<F[<font color="green3">A</font>]>]
FB [label="F[B]"]
EFEA -> FEAB_ [label="value"]
EFEA -> FB [label=<fold[B]<br/>(fa: <font color="red3">E</font> ⇒ B,<br/>fb: <font color="green3">A</font> ⇒ B)>]
EFEA -> FB_ [label=<getOrElse<br/>(default: ⇒ <font color="green3">A</font>)>]
EFEA -> FB_ [label=<valueOr<br/>(f: <font color="red3">E</font> ⇒ <font color="green3">A</font>)>]
}
subgraph cluster_more_combinators {
label="combinators"
EFEA_ [label=<EitherT[F, <font color="red3">E</font>, <font color="green3">A</font>]>]
EFEB [label=<EitherT[F, <font color="red3">E</font>, <font color="green3">B</font>]>]
EFE2A [label=<EitherT[F, <font color="red3">E2</font>, <font color="green3">A</font>]>]
EFE2B [label=<EitherT[F, <font color="red3">E2</font>, <font color="green3">B</font>]>]
EFEA_ -> EFEA_ [label=<ensure<br/>(onFailure: ⇒ <font color="red3">E</font>)<br/>(f: <font color="green3">A</font> ⇒ Boolean)>]
EFEA_ -> EFEA_ [headport=w label=<adaptError<br/>(pf: PartialFunction[<font color="red3">E</font>, <font color="red3">E</font>])>]
EFEA_ -> EFE2A [tailport=sw label=<leftMap<br/>(f: <font color="red3">E</font> ⇒ <font color="red3">E2</font>)>]
EFEA_ -> EFEB [tailport=se label=<map<br/>(f: <font color="green3">A</font> ⇒ <font color="green3">B</font>)>]
EFEA_ -> EFE2B [tailport=s label=<bimap<br/>(f: <font color="red3">E</font> ⇒ <font color="red3">E2</font>,<br/>g: <font color="green3">A</font> ⇒ <font color="green3">B</font>)>]
}
}