4
我正在使用cats
lib。使用函數作爲應用函數/笛卡爾
這是很容易利用其適用函子實例(或Cartesian
,要準確)兩個清單合併:
import cats._
import cats.implicits._
(List(23, 4), List(55, 56)).mapN(_ + _)
>> List(78, 79, 59, 60)
不過,我似乎無法能夠做同樣的兩個功能:
val strLength: String => Int = _.length
(strLength, strLength).mapN(_ + _)
>> value mapN is not a member of (String => Int, String => Int)
,如果我做的一些隱式轉換的明確,它工作,如果我創建了一個類型別名爲編譯器手:
type F[A] = Function1[String, A]
val doubleStrLength = catsSyntaxTuple2Cartesian[F, Int, Int]((strLength, strLength)).mapN(_ + _)
doubleStrLength("hello")
>> 10
有沒有更簡單的方法來做到這一點?似乎過於冗長
編輯:我在這裏創建的工作表,如果你想用它玩:https://scastie.scala-lang.org/dcastro/QhnD8gwEQEyfnr14g34d9g/2
啊,就是這樣!我記得前一陣子聽說過Miles正在做這件事。我想我現在太習慣於haskell了。謝謝! – dcastro