12 lines
292 B
Text
12 lines
292 B
Text
class mono_monad (m : Type) (α : out_param Type) :=
|
||
(pure : α → m)
|
||
(bind : m → (α → m) → m)
|
||
|
||
export mono_monad (bind pure)
|
||
|
||
instance : mono_monad bool bool :=
|
||
{ pure := id, bind := λ b f, if b then f b else b }
|
||
|
||
#eval do b ← tt,
|
||
b' ← ff,
|
||
mono_monad.pure _ b
|