如何将一些函数应用于Haskell中的每一行文件

时间:2016-04-13 17:43:42

标签: haskell

假设我有一个1 = Cash 2 = Money Transfer 3 = Visa 4 = etc 函数,我想让它应用于每行文件并得到一系列结果。我怎么能这样做?

parseMessage

3 个答案:

答案 0 :(得分:5)

首先,您必须认识到parseFile必须在IO monad中运行,因为它涉及文件I / O.这意味着从readFile生成的IO操作中提取内容,然后将结果打包回IO操作。这里首先分两步,将纯计算与IO操作分开:

parseContents :: String -> [SpecificDataStructure]
parseContents contents = map parseMessage (lines contents)

parseFile :: String -> IO [SpecificDataStructure]
parseFile fileName = readFile fileName >>= return . parseContents

在这里它被写为一个函数

parseFile :: String -> IO [SpecificDataStructure]
parseFile fileName = do
                   contents <- readFile fileName
                   let parsed = map parseMessage (lines contents)
                   return parsed

答案 1 :(得分:0)

你可能希望做这样的事情:

  public String acd;

parseFile = do f <- readFile "myfile.txt" map myFunc $ lines f 将文件拆分为lines列表,String允许您将一个函数(在第一个参数中提供)应用于列表的每个元素。结果是一个值列表。 (GHCi中的map收益:t map)。

答案 2 :(得分:0)

首先,使用readFile

获取文件的内容
contents <- readFile "filename"

然后,使用适当命名的函数

将文件拆分为行
let fileLines = lines contents

最后,将每一行转换为您的结构

let objects = map parseMessage fileLines

这将是表示原始文件的结构数组。