I think you want to overload Extractor to be of kind * and of kind * -> *. Overloading is usually best avoided, so instead I'd recommend,
scala> trait Mapping[T]
defined trait Mapping
scala> trait Node
defined trait Node
scala> trait Extractor[T] extends Mapping[T]
defined trait Extractor
scala> type NodeExtractor = Extractor[Node]
defined type alias NodeExtractor
scala> val ne = new NodeExtractor {}
ne: NodeExtractor = $anon$1@1ebdcc9a
If Extractor[Node] is the common case, then you could optimize for that and do something like this,
scala> trait ExtractorT[T] extends Mapping[T]
defined trait ExtractorT
scala> type Extractor = ExtractorT[Node]
defined type alias Extractor
scala> val ne = new Extractor {}
ne: Extractor = $anon$1@3d70fe39
Node, so upper and lower bounds are in applicable in this case , or is there something that fits ?