Documentation
Mathlib
.
Control
.
Combinators
Search
return to top
source
Imports
Init
Mathlib.Init
Imported by
joinM
when
condM
whenM
Monad
.
mapM
Monad
.
mapM'
Monad
.
join
Monad
.
filter
Monad
.
foldl
Monad
.
cond
Monad
.
sequence
Monad
.
sequence'
Monad
.
whenb
Monad
.
unlessb
Monad combinators, as in Haskell's Control.Monad.
#
source
def
joinM
{m :
Type
u →
Type
u
}
[
Monad
m
]
{α :
Type
u}
(a :
m
(
m
α
)
)
:
m
α
Equations
joinM
a
=
a
>>=
id
Instances For
source
def
when
{m :
Type
→
Type
}
[
Monad
m
]
(c :
Prop
)
[
Decidable
c
]
(t :
m
Unit
)
:
m
Unit
Equations
when
c
t
=
if
c
then
t
else
pure
(
)
Instances For
source
def
condM
{m :
Type
→
Type
}
[
Monad
m
]
{α :
Type
}
(mbool :
m
Bool
)
(tm fm :
m
α
)
:
m
α
Equations
condM
mbool
tm
fm
=
do let
b
←
mbool
bif
b
then
tm
else
fm
Instances For
source
def
whenM
{m :
Type
→
Type
}
[
Monad
m
]
(c :
m
Bool
)
(t :
m
Unit
)
:
m
Unit
Equations
whenM
c
t
=
condM
c
t
(
pure
(
)
)
Instances For
source
def
Monad
.
mapM
{m :
Type
u_1 →
Type
u_2
}
[
Monad
m
]
{α :
Type
u_3}
{β :
Type
u_1}
(f :
α
→
m
β
)
(as :
List
α
)
:
m
(
List
β
)
Equations
@
Monad.mapM
=
@
mapM
Instances For
source
def
Monad
.
mapM'
{m :
Type
u_1 →
Type
u_2
}
{α :
Type
u_3}
{β :
Type
u_1}
[
Monad
m
]
(f :
α
→
m
β
)
:
List
α
→
m
(
List
β
)
Equations
@
Monad.mapM'
=
@
mapM'
Instances For
source
def
Monad
.
join
{m :
Type
u_1 →
Type
u_1
}
[
Monad
m
]
{α :
Type
u_1}
(a :
m
(
m
α
)
)
:
m
α
Equations
@
Monad.join
=
@
joinM
Instances For
source
def
Monad
.
filter
{m :
Type
→
Type
u_1
}
[
Monad
m
]
{α :
Type
}
(p :
α
→
m
Bool
)
(as :
List
α
)
:
m
(
List
α
)
Equations
@
Monad.filter
=
@
filterM
Instances For
source
def
Monad
.
foldl
{m :
Type
u_1 →
Type
u_2
}
[
Monad
m
]
{s :
Type
u_1}
{α :
Type
u_3}
(f :
s
→
α
→
m
s
)
(init :
s
)
:
List
α
→
m
s
Equations
@
Monad.foldl
=
@
List.foldlM
Instances For
source
def
Monad
.
cond
{m :
Type
→
Type
}
[
Monad
m
]
{α :
Type
}
(mbool :
m
Bool
)
(tm fm :
m
α
)
:
m
α
Equations
@
Monad.cond
=
@
condM
Instances For
source
def
Monad
.
sequence
{m :
Type
u →
Type
v
}
[
Monad
m
]
{α :
Type
u}
:
List
(
m
α
)
→
m
(
List
α
)
Equations
Monad.sequence
[
]
=
pure
[
]
Monad.sequence
(
h
::
t
)
=
do let
h'
←
h
let
t'
←
Monad.sequence
t
pure
(
h'
::
t'
)
Instances For
source
def
Monad
.
sequence'
{m :
Type
→
Type
u
}
[
Monad
m
]
{α :
Type
}
:
List
(
m
α
)
→
m
Unit
Equations
Monad.sequence'
[
]
=
pure
(
)
Monad.sequence'
(
h
::
t
)
=
h
*>
Monad.sequence'
t
Instances For
source
def
Monad
.
whenb
{m :
Type
→
Type
}
[
Monad
m
]
(b :
Bool
)
(t :
m
Unit
)
:
m
Unit
Equations
Monad.whenb
b
t
=
bif
b
then
t
else
pure
(
)
Instances For
source
def
Monad
.
unlessb
{m :
Type
→
Type
}
[
Monad
m
]
(b :
Bool
)
(t :
m
Unit
)
:
m
Unit
Equations
Monad.unlessb
b
t
=
bif
b
then
pure
(
)
else
t
Instances For