Haskell 将两个函数应用于元组列表

Haskell 将两个函数应用于元组列表,haskell,Haskell,我有一个元组列表,其中包含以下形式的信息: carDatabase :: [Car] carDatabase = [("Ford", "Focus", 2003, [("Autotrader", 9995), ("Parkers", 9495), ("Motors", 9995)]), ("Vauxhall", "Corsa", 2005, [("Autotrader", 5995), ("FOW", 7000), ("Gumtree", 6500)]), ...] 我想做的是map这个列表返

我有一个元组列表,其中包含以下形式的信息:

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)

您可以使用

map ((map toLower) . carMan) cs
或者将其作为辅助函数:

strLower :: String -> String
strLower = map toLower

mapTest :: [Car] -> [String]
mapTest = map (strLower . carMan)

这是我尝试过的,但是程序不会用这样的函数编译。你能显示错误吗?我明白了,你似乎正在使用
Data.Char
中的
toLower
,因此该函数仅适用于
Char
,而
Car
数据类型中的第一项是
字符串,这是
字符的列表。您可以跨字符串映射
toLower
,或者将其作为辅助函数编写。请参阅我的更新。完美。这就是解决问题的办法!这是我尝试过的,但是程序不会用这样的函数编译。你能显示错误吗?我明白了,你似乎正在使用
Data.Char
中的
toLower
,因此该函数仅适用于
Char
,而
Car
数据类型中的第一项是
字符串,这是
字符的列表。您可以跨字符串映射
toLower
,或者将其作为辅助函数编写。请参阅我的更新。完美。这就是解决问题的办法!假设
carMan
toLower
有正确的类型,这应该行得通。假设
carMan
toLower
有正确的类型,这应该行得通。