aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/env.lux
blob: 68d0affc04ccecc231c1086afe2437ac0ff10540 (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
(.module:
  lux
  (lux (control ["F" functor]
                comonad)))

(type: #export (Env e a)
  {#env e
   #value a})

(structure: #export Functor<Env> (All [e] (F.Functor (Env e)))
  (def: (map f fa)
    (update@ #value f fa)))

(structure: #export CoMonad<Env> (All [e] (CoMonad (Env e)))
  (def: functor Functor<Env>)

  (def: unwrap (get@ #value))

  (def: (split wa)
    (set@ #value wa wa)))

(def: #export (local change env)
  (All [e a] (-> (-> e e) (Env e a) (Env e a)))
  (update@ #env change env))