我是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)]’
我做错了什么?我可能让自己太复杂了。感谢
答案 0 :(得分:3)
在最后一个子句的第二个参数中,您对列表(x:xs)
进行模式匹配,但必须有JValue
。
如果要在列表中查找索引,请使用findIndex
中的Data.List
getPosition word (JObject tuples) =
findIndex (\(name,_) -> name == word) tuples