Haskell 从csv使用木薯制作列表
如果将lambda表达式分解为命名函数: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\
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
功能。