FromJSON faz uma lista de vários campos

Eu tenho um objeto para analisar que se parece com isso:

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

Agora, basicamente, eu quero analisar isso em uma [VM], mas meu problema é esses campos numerados. Dependendo da configuração da VM, ela pode ou não ter campos virtioX, ideX .. e não vejo uma maneira de saber com antecedência nem adivinhar os números. Eu estava pensando que o melhor seria definir um tipo de disco que contenha algo como Virtio | SATA IDE e assim por diante para o tipo e um campo de texto para o valor, faça com que cada VM tenha um [Disco] no seu tipo. Algo assim :

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

Isso seria ótimo, mas como analiso os campos aleatórios que tenho diretamente dentro do objeto VM json em uma lista?