/ Optional / monad
monad
 1      let Monad = ./../Monad/Type
 2  
 3  in  let map = (./functor).map
 4  
 5  in  let concat =
 6              λ(a : Type)
 7            → λ(x : Optional (Optional a))
 8            → Optional/fold
 9              (Optional a)
10              x
11              (Optional a)
12              (λ(y : Optional a) → y)
13              (None a)
14  
15  in      ./applicative
16        ∧ { bind =
17                λ(a : Type)
18              → λ(b : Type)
19              → λ(fa : Optional a)
20              → λ(k : a → Optional b)
21              → concat b (map a (Optional b) k fa)
22          }
23      : Monad Optional