Functor组合的例子

时间:2016-06-22 06:16:54

标签: scala functional-programming composition functor scalaz

这是对我之前提问的answer的后续跟进。

我们知道仿函数组成。我可以使用List[_]这样编写仿函数Option[_]scalaz的组合:

import scalaz._, Scalaz._

scala> val flist = Functor[List]
flist: scalaz.Functor[List] = scalaz.std.ListInstances$$anon$1@a5f0295

scala> val foption = Functor[Option]
foption: scalaz.Functor[Option] = scalaz.std.OptionInstances$$anon$1@51e43ad4

scala> flist compose foption
res0: scalaz.Functor[[α]List[Option[α]]] = scalaz.Functor$$anon$1@94c02b

scala> val f = flist compose foption
f: scalaz.Functor[[α]List[Option[α]]] = scalaz.Functor$$anon$1@610bffa0

scala> val os: List[Option[Int]] = Some(1) :: Some(2) :: None :: Nil
os: List[Option[Int]] = List(Some(1), Some(2), None)

scala> f.map(os) {_ + 1}
res1: List[Option[Int]] = List(Some(2), Some(3), None)

使用scalaz撰写仿函数是否正确? 你能给出一个仿真器组合的现实例子吗?

3 个答案:

答案 0 :(得分:1)

假设您有一个字符串列表,其中每个字符串都是一个字符列表。通过编写两个列表仿函数,您可以在字符串列表上获得一个仿函数。现在,您可以将字符上的函数(例如,toUpper或toLower)映射到字符串列表。

这个例子是否足够逼真?: - )

答案 1 :(得分:1)

样本函子组成-带有列表的组合期权: functor composition example

有关函子组成的更多详细信息,请参见此处:https://www.slideshare.net/pjschwarz/functor-composition

答案 2 :(得分:1)

示例应用函子组成-组合带有列表的选项和包含选项的列表:

example of composing applicatives - part 1

example of composing applicatives - part 2

有关Functor,Applicative和Monad组成的更多详细信息,请参见此处:https://www.slideshare.net/pjschwarz/monads-do-not-compose