2016-12-14 7 views
0

投稿されたa similar question earlier、修正されました。しかし、この質問をするために、私は最初の問題を単純化しました。しかし、この簡単な質問の解決策は私の初期の問題を解決するようには見えない洗練された制約Interval.Closedを使用してコンパイルエラー

洗練されたライブラリ(https://github.com/fthomas/refined)のInterval.Closed型を使用してDouble型を制約しようとするこの短いコードを試してみると、コンパイルエラーが発生します。

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 UnitReal = Double Refined Interval.Closed[W.`0.0`.T, W.`1.0`.T] 

    def foo(x: Double): Either[String, UnitReal] = refineV[UnitReal](x) 
} 

このコンパイルエラーが表示されます。

Error:(13, 67) could not find implicit value for parameter v: eu.timepit.refined.api.Validate[Double,xxx.Lala.UnitReal] def foo(x: Double): Either[String, UnitReal] = refineVUnitReal

そこからInterval.Closedタイプのための検証の実装が欠落しているようです。 Interval.Closed型のValidate特性のインスタンスを誰かが見つけるのを助けることができるかどうか疑問に思っていましたか?あるいは、私はそのようなインスタンスを自分で提供すべきですか?

答えて

0

Iは、制約と制約タイプを分離し、そして値(即ちrefineVOneToZero)を洗練するために制約を使用して問題を解決することができた:

object Lala { 
    type OneToZero = Interval.Closed[W.`0.0`.T, W.`1.0`.T] 
    type UnitReal = Double Refined OneToZero 

    def foo(x: Double): Either[String, UnitReal] = refineV[OneToZero](x) 
} 
関連する問題