Avec l'extrait ci-dessous, je souhaite ajouter/ajouter une chaîne à une liste faisant partie d'une valeur stockée dans une carte.Erreur de déclaration de type: [Char] et [[Char]]
A partir de l'extrait ci-dessous je reçois l'erreur
Couldn't match expected type `Char' with actual type `[Char]'
Expected type: Map.Map ([Char], Integer) [Char]
Actual type: Map.Map ([Char], Integer) [[Char]]
et je ne suis pas tout à fait sûr de ce qui devrait me dire. Cela peut-il être résolu avec une modification du code ou doit-il y avoir quelque chose comme
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
Avec une déclaration d'instance?
import Data.Time
import Data.Time.Clock.POSIX
import qualified Data.PSQueue as PSQ
import qualified Data.Map as Map
import Data.Maybe
import Control.Category
import Control.Concurrent
import Control.Concurrent.MVar
import Control.Monad
key = ("192.168.1.1", 4711)
messages = ["aaa", "bbbb", "ccccc"]
newRq = do
time <- getPOSIXTime
let q = PSQ.singleton key time
let m = Map.singleton key messages
return (q, m)
appendMsg :: String -> (String, Integer) -> Map.Map ([Char], Integer) [Char] -> Map.Map ([Char], Integer) [Char]
appendMsg a (b, c) m = m2
where
f x = x ++ a
m2 = Map.adjust f (b, c) m
main :: IO()
main = do
(q, m) <- newRq
let m2 = appendMsg "first" key m
print (m2)
Déjà essayé. Cependant, alors j'obtiens une erreur disant 'Aucune instance pour (IsString Char) découlant du littéral' 'ccccc" '. Ajouter 'import Data.String' n'aide pas non plus. –
Oublié de mentionner, vous devez changer la déclaration de type 'appendMsg' pour utiliser' Map (String, Integer) [String] 'aussi. –
Merci! Est-ce qu'un [String] n'est pas un [Char]? –