2016-09-15 127 views
2

给定一个功能与签名:A => F[G[B]]。有FG类型的monads实例。变换 'A => F [G [B]]' 到 'F [G [A => B]' 阶

是否有可能将其改造成能签名: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]] = ??? 

更新:我会感谢使用猫或斯卡拉答案。

+0

这被称为* higher-kinded types *。你可以使用'Scalaz'或'Cat'来处理它们。 – sebszyller

+0

谢谢。这确实是我需要的。这个怎么做? –

+3

假设你有一个'String => List [Option [Integer]]'。你需要产生一个'List [Option [String => Integer]]'。你能做到吗?结果列表将会多久?有多少'None's会包含? –

回答

5

假设我们有一个String=>List[Option[Integer]]。我们需要生产一个List[Option[String=>Integer]]。我们应该如何处理?例如,结果列表应该多长时间?它应该包含多少个None

显然,这些问题都没有答案,这意味着所请求转换为任意的单子可以不存在(或实际上大部分单子,作为一个可以问的最多的单子类似的问题)。

+0

...这就是为什么建议研究斯卡拉兹和猫。这些和类似的框架概括了monad的概念,以便在'List'情况下''Option'和'Nil'中的单元函数'None'可以以通用方式提取和使用。 –

相关问题