Extraindo lift-json em uma classe de caso com um limite superior

Passei o último dia pesquisando e lendo vários sites e artigos para tentar encontrar a resposta para essa pergunta e não encontrei nada que o ajudasse. Eu nem tenho certeza se isso é viável. Meu problema é que estou tentando analisar e extrair uma resposta Json usando o lift-json. A resposta consiste em 4 partes, nas quais as 3 primeiras são sempre as mesmas para todas as respostas a todos os tipos de solicitação que faço. A última parte varia dependendo do tipo de solicitação, mas sempre será uma lista de algum tipo. Eu esperava fazer algo assim:

abstract class MyObjects
case class Apple(id: Int, name: String, color: String) extends MyObjects
case class Orange(id: Long, name: String, state: String) extends MyObjects

abstract class MyResponse
case class Fruits[T <: MyObjects](aisle: Int, bin: Int, hasWhat: Option[List[T]])

Onde, se eu quisesse saber o que são todas as maçãs, faria um pedido e receberia uma resposta com uma lista de maçãs. Quando tento extrair este exemplo:

myJson.extract[Fruits[Apple]]

Eu recebo este erro:

net.liftweb.json.MappingException: do not know how to get type parameter from T
    at net.liftweb.json.Meta$.fail(Meta.scala:128)
    at net.liftweb.json.Meta$Reflection$.term$1(Meta.scala:206)
    at net.liftweb.json.Meta$Reflection$.typeParameters(Meta.scala:220)
    at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:91)
    at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:101)
    at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:90)
    at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:107)
    at net.liftweb.json.Meta$.toArg$1(Meta.scala:117)
    at net.liftweb.json.Meta$anonfun$constructorsOnde, se eu quisesse saber o que são todas as maçãs, faria um pedido e receberia uma resposta com uma lista de maçãs. Quando tento extrair este exemplo:1$anonfun$apply$1.apply(Meta.scala:83)
    at net.liftweb.json.Meta$anonfun$constructorsOnde, se eu quisesse saber o que são todas as maçãs, faria um pedido e receberia uma resposta com uma lista de maçãs. Quando tento extrair este exemplo:1$anonfun$apply$1.apply(Meta.scala:82)
    at scala.collection.TraversableLike$anonfun$map$1.apply(TraversableLike.scala:...

Estou usando o lift-json 2.1 e o scala 2.8. Eu tenho uma maneira de contornar isso, criando especificamente uma classe de caso para cada tipo de resposta, mas achei que o que estava tentando fazer era mais limpo. Só queria saber se a) isso é possível? b) se sim, o que estou fazendo de errado?

EDIT ... aplicativo de amostra:

val apples = """{ "aisle" : 1, "bin" : 1,
            "hasWhat" : [{ "id" : 4, "name" : "Granny", "color" : "green"}, 
                         { "id" : 4, "name" : "Fuji", "color" : "red"}] }"""

val oranges = """ { "aisle" : 3, "bin" : 2, 
             "hasWhat" : [{ "id" : 2, "name" : "Navel", "state" : "FL" }, 
                         { "id" : 2, "name" : "Clementine", "state" : "Spain" }]}"""

scala> val aJson = parse(apples)
aJson: net.liftweb.json.JsonAST.JValue = JObject(List(JField(aisle,JInt(1)), JField(bin,JInt(1)), JField(hasWhat,JArray(List(JObject(List(JField(id,JInt(4)), JField(name,JString(Granny)), JField(color,JString(green)))), JObject(List(JField(id,JInt(4)), JField(name,JString(Fuji)), JField(color,JString(red)))))))))

scala> val oJson = parse(oranges)
oJson: net.liftweb.json.JsonAST.JValue = JObject(List(JField(aisle,JInt(3)), JField(bin,JInt(2)), JField(hasWhat,JArray(List(JObject(List(JField(id,JInt(2)), JField(name,JString(Navel)), JField(state,JString(FL)))))))))

scala> val doesntWork = aJson.extract[Fruits]
doesntWork: org.spin.node.gogrid.objects.Fruits = Fruits(1,1,None)

scala> val works = aJson.extract[AFruit]
works: org.spin.node.gogrid.objects.AFruit = AFruit(1,1,Some(List(Apple(4,Granny,green), Apple(4,Fuji,red))))

Quero que doesnWork seja como obras, Onde:

case class AFruit(aisle: Int, bin: Int, hasWhat: Option[List[Apple]])

Obrigado! -newbie

questionAnswers(1)

yourAnswerToTheQuestion