2016-12-14 25 views
0

我嘗試這個簡短的代碼片段,在那裏我嘗試使用來自精煉庫(https://github.com/fthomas/refined)的積極類型約束整數類型。編譯錯誤使用精確的約束「積極」

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) 
    } 
} 

當編譯這個片段中,我得到這個錯誤信息:

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

從它似乎是一個驗證實施主動型缺失。我想知道是否有人可以幫我找到肯定類型的驗證特徵的一個實例?或者我應該自己提供這樣一個實例嗎?

回答

2

就讓我們來看看在Refined readme類似的例子應該有助於解決你的問題:

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).)