scala try monad】的更多相关文章

当输入的数据格式不正确时,ActivityData 中会出现 OutofIndex 错误,但更多的时候我们只关心想要的结果而不想了解出现了怎样的错误,然后会写出这样的代码   def parseCSV(csv : String) = {   try {     Some {       csv.split("\n").map { line =>         val tokens = line.split(";")         ActivityData(…
一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已.这句话涉及到了几个概念:单子(Monad),自函子(Endo-Functor),幺半群(Monoid),范畴(category). 范畴 范畴的定义 范畴由三部分组成: 一组对象,是需要操作的数据的组合. 一组态射(morphisms).一组态射,是数据对象上的映射关系,比如f:A -> B,每个态射会绑定两个对象,假如f是从源对象A到目标对象B的态射,记作:f:A -> B. 态射组合.就是态射能够几个组合在一起形成一个新的态…
Scala和范畴论 -- 对Monad的一点认识 背景 所有一切的开始都是因为这句话:一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已,有什么难以理解的.第一次看到这句话是在这篇文章:程序语言简史(伪).这句话出自Haskell大神Philip Wadler,也是他提议把Monad引入Haskell.Monad是编程领域比较难理解的概念之一,大部分人都是闻"虎"而色变,更不用说把它"收入囊中"了.我曾经好几次尝试去学习Monad,Functor等这些…
说道FP,我们马上会联想到Monad.我们说过Monad的代表函数flatMap可以把两个运算F[A],F[B]连续起来,这样就可以从程序的意义上形成一种串型的流程(workflow).更直白的讲法是:任何类型只要实现了flatMap就可以用for-comprehension, for{...}yield.在这个for{...}里我们可以好像OOP一样编写程序.这个for就是一种运算模式,它规范了在for{...}里指令的行为.我们正从OOP风格走入FP编程模式,希望有个最基本的FP编程模式使我…
这是观看Cousera上的课程<Principles of Reactive Programming>中week1里的Monad一节所做的笔记. What is a Monad? What is a Monad? A monad is a parametric type M[T] with two operations, flatMap and unit, that have to satisfy some laws. 这里是说Monad是一类特殊的类型,它有两个方法, flatMap和uni…
整体上代表封装的概念,重点是函数的封装,及函数运行的上下文环境.trait Functor[F[_]] Functor:代表整体封装: F[_]:代表封装后的目标域. A.B:代表普通的对象:f:代表对象间转换的函数. Functor[F[_]] :映射的结果和源在同一个范畴内:   Functor的代码表示 trait Functor[F[_]] {  def map[A, B](a: F[A])(f: A => B): F[B] } //list Functor的实现 def listFun…
介绍monads有点像互联网时代的家庭手工业.我想 “为什么要反对传统?”,但这篇文章将以Scala对待monads的方式来描述. 有个古老的寓言,讲述了几个瞎子第一次摸到大象.一个抱着大象的腿说:“它是一棵树”:另一个摸着大象的鼻子则说:“它是一条大蛇”:第三个则说:“它是一把扇子”... 从这个寓言我们可以得到个结论:古人相信视觉障碍者喜欢调戏大型哺乳动物(此句英文原意可能带有其它含义).幸运的是我们生活在一个更开明的时代.我们也应该了解自己的局限,防止它阻碍我们把握事物的全貌,在某些方面,…
Functor,即函子,是 Haskell 中普遍存在的.最基本的类型类.你可以用以下两种方式来理解 Functor: 它代表某种容器,该容器能够将某一函数应用到其每一个元素上. 它代表某种“可计算上下文”(computational context). https://www.cnblogs.com/feng9exe/p/9152447.html 整体上代表封装的概念,重点是函数的封装,及函数运行的上下文环境.trait Functor[F[_]] Functor:代表整体封装: F[_]:代…
我们不断地重申FP强调代码无副作用,这样才能实现编程纯代码.像通过键盘显示器进行交流.读写文件.数据库等这些IO操作都会产生副作用.那么我们是不是为了实现纯代码而放弃IO操作呢?没有IO的程序就是一段烧CPU的代码,没有任何意义,所以任何类型的程序都必须具备IO功能,而在FP模式中对IO操作有特别的控制方式:具体实现是通过把代码中产生副作用的部分抽离出来延后运算(在所有纯代码运算之后).scalaz的IO Monad就是处理副作用代码延后运算的一种数据结构.我先举个简单的例子来示范如何通过一种数…
在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等.我们也证明了List[A]是个free monoid.我们再看看free monad结构Free的定义:scalaz/Free.scala /** A free operational monad for some functor `S`. Binding is done using the heap instead of the stack,…