С нижеприведенным фрагментом я хочу добавить/добавить строку в список, который является частью значения, хранящегося на карте.Ошибка объявления типа: [Char] и [[Char]]
Из фрагмента кода ниже я получаю ошибку
Couldn't match expected type `Char' with actual type `[Char]'
Expected type: Map.Map ([Char], Integer) [Char]
Actual type: Map.Map ([Char], Integer) [[Char]]
и я не совсем уверен, что это должен сказать мне. Может ли это быть разрешено с изменением кода или должно быть что-то вроде
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
Вместе с заявлением на экземпляр?
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)
Пробовал это уже. Однако, я получаю сообщение об ошибке «Нет экземпляра для (IsString Char) , возникающего из буквенного' 'ccccc''. Добавление 'import Data.String' тоже не помогает. –
Вспомните, что вы должны изменить объявление типа 'appendMsg' для использования' Map (String, Integer) [String] '. –
Спасибо! Есть, кстати, [String] не [Char]? –