Scala 函子合成的例子

Scala 函子合成的例子,scala,functional-programming,composition,functor,scalaz,Scala,Functional Programming,Composition,Functor,Scalaz,这是对我上一个问题的补充 我们知道函子是合成的。我可以使用scalaz编写一个由List[\u]和Option[\u]组成的函数,如下所示: import scalaz._, Scalaz._ scala> val flist = Functor[List] flist: scalaz.Functor[List] = scalaz.std.ListInstances$$anon$1@a5f0295 scala> val foption = Functor[Option] fopt

这是对我上一个问题的补充

我们知道函子是合成的。我可以使用
scalaz
编写一个由
List[\u]
Option[\u]
组成的函数,如下所示:

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)映射到字符串列表


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

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


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

样例函子合成-合成选项和列表:


有关函子合成的更多详细信息,请参见此处:

样本函子合成-带列表的合成选项:


有关函子合成的更多详细信息,请参见此处:

示例应用程序函子合成-带列表的合成选项和带选项的列表:


有关函子、应用程序和单子组合的更多详细信息,请参见此处:

示例应用程序函子组合-带列表的组合选项和带选项的列表:


有关函子、应用程序和单子组合的更多详细信息,请参见此处:

您是否重复您现有的问题?部分地。我现在知道如何合成函子了。谢谢你的回答,顺便说一句:)现在我对函子合成的真实例子很感兴趣。在列表中映射一个选项不够好吗?不:)我需要更多…函子是一个抽象,层次太高,无法给出任何有趣的例子(不同于简单的嵌套列表/选项等)。这就像问“给我一个java.lang.Object的真实例子”:)你不重复你现有的问题吗?部分地。我现在知道如何合成函子了。谢谢你的回答,顺便说一句:)现在我对函子合成的真实例子很感兴趣。在列表中映射一个选项不够好吗?不:)我需要更多…函子是一个抽象,层次太高,无法给出任何有趣的例子(不同于简单的嵌套列表/选项等)。这就像问“给我一个java.lang.Object的真实示例”: