Не удалось найти неявный в финале Scala Tagless, неявный, модульный тест

Получение:

Error:(20, 5) could not find implicit value for parameter console: example.Console[F]
    new NameThing().program
Error:(20, 5) not enough arguments for constructor NameThing: (implicit evidence$1: cats.Monad[cats.package.Id], implicit console: example.Console[cats.package.Id])example.NameThing[cats.package.Id].
Unspecified value parameter console.
    new NameThing().program

Не уверен почему.

Я пытаюсь понять модульное тестирование с Tagless Final

Так что я:

case class FullName(first:String, last:String)

trait Console[F[_]] {
  def prompt:F[Unit]
  def read:F[String]
  def display(fullName: FullName):F[Unit]
}

class NameThing[F[_]: Monad](implicit console: Console[F]) {

  def program: F[Unit] = for {
    _ <- console.prompt
    rawName <- console.read
    fullName = parse(rawName)
    _ <- console.display(fullName)
  } yield ()

  def parse(rawName:String):FullName = {
    val parts = rawName.split(" ")
    FullName(parts(0), parts(1))
  }
}

И в моем модульном тесте я имею:

   case class TestEnv()
   type Test[A] = Reader[TestEnv, A]

   implicit object TestConsole extends Console[Test] {
      override def prompt: Test[Unit] = Reader(_ => Unit)
      override def read: Test[String] =  Reader(_ => "Joe Bloggs")
      override def display(fullName: FullName): Test[Unit] = Reader(_ => Unit)
    }

    new NameThing().program

Полный код: https://bitbucket.org/jameskingconsulting/scala-effects/src/master/

1 ответ

Решение

Пытаться

new NameThing[Test]().program

Тип параметра, как представляется, выводится как cats.Id вместо Test,

Другие вопросы по тегам