【问题标题】:Using numeric file content as int (Haskell)使用数字文件内容作为 int (Haskell)
【发布时间】:2019-06-16 03:49:04
【问题描述】:

有什么方法可以使用文件的内容,其中包含一个计数器值(数据库系统的增量 id)作为常规 int?

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

有谁知道如何将 txt 文件中的增量 id(或一般的整数值)用于需要 Int 值的类实例?

提前致谢!

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

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

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

【问题讨论】:

  • .从文件中读取本质上是一种 I/O 操作 - 因此您需要在返回类型中使用 IO。因此,要么您需要id 字段的类型为IO Int,要么(可能更好)someRow 的类型为IO SomeTable

标签: database haskell types io int


【解决方案1】:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2023-04-06
    • 1970-01-01
    • 2021-09-29
    • 2013-04-07
    相关资源
    最近更新 更多