2016-08-26 10 views
0

Natは、どのようにして<= Nにすることができますか?強制バインドナット?

例:

def lessThan5(x: NatLT5) = ???

lessThan5(Nat(4))がコンパイルう

が、lessThan5(Nat(6))ではないだろう。

答えて

2

タイプクラスLTEq(厳密により小さい場合はLT)を使用できます。

import shapeless.nat._ 
import shapeless.ops.nat._ 

def lessThan5[N <: Nat](n: N)(implicit ev: LTEq[N, _5]) = ??? 

lessThan5(_4) // compiles 
lessThan5(_5) // compiles 
lessThan5(_6) // doesn't compile because LTEq[_6, _5] cannot be found