1.
可能有些人对我之前的讲解的内容,无法接受!当然我是没讲解的那么清晰清楚,因为到目前为止的知识都是比较易懂的,但是还是我们来小结一下之前的知识吧,这样比较好容易下面的步骤
2.
我们的所有操作几乎是围绕monad展开的,说到底就是操作monad,如提出单子内容计算然后继续包裹monad
所以我这里主要讲解monad的对等操作,和非对等操作
对等操作,就是monad的类型是一样的,我们可以直接运算,例如使用符号<*>
scala> List(1,2,3) <*> List((_:Int) + 1,(_:Int) * 4)
res159: List[Int] = List(2, 3, 4, 4, 8, 12)
scala> (1,2,3) <*> List((_:Int) + 1,(_:Int) * 4)
<console>:14: error: type mismatch;
found : List[Int => Int]
required: (Int, Int, Int => ?)
(1,2,3) <*> List((_:Int) + 1,(_:Int) * 4)
我举出了两个例子,大家对比就知道了!
接着我们需要处理第二种情况-非对等的时候-我们使用如|@|及^(){}等
scala> ^(1.point[List],2.point[List]){(_:Int) + (_:Int) * 4 }
res164: List[Int] = List(9)
scala> (1.point[List] |@| 2.point[List]){(_:Int) + (_:Int) * 4 }
res165: List[Int] = List(9)
这些是monad最基本的操作了