gpt4 book ai didi

scala - 在聚合 monad 上实现 flatMap

转载 作者:行者123 更新时间:2023-12-02 01:27:04 26 4
gpt4 key购买 nike

我正在寻求实现一个版本的生成器组合器(例如类似于 ScalaCheck 或 Haskell 的 QuickCheck 中的组合器),其中一个生成器包含一个 Rand 实例,一个表示概率分布的单子(monad)(取自微风库)。由于是 monad,Rand 实现了 map 和 flatMap。通常,我也想将 Gen 实现为 monad。如下所示,Gen 的 map 实现很简单:

// 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 应该如何实现。这很容易实现,还是(例如)需要通过某种中间数据类型进行一定程度的间接访问?

最佳答案

一个可能的实现是

def flatMap[U](f: T => Gen[U]): Gen[U] = 
Gen (dist.flatMap {f(_).dist})

关于scala - 在聚合 monad 上实现 flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com