Haskell 如何将函数应用于向量列表?

Haskell 如何将函数应用于向量列表?,haskell,vector,Haskell,Vector,我有一个大型嵌套向量,如下所示: import Data.Vector let x = fromList [["a", "b", "12", "d"], ["e", "f", "34", "g"]...] let y = Data.Vector.map (\a -> read a :: Int) [i !! 2 | i <- x] > let x = [("a", "b", "12", "d"), ("e", "f", "34", "g")] > map (\(a,

我有一个大型嵌套向量,如下所示:

import Data.Vector
let x = fromList [["a", "b", "12", "d"], ["e", "f", "34", "g"]...]
let y = Data.Vector.map (\a -> read a :: Int) [i !! 2 | i <- x]
> let x = [("a", "b", "12", "d"), ("e", "f", "34", "g")]
> map (\(a, b, c, d) -> (a, b, read c :: Int, d)) x
[("a", "b", 12, "d"), ("e", "f", 34, "g")]
我想将字符串转换为每个嵌套列表中位置2处的整数,我正试图用map和类似的理解来实现这一点:

import Data.Vector
let x = fromList [["a", "b", "12", "d"], ["e", "f", "34", "g"]...]
let y = Data.Vector.map (\a -> read a :: Int) [i !! 2 | i <- x]
> let x = [("a", "b", "12", "d"), ("e", "f", "34", "g")]
> map (\(a, b, c, d) -> (a, b, read c :: Int, d)) x
[("a", "b", 12, "d"), ("e", "f", 34, "g")]

这里有很多问题

首先,列表理解的结果是一个列表,因此在列表上调用
Data.Vector.map
,这是行不通的。理解中的
x
是一个
向量,这是另一种类型的不匹配。使用列表而不是向量(以及
Prelude.map
),或者将列表转换为
向量(在这种情况下,您不能使用列表)


其次,忽略list/
Vector
问题,
[i!!2 | i看起来您应该使用比4元组更复杂的数据类型,如

data YourType_StringNum = YourType_StringNum { ytsnLetters1 :: String
                                             , ytsnLetters2 :: String
                                             , ytsnNumber :: String
                                             , ytsnLetters3 :: String }
data YourType_IntNum = YourType_IntNum { ytinLetters1 :: String
                                       , ytinLetters2 :: String
                                       , ytinNumber :: Int
                                       , ytinLetters3 :: String }
(当然有更好的标识符)

toYtin :: YourType_StringNum -> YourType_IntNum
toYtin(YourType_StringNum a b s c) = YourType_IntNum a b (read s) c

这样一来,您的问题就简化为将
向量YourType\u StringNum
转换为
向量YourType\u IntNum
,而这只需对
Data.Vector.map toYtin

结果的类型是什么?类型应该是一个嵌套的元组。因此,如果任何
ys的
长度xs/=4
,会发生什么情况de>在
x
中?也许您应该从4元组的向量开始。