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组成选项:

example of composing applicatives - part 1

example of composing applicatives - part 2

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

另一答案

示例Functor组合 - 使用List组成选项:functor composition example

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

以上是关于Functor组合的例子的主要内容,如果未能解决你的问题,请参考以下文章

函数式编程进阶:Monad 与 异步函数的组合

c++仿函数 functor

函数式编程[4]functor和monad

Functor& Monad解读

OneFlow学习笔记:从Functor到OpExprInterpreter

Relay.js 没有正确解析组合片段