2
我正在尋找一種方法來捕獲在理解本身的類型中用於理解的類型。爲此,我所指定的粗糙界面:用於理解的捕獲和鏈接類型
trait Chain[A]{
type ChainMethod = A => A //type of the method chained so far
def flatMap[B](f: A => Chain[B]): Chain[B] //the ChainMethod needs to be included in the return type somehow
def map[B](f: A => B): Chain[B]: Chain[B]
def fill: ChainMethod //Function has to be uncurried here
}
作爲例子的幾個具體類型的Chain
:
object StringChain extends Chain[String]
object IntChain extends Chain[Int]
和殼體類,將被使用:
case class User(name:String, age:Int)
A鏈可以創建一個for理解:
val form = for{
name <- StringChain
age <- IntChain
} yield User(name, age)
的form
類型應該是
Chain[User]{type ChainMethod = String => Int => User}
,使我們可以做到以下幾點:
form.fill("John", 25) //should return User("John", 25)
我嘗試了一些方法,以結構類型和專業FlatMappedChain
特質,但我不能讓類型系統按照我希望的方式行事。我會喜歡關於如何指定接口的一些想法或建議,以便編譯器可以認識到這一點,如果這是可能的話。