首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Monad_Haskell笔记10

context里的值,输出普通值 + 普通值:用pure包一下再调 所以,就这个场景(把是否处于context里的函数应用到是否处于context里的值)而言,拥有Functor、ApplicativeMonad...monad的context中,而不是整个程序的失败 五.List Monad instance Monad [] where xs >>= f = [y | x <- xs,...(n,ch)) -- 加括号完整版 ([1, 2] >>= (\n -> (['a','b'] >>= (\ch -> return (n,ch))))) 函数体没界限就匹配到最右端,相关讨论见Haskell...n,ch) | n <- [1,2], ch <- ['a','b'] ] 实际上,List Comprehensiondo表示法都只是语法糖,最后都会转换成>>=进行计算 六.Monad laws....用>=>描述的Monad laws,更大的意义在于这3条是形成数学范畴所必须的规律,从此具有范畴的数学意义,具体见Category theory MonadPlus 同时满足MonadMonoid的东西有专用的名字

70450

Monad来得更猛烈些吧_Haskell笔记11

写在前面 最早接触过IO Monad,后来又了解了Maybe MonadList Monad,实际上还有很多Monad(比如Writer Monad、Reader Monad、State Monad...等),位于mtl package,可以通过ghc-pkg命令来查看: $ ghc-pkg list | grep mtl mtl-2.2.1 P.S.Haskell Platform默认包含mtl package...从Monad实现来看,从左侧取出值a附加信息w,将右侧函数应用到a上,并从结果取出值b附加信息w',结果值为b,附加信息为w `mappend` w',最后用return包装结果返回m类型的值,作为...虽然我们也可以用 Haskell 写出这样的程序,但有时候写起来蛮痛苦的。这也是为什么 Haskell 要加进 State Monad 这个特性。...) P.S.注意,Control.Monad.ErrorControl.Monad.Trans.Error都已经过时了,建议使用Control.Monad.Except,具体见Control.Monad.Error

1.5K40
您找到你想要的搜索结果了吗?
是的
没有找到

当我们谈论Monad的时候(二)

Welcome to Haskell 在上一篇文章中,我通过几个Java的例子简单的说明了Monad的本质一些工程中常见的用途。接下来的文章就不再侧重于工程了,而是要慢慢向理论转换。...我们先来改写之前的Monad:OptionalList。...instance Monad List where xs >>= f = lconcat $ lmap f xs 至此,我们就在Haskell中完成了Monad的实现。...包括: returnMonadpure(Applicative)函数实际上是一致的 >>(Monad*>(Applicative)实际上是一致的 liftM、liftAfmap是一致的 liftM...不过,这也只解释了为什么如今Haskell的ApplicativeMonad是这种状态。那么,是什么原因使Haskell冒着把标准库搞乱的风险也要引入Applicative呢?

77310

什么是 Monad (Functional Programming)?函子到底是什么?ApplicativeMonad

有一个特殊幺元,能够任何元素组合,导致的结果是不改变这些元素。 函子到底是什么? 一个函子Functor是任意类型,这些类型定义了如何应用 map (fmap in Haskell) 。...image.png fmap的输入参数是a->b函数,在我们这个案例中是(+3),然后定义一个函子Functor,这里是Haskell的Just 2,最后返回一个新的函子,在我们案例中,使用Haskell...image.png 那么函子、applicativeMonad三个区别是什么? ? image.png functor: 应用一个函数到包裹的值,使用fmap/map....在Haskell中,函子是在其上可以map over的东西。稍微有一点函数式编程经验,一定会想到数组(Array)或者列表(List),确实如此。...在Haskell这类的强类型语言中,我们甚至可以组装自己的Tuple Monad

4.1K30

Javascript中的ReturnReturn falseReturn true

Javascript的返回值 Javascript中的返回值总共分为四类: return; return false; return true; return variable(变量); 这四种返回值其实有很大的不同...2. return 首先介绍return;,直接用代码来说明,先看下面的代码: var i=(function(){return;})(); alert(i); function(){return;}为匿名函数...3. return false return false的介绍还是直接上代码: var i=(function(){return false;})(); alert(i); 运行alert(i)的输出结果为...4. return true return true的介绍也是上代码: var i=(function(){return false;})(); alert(i); 运行alert(i)的输出结果为true...5. return variable return variable主要是在Javascript中定义一个变量,在函数中进行返回,与通常的返回变量没有区别。

2.2K10

return 0return 1return -1的区别「建议收藏」

1、返回值int 类型的函数返回: return语句用来结束循环,或返回一个函数的值。 return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。...2、布尔类型返回: return 0:返回假; return 1:返回真; 一般这样的函数用来实现一个判断是否的逻辑,或检查有无的数据。返回真表示“是”,返回假表示“否”!...return 0 代表程序正常退出,return 1代表程序异常退出! 使用return 语句可以返回一个变量内的值或一个指针,也可用return0,表示返回为空。...return 代表调到函数外, return 0代表函数正常终止 return 1代表函数非正常终止 return 关键字的作用是返回程序流程的控制权!其副作用是返回一个值。...例如int main(){}则必须返回一个值 return 0代表函数正常终止 ruturn 1代表函数非正常终止 被调函数 return 1只是给主调函数一个标志,说明他的执行过程遇到异常情况。

3.3K30

Monadic Function_Haskell笔记12

并且对于遵守Functor lawsMonad laws的类型,这两个函数是完全等价的,例如: > liftM (+1) (Just 1) Just 2 > fmap (+1) (Just 1) Just...- m1; return (f x1) } 等价于: liftM' f m = m >>= \x -> return (f x) 注意,这个实现并不依赖Functor的特性,仅靠Monad具有的行为就可以完成...更进一步的,如果要实现自定义Monad,可以先实现return>>=,然后就很容易实现Applicative(令 = ap,pure = returnFunctor(令fmap = liftM...因为List的>>=实现是List Comprehension: xs >>= f = [y | x <- xs, y <- f x] 所以在List的场景,等价于: joinList...P.S.之所以能进行这样巧妙的变换,是因为Haskell函数默认的柯里化特性,只有填满参数,才返回值。

89730
领券