blob: f5ac9c6ba245926e9bf2ba2d5e0d0f67394ed3af (
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
|
(.module:
lux
(lux [io]
(control ["M" monad #+ do Monad]
comonad)
(data ["&" identity]
[text "Text/" Monoid<Text> Eq<Text>]))
lux/test)
(context: "Identity"
(let [(^open "&/") &.Apply<Identity>
(^open "&/") &.Monad<Identity>
(^open "&/") &.CoMonad<Identity>]
($_ seq
(test "Functor does not affect values."
(Text/= "yololol" (&/map (Text/compose "yolo") "lol")))
(test "Apply does not affect values."
(and (Text/= "yolo" (&/wrap "yolo"))
(Text/= "yololol" (&/apply (&/wrap (Text/compose "yolo")) (&/wrap "lol")))))
(test "Monad does not affect values."
(Text/= "yololol" (do &.Monad<Identity>
[f (wrap Text/compose)
a (wrap "yolo")
b (wrap "lol")]
(wrap (f a b)))))
(test "CoMonad does not affect values."
(and (Text/= "yololol" (&/unwrap "yololol"))
(Text/= "yololol" (be &.CoMonad<Identity>
[f Text/compose
a "yolo"
b "lol"]
(f a b)))))
)))
|