Ich bin auf der Suche nach einer Version von Generator-Kombinatoren (zB analog zu ScalaCheck oder Haskell's QuickCheck), in denen ein Generator eine Instanz von Rand enthält, eine Monade, die eine Wahrscheinlichkeitsverteilung darstellt die Brise-Bibliothek). Da es eine Monade ist, implementiert Rand map und flatMap. Wie üblich, möchte ich Gen auch als Monade implementieren. Wie unten gezeigt, ist die Umsetzung der Karte für Gen einfach:Implementierung von flatMap auf aggregate monad
// Rand is from the breeze library
trait Rand[T] {
def map[U](f: T => U): Rand[U]
def flatMap[U](f: T => Rand[U]): Rand[U]
}
case class Gen[T](dist: Rand[T]) {
def map[U](f: T => U): Gen[U] = Gen(dist.map { f })
def flatMap[U](f: T => Gen[U]): Gen[U] = {
// How to implement this?
}
}
Es ist jedoch nicht klar für mich ist, wie flatMap umgesetzt werden sollten. Wird dies leicht erreicht, oder benötigt es (zum Beispiel) eine gewisse Umleitung über einen Zwischentyp?
Glücklicherweise ist die Unabhängigkeit die gewünschte Eigenschaft. – NietzscheanAI