简而言之,我有一个文本文件,如下所示:
ID1|ID2|DATE|SUM
0|0|20/03/2014|100.00
0|1|20/04/2014|99.00
我有一个自定义数据类型,如下所示:
data DBData = DBData { id1 :: Int
, id2 :: Int
, date :: String
, sum :: Int
} deriving (Eq, Read, Show)
我如何才能做到这一点?
到目前为止,我一直在玩的是这样的事情:
parseRow :: [String] -> DBData
parseRow = let (id1:id2:date:sum) = (splitWhen (=='|')) s
i = read id1
in DBData {id1 = i}
但是我似乎无法正确理解语法...
与我的其他帖子有关:https : //stackoverflow.com/questions/25477554/using-splitwhen-to-split-string-by-delimiter-and-trying-to-figure-out-how-to-sto
在Haskell中,所有数据构造函数和具体类型都必须以大写字母开头:
data DbData = DbData ...
另外,如果您想使用该read
方法以类似的自定义格式读取内容,则必须将数据类型设为的实例Read
:
instance Read DbData where
read s = ...
在实例定义中,您可以read
像定义任何其他Haskell函数一样进行定义。
另外,正确的let
语法(在do
块外)是
let binding = val
in
... body ...
创建数据类型时,通常(通常)创建一个或多个构造函数,可用于构造该类型的值。这是一个类似于您的示例
data Example = Example { a :: Int
, b :: Char
, c :: String
}
我们可以Example
使用Example
构造函数来生成type的值(请注意,这些名称不必相同):
exampleValue :: Example
example = Example 1 'z' "abcdef"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句