下面的代码片段中,我想将一个字符串附加到/ prepend一个字符串作为存储在地图中的值的一部分。类型声明错误:[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'也没有帮助。 – 2012-02-09 10:16:56
忘了提及,你必须改变'appendMsg'的类型声明以使用'Map(String,Integer)[String]'。 – 2012-02-09 10:25:17
谢谢!顺便说一下[String]不是[Char]? – 2012-02-09 10:56:54