Functor组合的例子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Functor组合的例子相关的知识,希望对你有一定的参考价值。
这是对我前一个问题的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
构造仿函数是正确的方法吗?
你能给出一个仿函数组合的真实例子吗?
答案
假设您有一个字符串列表,其中每个字符串都是一个字符列表。通过编写两个列表仿函数,您可以在字符串列表上获得一个仿函数。现在,您可以将字符上的函数(例如,toUpper或toLower)映射到字符串列表。
这个例子是否足够逼真?:-)
另一答案
Sample Applicative Functor组成示例 - 使用List和List with Option组成选项:
有关Functor,Applicative和Monad组成的更多详细信息,请参见此处:https://www.slideshare.net/pjschwarz/monads-do-not-compose
另一答案
有关仿函数组合的更多详细信息,请参见此处:https://www.slideshare.net/pjschwarz/functor-composition
以上是关于Functor组合的例子的主要内容,如果未能解决你的问题,请参考以下文章