2016-09-15 122 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'可以以通用方式提取和使用。 –

相關問題