Question

This might not be the most correct terminology but what I mean by boxed type is Box[T] for type T. So Option[Int] is a boxed Int.

How might one go about extracting these types? My naive attempt:

//extractor
type X[Box[E]] = E //doesn't compile. E not found

//boxed
type boxed = Option[Int]

//unboxed
type parameter = X[boxed] //this is the syntax I would like to achieve
implicitly[parameter =:= Int] //this should compile

Is there any way to do this? Apart from the Apocalisp blog I have hard time finding instructions on type-level meta-programming in Scala.

Was it helpful?

Solution

I can only imagine two situations. Either you use type parameters, then if you use such a higher-kinded-type, e.g. as argument to a method, you will have its type parameter duplicated in the method generics:

trait Box[E]

def doSomething[X](b: Box[X]) { ... } // parameter re-stated as `X`

or you have type members, then you can refer to them per instance:

trait Box { type E }

def doSomething(b: Box) { type X = b.E }

...or generally

def doSomething(x: Box#E) { ... }

So I think you need to rewrite your question in terms of what you actually want to achieve.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top