Il y a quelques problèmes avec votre code, certains faciles, et certains difficiles. Examinons d'abord les faciles:
La première est votre fonction convertto
. Il existe déjà et s'appelle fromList
. Il y a aussi une fonction pour créer un nouveau Map
avec une paire, appelée singleton
. La manière dont vous parlez des fonctions dans Data.Map
est inhabituelle. La résolution de ces problèmes donne:
import qualified Data.Map as M
rec1 = M.fromList [("name", "obj-1"), ("status", "up"), ("region", "us")]
justfold = foldr M.singleton rec1 ["us","up"]
Maintenant, cependant, il y a un problème plus profond. Pour savoir ce qu'il est, nous allons essayer d'ajouter des signatures de type à rec1
et justfold
:
import qualified Data.Map as M
rec1 :: M.Map [Char] [Char]
rec1 = M.fromList [("name", "obj-1"), ("status", "up"), ("region", "us")]
justfold :: M.Map [Char] (M.Map [Char] (M.Map [Char] [Char]))
justfold = foldr M.singleton rec1 ["us","up"]
rec1
est très bien, mais justfold
est un problème. Pour comprendre pourquoi, regardez les signatures de type de foldr
et singleton
:
foldr :: (a -> b -> b) -> b -> [a] -> b
singleton :: k -> a -> Map k a
foldr
nécessite une fonction de type (a -> b -> b)
et singleton
est pas, parce que a
et Map k a
ne sont pas la même chose. Le code suivant produit le résultat souhaité:
import qualified Data.Map as M
rec1 = M.fromList [("name", "obj-1"), ("status", "up"), ("region", "us")]
justfold = M.singleton "us" $ M.singleton "up" rec1
Cependant, la question fondamentale est que vous ne pouvez pas itérer sur quelque chose qui change de type à chaque itération. Si vous vous trouvez vouloir le faire, je vous conseille de prendre du recul et de repenser votre approche du problème.
Désolé, mais je pense que votre explication de ce que vous voulez réaliser n'est pas claire. En particulier, vous ne pouvez pas avoir quelque chose comme ["us", [("up", [("name", "obj-1"), ("status", "up"), ("région", "nous") ])]] car tous les éléments de la liste doivent être du même type. –
Excuses, j'ai corrigé le type de sortie, je veux. Ce que je veux, c'est une carte de hachage imbriquée. Est-ce que le nouveau type de sortie a du sens. – Soham
Bien sûr, rien de ce que vous utilisez ici est un hashmap ... –