Haskell 从csv使用木薯制作列表

Haskell 从csv使用木薯制作列表,haskell,Haskell,如果将lambda表达式分解为命名函数: data Values = Values { column1 :: !Int, column2 :: !Int } Right (_, v) -> print $ V.toList $ V.map column1 v 然后你可以把它写成 printElement p = putStr $ show (column1 p) \p->…语法是说“接受一个名为p的参数,并使用它执行…”。V.forM\

如果将lambda表达式分解为命名函数:

data Values = Values
    {
        column1 :: !Int,
        column2 :: !Int
    }
Right (_, v) -> print $ V.toList $ V.map column1 v
然后你可以把它写成

printElement p = putStr $ show (column1 p)
\p->…
语法是说“接受一个名为
p
的参数,并使用它执行
”。
V.forM\u
函数先取一个向量,然后取一个一元函数来调用该向量的每个元素,在本例中,
\p->putStr$show(column1p)
是赋予
forM\u
的函数

如果您想列出所有
column1
值,则可以这样做

Right (_, v) -> V.forM_ v printElement
V.toList$V.map column1 V
是您感兴趣的内容,它将为向量中的每个元素计算
column1
,然后将该结果转换为正常的Haskell列表


要将记录转换为列表,您需要编写自己的
toList
函数:

data Values = Values
    {
        column1 :: !Int,
        column2 :: !Int
    }
Right (_, v) -> print $ V.toList $ V.map column1 v
请注意,只有当您的记录是同质的时,这才可能发生,因此您可以在这里混合一个
字符串
浮点
字段,因为Haskell列表不能包含不同类型的值

然后你可以简单地做

valuesToList :: Values -> [Int]
valuesToList (Values c1 c2) = [c1, c2]

如果我有更多的列怎么办?@letsjak您想对这些列做什么?将每个csv行放入一个列表中,如
[column1,column2,…]
@letsjak您能用您试图读取的数据类型编辑您的问题吗?从您对
column1
的使用来看,您似乎在对实现
FromNamedRecord
的自定义记录类型使用访问器。否则,您将使用
Map
HashMap
。有了这些,您将基本上得到一个无序的数据容器,因此您可能需要一种方法,以您想要的顺序将其转换为列表。如果您只是想按原样读取数据,请改用
decode
功能。