函子组合的例子

Examples of Functors composition

这是对我上一个问题 的跟进。

我们知道仿函数可以组合。我可以使用 scalaz 编写仿函数 List[_]Option[_] 的组合,如下所示:

import scalaz._, Scalaz._

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

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

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

scala> val f = flist compose foption
f: scalaz.Functor[[α]List[Option[α]]] = scalaz.Functor$$anon@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 组合函子的方法正确吗?
你能举一个现实生活仿函数组合的例子吗?

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

这个例子够真实吗?:-)