剧情简介
班 Functor(仿真器) (f) 哪里 班 适用 m=> 莫纳德 米 哪里 班 莫纳德 m=> 单数失败 米 哪里 班 ( 备选方案 米, 莫纳德 m) => MonadPlus系列 米 哪里 mzero(零点) ::毫安 mplus(mplus) ::ma->ma->ma
地图M :: ( 可穿越的 t、, 莫纳德 m) =>(a->m b)->t a->m(t b) 地图M_ :: ( 可折叠的 t、, 莫纳德 m) =>(a->m b)->t a->m() 对于M :: ( 可穿越的 t、, 莫纳德 m) =>t a->(a->m b)->m(t b) 对于M_ :: ( 可折叠的 t、, 莫纳德 m) =>t a->(a->m b)->m() 序列 时间:( 可穿越的 t、, 莫纳德 m) =>t(ma)->m(ta) 顺序_ :: ( 可折叠的 t、, 莫纳德 m) =>吨(毫安)->米() (=<<) :: 莫纳德 m=>(a->mb)->ma->mb (>=>) :: 莫纳德 m=>(a->mb)->(b->mc)->a->mc (<=<) :: 莫纳德 m=>(b->mc)->(a->mb)->a->mc 永远 :: 适用 f=>f a->f b 无效 :: Functor(仿真器) f=>f a->f() 参加 :: 莫纳德 m=>m(毫安)->毫安 毫秒 :: ( 可折叠的 t、, MonadPlus系列 m) =>t(毫安)->毫安 m过滤器 :: MonadPlus系列 m=>(a-> 布尔 )->毫安->毫安 过滤器M :: 适用 m=>(a->m 布尔 )->[a]->m[a] 映射并解压缩M :: 适用 m=>(a->m(b,c))->[a]->m([b],[c]) 带M的拉链 :: 适用 m=>(a->b->mc)->[a]->[b]->m[c] 带M的拉链_ :: 适用 m=>(a->b->mc)->[a]->[b]->m() foldM(折叠M) :: ( 可折叠的 t、, 莫纳德 m) =>(b->a->mb)->b->ta->mb foldM(折叠M)_ :: ( 可折叠的 t、, 莫纳德 m) =>(b->a->mb)->b->ta->m() 复制品M :: 适用的 m=> 国际 ->毫安->毫安 复制品M_ :: 适用 m=> 国际 ->毫安->米() 警卫 :: 备选方案 f=> 布尔 ->f() 什么时候 :: 适用 f=> 布尔 ->f()->f() 除非 :: 适用 f=> 布尔 ->f()->f() 提升M :: 莫纳德 m=>(a1->r)->m a1->m r 提升M2 :: 莫纳德 m=>(a1->a2->r)->m a1->m a2->m r 提升M3 :: 莫纳德 m=>(a1->a2->a3->r)->m a1->m a2->m a3->m r 提升M4 :: 莫纳德 m=>(a1->a2->a3->a4->r)->m a1->m a2->m a3->m a4->m r 提升M5 :: 莫纳德 m=>(a1->a2->a3->a4->a5->r)->m a1->m a2->m a3->m a4->m a5->m r 应用程序 :: 莫纳德 m=>m(a->b)->m a->m b (<$!>) :: 莫纳德 m=>(a->b)->m a->m b
Functor和monad类
实例
实例
失败s>>=f=失败s
失败_=mzero
mplus=英里/小时(
<|> )
实例
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
功能
命名约定
一个后缀' M(M) “总是代表Kleisli类别中的函数: monad类型构造函数 米 添加到函数结果中 (模数咖喱),别无他法。 例如,
过滤器::(a->Bool)->[a]->[a] 过滤器m::(单子m)=>(a->m Bool)->[a]->m[a]
后缀 _ '将结果类型从更改为 (百万) 到 (米()) . 因此,例如:
顺序::莫纳德m=>[ma]->m[a] 序列_::单子m=>[ma]->m()
前缀' 米 '将现有函数推广为一元形式。 因此,例如:
过滤器::(a->Bool)->[a]->[a] mfilter::MonadPlus m=>(a->Bool)->ma->ma
基本 莫纳德
功能
列表函数概述
foldM f a1[x1,x2,…,xm] == 做 a2<-f a1 x1 a3<-f a2x2 ... f上午xm
一元表达式的条件执行
保护True=
纯净的 () 守卫假=
空的
示例
>>>安全分区4 0 没有什么 >>>安全分区4 2 只有2个
safeDiv::Int->Int->可能Int safeDiv x y | y/=0=仅(x`div`y) |否则=无
safeDiv::Int->Int->可能Int safeDiv x y=执行 防护装置(y/=0) return(x`div`y)
单体起重操作员
提升M2(+)[0,1][0,2]=[0,2,1,3] liftM2(+)(仅1)无=无