函子组合的例子
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)映射到字符串列表。
这个例子够真实吗?:-)
这是对我上一个问题
我们知道仿函数可以组合。我可以使用 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)映射到字符串列表。
这个例子够真实吗?:-)