aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/env.lux
blob: 880bfa621fe364f4beb3bd747218e99d95ae5582 (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})

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

(struct: #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))