将 'A => F[G[B]]' 转换为 'F[G[A=>B]' scala

transform 'A => F[G[B]]' into 'F[G[A=>B]' scala

给定一个带有签名的函数: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]] = ???

更新:非常感谢使用 cats 或 scalaz 的回答。

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

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