将数字文件内容用作int(Haskell)

时间:2019-01-22 16:12:20

标签: database haskell types io int

我是否可以使用某种方式将文件的内容作为常规int使用,该文件的内容包含一个计数器值(数据库系统的增量ID)?

我们正在尝试在Haskell中创建一个小的数据库系统,并且需要跟踪表的增量ID。我们认为唯一的“简便”方法是将它们保存在纯文本文件中。但是,检索它们时,返回类型将为IO Int。但是,我们的数据库表定义需要Int作为ID。

是否有人对需要Int值的类实例如何使用txt文件中的增量ID(或通常为整数值)?

谢谢!

编辑:说明问题的代码示例:

data SomeTable = SomeTable { id :: Int, testField :: String }
someRow = SomeTable (generateNextId "SomeTable") "Test"

generateNextId从文件中读取当前的增量ID(因此其类型为IO Int而不是Int)。

1 个答案:

答案 0 :(得分:8)

好吧IO Int是一种动作,就像读取击键一样,会导致Int。因此,执行该操作以获得一个Int:

data SomeTable = SomeTable { id :: Int, testField :: String }
someRow :: IO SomeTable
someRow =
    do i <- generateNextId "SomeTable"
       return (SomeTable i "Test")

someRowAlternative :: IO SomeTable
someRowAlternative =
    SomeTable <$> generateNextId "SomeTable" <*> pure "Test"