2016-12-14 5 views
0

Ich versuche dieses kurze Code-Snippet, wobei ich versuche, einen Integer-Typ mit dem positiven Typ aus der verfeinerten Bibliothek (https://github.com/fthomas/refined) zu beschränken.Kompilierfehler unter Verwendung der verfeinerten Einschränkung "Positiv"

package xxx 

import eu.timepit.refined._ 
import eu.timepit.refined.api.{Refined, Validate} 
import eu.timepit.refined.auto._ 
import eu.timepit.refined.numeric._ 
import eu.timepit.refined.api.Refined 
import eu.timepit.refined.numeric.Interval 

object Lala { 
    type X = Integer Refined Positive 
    def lala(x: Int): Unit = { 
    val lala: X = refineV[X](x) 
    } 
} 

Wenn diese Schnipsel kompilieren, erhalte ich diese Fehlermeldung:

Error:(13, 29) could not find implicit value for parameter v: eu.timepit.refined.api.Validate[Int,xxx.Lala.X] val lala: X = refineVX

Error:(13, 29) not enough arguments for method apply: (implicit v: eu.timepit.refined.api.Validate[Int,xxx.Lala.X])Either[String,eu.timepit.refined.api.Refined[Int,xxx.Lala.X]] in class RefinePartiallyApplied. Unspecified value parameter v. val lala: X = refineVX

, von dem es scheint, dass ein Validate-Implementierung für die Positiv-Typ fehlt. Ich habe mich gefragt, ob jemand mir helfen könnte, eine Instanz der Validate-Eigenschaft für den Typ Positive zu finden? Oder sollte ich selbst eine solche Instanz bereitstellen?

Antwort

2

Ein kurzer Blick auf dem ähnliche Beispiel in den Refined readme sollte Ihre Probleme lösen helfen:

import eu.timepit.refined._ 
import eu.timepit.refined.api.Refined 
import eu.timepit.refined.auto._ 
import eu.timepit.refined.numeric._ 

// Int instead of Integer 
type X = Int Refined Positive 

// refineV returns an Either[String, SomeType Refined Tag] 
// (and uses a Validate[SomeType, Tag]) 
def foo(x: Int): Either[String, X] = refineV[Positive](x) 

foo(5) // Either[String,X] = Right(5) 
foo(-1) // Either[String,X] = Left(Predicate failed: (-1 > 0).) 
Verwandte Themen