2016-07-07 15 views
0

Я проверяю свои домашние варят Monoid классов в Скале с использованием ScalaCheck библиотеки и ScalaTestвключить неявный импорт для типа времени выполнения в scala check. «Не может найти неявное значение для параметра»

при попытке реализовать СУХИЕ тесты, я получаю неявную ошибку в названии:

Error:(16, 12) could not find implicit value for parameter arbA: org.scalacheck.Arbitrary[A] 
    forAll { (a: A) => 
    ^

здесь является реализация intAddition Monoid:

trait Monoid[A] { 
    def op(a1: A, a2: A): A 
    def zero: A 
} 

object Monoid { 
... 
    val intAddition: Monoid[Int] = new Monoid[Int] { 
    override def op(a1: Int, a2: Int): Int = a1 + a2 
    override def zero: Int = 0 
    } 
... 
} 

И набор тестов:

import org.fpinscala.monoids.Monoid._ 
import org.fpinscala.testutils.UnitSpec 
import org.scalatest.prop.PropertyChecks 
import org.scalacheck.Arbitrary._ 

import scala.language.implicitConversions 

class MonoidSpec extends UnitSpec with PropertyChecks { 

    def assertIdentityBehaviour[A](M: Monoid[A]): Unit = { 
    import M._ 
    forAll { (a: A) => 
     op(zero, a) should be(a) 
     op(a, zero) should be(a) 
    } 
    } 

    behavior of "intAdditionMonoid" 

    it should "obey identity laws" in { 
    assertIdentityBehaviour(intAddition) 
    } 
} 

Этот код компилируется, но не выполняется во время выполнения (стирание типа run?). Является ли то, что я пытаюсь достичь в Scala?

ответ

1

Этот код компилируется

Это не делает; ошибка, которую вы даете, является ошибкой компиляции. Она должна быть исправлена ​​путем добавления неявного параметра жалуется:

def assertIdentityBehaviour[A](M: Monoid[A])(implicit arbA: Arbitrary[A]) = ... 
// or equivalently, def assertIdentityBehaviour[A: Arbitrary](M: Monoid[A]) = ... 

Вы вызоваassertIdentityBehaviour только с A, для которых параметр доступен, но ошибка в определении .

+0

Приносим извинения. Ошибка не появляется в среде IDE, но появляется в выводе sbt. Я новичок в scala в целом: P – coderatchet

 Смежные вопросы

  • Нет связанных вопросов^_^