2016-12-14 4 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

いるから。 PositiveタイプのValidate特性のインスタンスを見つけるのに役立つ人がいるかどうか疑問に思っていましたか?あるいは、私はそのようなインスタンスを自分で提供すべきですか?

答えて

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).) 
関連する問題