【问题标题】:transform 'A => F[G[B]]' into 'F[G[A=>B]' scala将 'A => F[G[B]]' 转换为 'F[G[A=>B]'
【发布时间】:2016-09-15 08:47:29
【问题描述】:

给定一个带有签名的函数:A => F[G[B]]FG 类型有 monads 实例。

是否可以将其转换为带有签名的东西:F[G[A=>B]?这种转换有什么通用名称吗?

换句话说,prettify2 的实现是什么?

def pretiffy(x: String): Future[Option[String]] = Future{if(x == "") None else Some(s">>>$x<<<")}
val pretiffy2: Future[Option[String => String]] = ???

更新:我很感激使用猫或 scalaz 的答案。

【问题讨论】:

  • 这被称为higher-kinded types。您可以使用ScalazCats 与他们合作。
  • 谢谢。这确实是我需要的。如何做到这一点?
  • 假设你有一个String=&gt;List[Option[Integer]]。您需要生成一个List[Option[String=&gt;Integer]]。你能做到吗?结果列表会有多长?它会包含多少个Nones?
  • 谢谢,这应该是答案:)

标签: scala functional-programming scalaz scala-cats


【解决方案1】:

假设我们有一个String=&gt;List[Option[Integer]]。我们需要生成一个List[Option[String=&gt;Integer]]。我们应该如何处理这个问题?例如,结果列表应该有多长?它应该包含多少个Nones?

显然,这些问题没有答案,这意味着对于任意 monad(或者实际上是大多数 monad,因为人们可以就大多数 monad 提出类似问题),所请求的转换不存在。

【讨论】:

  • ...这就是为什么建议研究 Scalaz 和 Cats。这些和类似的框架概括了 monad 的概念,因此可以以通用方式提取和使用 unit 函数,Option 中的 OptionNilList。跨度>
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多