我有一个元组列表,其中包含以下形式的信息:
carDatabase :: [Car]
carDatabase = [("Ford", "Focus", 2003, [("Autotrader", 9995), ("Parkers", 9495), ("Motors", 9995)]), ("Vauxhall", "Corsa", 2005, [("Autotrader", 5995), ("FOW", 7000), ("Gumtree", 6500)]), ...]
我想做的是通过map
此列表返回每个元组的第一个元素的字符串列表(我有一个函数可以执行此操作,carMan (x,_,_,_) = x)
但也可以使用该toLower
函数,因此我无法找到一种方法将它们组合在一起,无论是具有功能组合或映射地图等
这是我最接近的。
mapTest :: [Car] -> [String]
mapTest cs = map toLower (map carMan cs)
任何帮助,将不胜感激。
这是我得到的错误:
mapTest :: [Car] -> [String]
mapTest cs = map (toLower . carMan) cs
Couldn't match type ‘Char’ with ‘[Char]’
Expected type: Char -> String
Actual type: Char -> Char
In the first argument of ‘(.)’, namely ‘toLower’
In the first argument of ‘map’, namely ‘(toLower . carMan)’
cars.hs:197:37:
Couldn't match type ‘[Char]’ with ‘Char’
Expected type: [(Char, String, Int, [(String, Int)])]
Actual type: [Car]
In the second argument of ‘map’, namely ‘cs’
In the expression: map (toLower . carMan) cs
您可以使用以下功能进行组合: .
map ((map toLower) . carMan) cs
或使其成为辅助函数:
strLower :: String -> String
strLower = map toLower
mapTest :: [Car] -> [String]
mapTest = map (strLower . carMan)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句