Ton utilisation de "nom" et de "nbfils" me fait un peu peur.
Là où ils sont placés, ce sont des variables de types : ils peuvent représenter par exemple Bool, String, Int, Float, etc. Là j'ai l'impression que dans ta tête ils jouent plutôt le rôle de valeurs, comme "toto" ou 4. Ici en l'occurrence tu ne vas pas avoir besoin d'utiliser des variables de types, mais revoir ton cours là-dessus, tu sembles avoir mal compris leur utilisation.
Si on retire les variables de type inutiles, ton truc donne :
data XML = Balise XML | Texte
Si tu veux que les balises puissent contenir un nom (de type String), tu le rajoutes en argument :
data XML = Balise String XML | Texte
Je pense que c'est plutôt ça que tu voulais écrire. Et effectivement comme tu dis là ce n'est pas un arbre (c'est une liste), puisque chaque balise a un seul fils. Si tu voulais deux fils, tu écrirais :
data XML = Balise String XML XML | Texte
Là tu obtiens un arbre binaire, avec à chaque niveau, exactement deux fils.
Il te reste à :
- Rajouter un contenu de type String dans les noeuds Texte (pour l'instant, ils ne contiennent rien)
- T'arranger pour avoir un nombre quelconque de fils (indice : par exemple, avec une liste de fils)