Haskell - 无法将预期类型'JValue'与实际类型'[(String,JValue)]'匹配

时间:2016-04-30 17:55:12

标签: json haskell

我是Haskell的新手,我遇到JValue的问题,我之前将其定义为:

data JValue = 
    JString String
    | JNumber Double
    | JBool Bool
    | JNull 
    | JObject [(String, JValue)]
    | JArray [JValue]

我正在尝试制作一个功能

getPosition :: String -> JValue -> Int -> Int
getPosition _ (JObject []) _ = -1
getPosition word (JObject [(name,_)]) index
    | stringsAreEqual word name = index
    | otherwise = -1
getPosition word (x:xs) index = getPosition word xs (index+1)

旨在查找JObject中元组的索引,该索引与参数中的元组具有相同的字符串。我收到了这个错误:

Couldn't match expected type ‘with actual type ‘[(String, JValue)]’

我做错了什么?我可能让自己太复杂了。感谢

1 个答案:

答案 0 :(得分:3)

在最后一个子句的第二个参数中,您对列表(x:xs)进行模式匹配,但必须有JValue

如果要在列表中查找索引,请使用findIndex中的Data.List

getPosition word (JObject tuples) =
       findIndex (\(name,_) -> name == word) tuples