Functor组合的例子

问题描述 投票:1回答:3

这是对我前一个问题的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构造仿函数是正确的方法吗? 你能给出一个仿函数组合的真实例子吗?

scala functional-programming composition functor scalaz
3个回答
1
投票

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

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


1
投票

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.