Я реализовал следующую функцию:
/**
* Returns a function h , which is the composition of the functions f and g.
*/
def compose[A, B, C](g: B => C, f: A => B): A => C = f.andThen(g)
И я пытаюсь проверить это с помощью ScalaCheck .Я мог бы сгенерировать следующие тесты, которые компилируются и проходят:
import org.scalatest.prop.PropertyChecks
import org.scalatest.{FlatSpec, Matchers}
class ComposeSpec extends FlatSpec with Matchers with PropertyChecks {
"Compose" should "return a function h , which is the composition of the
functions f and g" in {
forAll { (a: Int, g: Int => Int, f: Int => Int) =>
compose(g, f)(a) should be(g(f(a)))
}
forAll { (a: String, g: Double => Int, f: String => Double) =>
compose(g, f)(a) should be(g(f(a)))
}
}
}
Но, как вы видите, я генерирую произвольные функции с определенными типами, а также сопоставляю тип параметра a
стип ввода функции f
.То, что я хочу сделать, было бы примерно так:
forAll { (a: A, g: B => C, f: A => B) =>
compose(g, f)(a) should be(g(f(a)))
}
Но я не знаю синтаксис для этого, и если это возможно.Не могли бы вы помочь мне?