Scalacheck — карта значений не входит в объект A1

У меня есть черта в scala с именем A, и я создаю из нее объект case с именем A1. Как это:

trait A
case object A1 extends A

Теперь я хочу создать для него Scalacheck Gen, поэтому я создаю объект GenA, например:

object GenA {
  def a: Gen[A] = for {
    value <- A1
  } yield value
}

Но когда я пытаюсь его скомпилировать, я получаю следующую ошибку:

value map is not a member of object A1
[error]     value <- A1
[error]              ^
[error] one error found
[error] (test:compileIncremental) Compilation failed

Может ли кто-нибудь помочь мне с этой ошибкой?


person himanshuIIITian    schedule 21.06.2017    source источник
comment
В вашем коде вы обрабатываете A1 так, как если бы он уже был генератором (т. е. вы используете его справа от <-), но это не так. Вместо этого попробуйте val a: Gen[A] = Gen.const(A1).   -  person jub0bs    schedule 21.06.2017
comment
@Jubobs Я думаю, вы должны опубликовать это как ответ. :-)   -  person stefanobaghino    schedule 21.06.2017
comment
В качестве дополнительной информации: компилятор scala преобразует for-comprehension в цепочку .map() и .flatMap(). Вот почему ошибка говорит map is not a member of (...)   -  person EmilioMg    schedule 21.06.2017
comment
@stefanobaghino Готово.   -  person jub0bs    schedule 22.06.2017


Ответы (1)


Может быть, вы хотите попробовать что-то это:

import org.scalacheck.Gen

trait A
case object A1 extends A

object GenA {
  def a: Gen[A] =
    for {
      value <- Gen.const(A1)
    } yield value
}

возврат генератора напрямую..

person Atiq    schedule 21.06.2017