ジェネレータには確率分布を表すモナドであるジェネレータにジェネレータコンビネータ(ScalaCheckやHaskellのQuickCheckに類似したバージョン)を実装する予定です微風ライブラリー)。それはモナドなので、RandはmapとflatMapを実装します。よくあることですが、Genをモナドとして実装したいと考えています。以下に示すように、Genのマップの実装は簡単です:集計モナドでのflatMapの実装
// 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?
}
}
しかし、flatMapの実装方法はわかりません。これは簡単に達成できますか、それとも中間データ型を介して間接的なレベルを必要としますか?
幸いにも、独立性が望ましい特性です。 – NietzscheanAI