将scalacheck Gen与Scala中的未来结合起来

时间:2017-07-28 11:56:01

标签: scala monads future scalacheck scala-cats

基本上我正在尝试生成由HTTP请求导致的生成器,因此我经常会遇到像Gen[EitherT[Future, Error, T]]这样的类型。

问题是似乎没有任何monadic实例(所以我可以sequence或monad变换器)让我编写Gen[EitherT[Future, Error, T]]的不同实例

例如,假设我们有以下功能

def genUser: Gen[EitherT[Future, Error, User]]

def genAccounts(user: User): Gen[EitherT[Future, Error, List[Account]]

我们的想法是能够正确撰写Gen[EitherT[Future, Error,T]类型,以便genAccounts调用genUser,例如

def genAccounts(user: User): Gen[EitherT[Future, Error, List[Account]] = for { user <- genUser accounts <- genAccounts(user) } yield accounts

scalacheck Gen也提供了将Future提升为Gen的方法(即从Gen[Future[T]]转到Gen[T]的方式) 。即使这是阻塞,如果它只在我们生成最终的Gen属性时发生一次,这不是一个大问题

0 个答案:

没有答案