展开

关键词

monad

相关内容

  • Scalaz(25)- Monad: Monad Transformer-叠加Monad效果

    中间插播了几篇scalaz数据类型,现在又要回到Monad专题。因为FP的特征就是Monad式编程(Monadic programming),所以必须充分理解认识Monad、熟练掌握Monad运用。曾经看到一段对Monad的描述:“Monadic for-comprehension就是一种嵌入式编程语言,由它的Monad提供它的语法”。组合应该是这样的:M],M,N都是Monad,如:Either],甚至是M]],三层Monad。可惜,不是所有Monad都支持函数组合的,看下面: def composeMonad,N](ma: Monad, mb: Monad): Monad = M]})#mn] = new Monad = M与重新构建另一个类型不同的是,通过Monad Transformer叠加Monad组合形成类型的操作依然使用各组成Monad的操作函数,这些函数运算结果类型任然是对应的Monad类型,所以需要一些升格函数
    来自:
    浏览:273
  • Monad 定律

    monad 是支持>>=操作的 applicative 函子,>>=读作绑定,它的类型是:(>>=) :: (Monad m) => m a -> (a -> m b) -> m b即取一个 monad和一个函数,返回一个新的 monad。monad 有专属的类型类——Monad,其定义如下:class Applicative m => Monad (m :: * -> *) where (>>=) :: m a -> (a -> m b>>=前面说过了,>>有一个默认实现,就是把一个 monad 直接换成另一个 monad 返回,fail不会被主动调用,在一些特定语法结构中,会被 Haskell 用于模式匹配。一个类型要成为 monad 不仅要满足 Monad 类型类的条件,还要满足 monad 定律(虽然编译器并不会帮你检查):左单位元:return x >>= f 和 f x 等价右单位元:m >>= return
    来自:
    浏览:184
  • Monad

    Monad不就是个自函子范畴上的幺半群,这有什么难理解的(A monad is just a monoid in the category of endofunctors) —— Phillip Wadler接着我们看看在自函子的范畴上,怎么结合幺半群的定义得出Monad的。在Haskell这类的强类型语言中,我们甚至可以组装自己的Tuple Monad。中缀表达式一般是 >>=Tuple >>= (Number -> Tuple) >>= (Number -> Tuple)Monads for functional programming一书中介绍说monadintroduction to monads Ive ever read我所理解的monadMonads for functional programmingFunctor, Applicative, Monad
    来自:
    浏览:132
  • 广告
    关闭

    腾讯极客挑战赛-寻找地表最强极客

    报名比赛即有奖,万元礼品和奖金,等你来赢!

  • 来看看几种 Monad来看看几种 Monad

    动手做做看: Maybe Monad现在对于什么是 Monad 已经有了些模糊的概念, 我们来看看要如何让这概念更具体一些。,monad 也有他自己的 type class:Monad 他看起来像这样:class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m他说 class Monad m where。但我们之前不是提到 monad 是 applicative functors 的加强版吗?但的确每个 monad 都是 applicative functor,即使 Monad 并没有这么声明。在 Monad typeclass 中定义的第一个函数是 return。我们知道了 Monad typeclass 长什么样子,我们来看一下 Maybe 的 Monad instance。
    来自:
    浏览:193
  • Scalaz(17)- Monad:泛函状态类型-State Monad

    那么真正意义的状态类型State Monad又是怎样的呢?State Monad应该需要一套读写、传递状态的方法。类但并没有实现Monad的抽象函数point和bind。这个细节就留在后面我们讨论Free Monad时再研究吧。实例14 val monad = Monad = StateT})#l]15 > monad : scalaz.Monadscalaz.IndexedStateTList,Int,Int,a]] = scal16
    来自:
    浏览:372
  • 图解 Monad

    函数式编程有一个重要概念,叫做Monad。?网上有很多解释(这里和这里),但都很抽象,不容易看懂。我尝试了好多次,还是不明白Monad到底是什么。?下面,我就用这些图来解释Monad。1.?软件最基本的数据,就是各种值(value)。2.?处理值的一系列操作,可以封装成函数。输入一个值,会得到另一个值。所有这些运算连起来,就叫做Monad。简单说,Monad就是一种设计模式,表示将一个运算过程,通过函数拆解成互相连接的多个步骤。你只要提供下一步运算所需的函数,整个运算就会自动进行下去。(完)
    来自:
    浏览:409
  • 有没有标准monad实例?

    我已经尝试导入Control.Monad,Control.Monad.Instances和Data.Ext,如图所示 module Main where import Control.MonadimportData.Eitherimport Control.Monad.Instances test :: -> Either a test = sequence main = return () 但是ghc告诉我它不能推断出(Monad(或者a))。添加 instance Monad (Either a) where return = Right Right b >>= f = f b Left a >>= _ = Left a 使代码编译,但是这个实例声明看起来很普遍
    来自:
    回答:2
  • Monad_Haskell笔记10

    一.从Functor到Monad从类型来看,Functor到Applicative再到Monad是从一般到特殊的递进过程(Monad是特殊的Applicative,Applicative是特殊的FunctorJust 1登场:> Just (+1) (Just 1)Just 2Monad在Applicative之上的增强,能够把一个输入普通值输出具有context值的函数,应用到一个具有context的值(>>=) :: (Monad m) => m a -> (a -> m b) -> m b如果你有一个具有context的值m a,你能如何把他丢进一个只接受普通值a的函数中,并回传一个具有context已经足够应付所有情况了二.Monad typeclassclass Applicative m => Monad m where (>>=) :: forall a b. m a -> (a -> m换言之,Monad就是支持>>=操作的Applicative functor而已return是pure的别名,所以仍然是接受一个普通值并把它放进一个最小的context中(把普通值包进一个Monad里面
    来自:
    浏览:177
  • 为什么我们需要monad?

    这个是经典问题“什么是monad?” ,尤其是投票最多的人,试着解释什么是monad而没有明确解释为什么monad真的是必要的。他们可以解释为问题的解决方案吗?
    来自:
    回答:2
  • Scalaz(11)- Monad:你存在的意义

    如Option Monad可以None状态中途终止运算、State Monad确保状态值一直随着程序运算。它们都因为基于不同类型的实例而表现不同的运算行为。我们已经实现了Monad的流程式运算。我们现在可以测试一下上面定义的运算: 1 val chainABC = Monad.point(3) flatMap {a => Monad.point(4) flatMap {b => Monad.point(3) >>= {a => Monad.point(4) >>= {b => Monad.point(5) map {c => (a+b+c) }}} 4 > bagABC : Exercises.monad.Bag= Bagged(12) 5 val bagHello = Monad.point(Hello) >>= {a => Monad.point( John,) >>= {b => Monad.point
    来自:
    浏览:262
  • Java示例演示Functor 和monad

    There is a lot of folklore around them: A monad is a monoid in the category of endofunctors, whats theJames Iry The curse of the monad is that once you get the epiphany, once you understand - oh thats whatMonads generalize various seemingly independent concepts so that learning yet another incarnation of monadAnd then you hear about RxJava which sounds so much different but because Observable is a monad, thereFunctorsBefore we explain what a monad is, lets explore simpler construct called a functor .
    来自:
    浏览:187
  • Kotlin版图解Functor、Applicative与Monad

    如何学习 Monad 呢:取得计算机科学博士学位。老搭档 Maybe 是一个 monad:?Monad 是 Haskell 中的另一个类型类。在 Kotlin 中,可以认为 Monad 是一种定义了这样中缀函数的类型:infix fun Monad.`))=`(f: ((T) -> Monad)): Monad所以 Maybe 是一个 Monad于是现在我们知道 Maybe 既是 Functor 、又是 Applicative 还是 Monad。现在我们来看看另一个例子:IO monad:?
    来自:
    浏览:178
  • 泛函编程(30)-泛函IO:Free Monad-Monad生产线

    Free Monad就是Trampline的延伸。在介绍Free Monad之前我们先从一个现实的例子来展开讨论:假设我们要编写一个银行转账的函数,我们可能先把这个函数的款式(function signature)推导出来:1 def transferlift,A](fa: F): Free = Bind(fa, (a: A) => Return(a))2 > lift: , A](fa: F)ch13.ex6.Free有了lift我们可以吧prg升格成MonadReturn(a)) 8 > lift: , A](fa: F)ch13.ex6.Free 9 for {10 x (List, A) 2 implicit val testerMonad = new Monad> { 6 val (l1,a) = ta(m) 7 val (l2,b) = f(a)(m) 8 (l1 ++ l2,b) 9 }10 }11 } > testerMonad : ch13.ex6.Monad
    来自:
    浏览:279
  • Scalaz(19)- Monad: - Monad 版本的 Either

    更重要的是是一种Monad,具备了函数组合能力(composibility)。如此能够方便把Either功能整合到FP编程中去。
    来自:
    浏览:325
  • Monad变压器用于进度跟踪?

    我正在寻找可用于跟踪过程进度的monad变换器。putStr li step liftIO $ putStrLn ne2 step liftIO $ putStrLn line3 -- Wraps an action in a tasktask :: MonadAction performing the task -> ProgressT m a -- Marks one step of the current task as completedstep :: Monad
    来自:
    回答:2
  • Scalaz(32)- Free :lift - Monad生产线

        在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等。我们再看看free monad结构Free的定义:scalazFree.scala** A free operational monad for some functor `S`.,因为Free是个Monad而且它的结构是最简单的了:1、Free,A]可以代表一个运算2、case class Return是一个数据结构。如果用Monad.join(a: F])表示,那么里面的F应该是个Free,这样我们才可能把运算结束结构Return(a:A)存放到Suspend中来代表下一步结束运算。简单来说Free是一个把Functor S升格成Monad的产生器。我们可以用Free.liftF函数来把任何一个Functor升格成Monad。
    来自:
    浏览:272
  • 泛函编程(27)-泛函编程模式-Monad Transformer

    4、Monad应该是泛函编程中最重要的数据类型。Monad extends Applicative,这样,Monad就包含了Functor, Applicative的属性。那么我们如果能实现Monad]的flatMap不就能得到这个Monad实例了嘛:1 def composeM,N(m: Monad, n: Monad): Monad = M]})#l]= {2 newMonad Transformer可以实现多个Monad效果的累加(stacking effect)。注意StateT把State Monad和任何其它一个Monad合起来用:上面的例子用了Maybe。更重要的是StateT是个Monad那么我们可以把它当作任何其它Monad一样与其它Monad结合形成新的Monad Transformer。
    来自:
    浏览:268
  • 让Monad来得更猛烈些吧_Haskell笔记11

    写在前面最早接触过IO Monad,后来又了解了Maybe Monad和List Monad,实际上还有很多Monad(比如Writer Monad、Reader Monad、State Monad等)实际上就是Function Monad,函数也是Monad,这怎么理解?五.Monad的魅力Monad能够赋予计算一些额外的能力,比如:Writer Monad:能够把函数转换成带日志的版本,用来追踪执行过程,或者给数据变换添加额外的信息Reader Monad:能够让一系列函数在一个可控的共享环境中协同工作Monad的意义在于,从这些常见场景中抽象出通用模式,以简化操作,比如状态维护、日志收集等都能够通过Monad自动完成单从使用的角度来看,用Monad包一下(没错,就这么简单),就能获得额外的能力,这就是Monad的魅力参考资料Control.Monad.ReaderControl.Monad.ErrorControl.Monad.Except
    来自:
    浏览:278
  • Scala函子与Monad差

    请有人解释一下Scala上下文中函子和Monad之间的区别?
    来自:
    回答:2
  • 为ST Monad编写高效的迭代循环?

    import Data.Vector.Unboxed.Mutable as MUimport Data.Vector.Unboxed as U hiding (mapM_)import Control.Monad.STas STimport Control.Monad.Primitive (PrimState)import Control.Monad as CM (when,forM_)import Data.Int
    来自:
    回答:1

扫码关注云+社区

领取腾讯云代金券