scala - What is type declartion for in definition of Nat in shapeless? -


this definition of nat in package shapeless:

   trait nat {      type n <: nat    }     case class succ[p <: nat]() extends nat {      type n = succ[p]    }     class _0 extends nat serializable {      type n = _0    } 

what type declarations ? once removed seems me definition works equally well.

they're used nat target type of implicit conversion literal int ... see here, example, in definition of int indexing method hlist,

def at(n : nat)(implicit @ : at[l, n.n]) : at.out = ... 

here intention method invoked literal int argument,

(23 :: "foo" :: true :: hnil).at(1) 

the argument converted nat implicit macro able inspect compile time argument tree , construct corresponding nat value. can refer type member n of n , use index at type class extracts desired element hlist.


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -