aboutsummaryrefslogtreecommitdiff
path: root/stdlib/test/test/lux/data/identity.lux
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)))))
        )))