FromJSON hace una lista de múltiples campos

Tengo un objeto para analizar que se parece un poco a esto:

{
  "data":
  [
    {
      "virtio0": "some text",
      "virtio1": "blah",
      "ide2": "some other text",
      "cores": 1,
      "mem": 512,
      ...
    },
    {
      // The same ...
    }
  ]
}

Ahora, básicamente, quiero analizar eso en una [VM], pero mi problema son esos campos numerados. Dependiendo de la configuración de VM, podría tener o no campos virtioX, campos ideX ... y no veo una manera de saber de antemano, ni adivinar los números. Estaba pensando que lo mejor podría ser definir un tipo de Disco que contendría algo como Virtio | Sata | IDE y así sucesivamente para el tipo, y un campo de Texto para el valor, luego haga que cada VM tenga un [Disco] en su tipo. Algo como esto :

data DiskType = Virtio | Sata | IDE
data Disk     = Disk {diskType :: DiskType, diskPath :: Text}
data VM       = VM {cores :: Int, disks :: [Disk], mem :: Int, ...}

Eso sería genial, pero ¿cómo analizo esos campos aleatorios que tengo directamente dentro del objeto VM json en una lista?

Respuestas a la pregunta(2)

Su respuesta a la pregunta