Использование числового содержимого файла как int (Haskell) - PullRequest
0 голосов
/ 22 января 2019

Есть ли какой-нибудь способ, которым я могу использовать содержимое файла, которое содержит значение счетчика (идентификатор приращения для системы базы данных), как обычное целое число?

Мы пытаемся создать небольшую систему баз данных в Haskell, и нам нужно отслеживать идентификаторы приращений таблиц. Мы решили, что единственный «простой» способ сделать это - сохранить их в текстовом файле. Однако при их получении тип возвращаемого значения будет IO Int. Наше определение таблицы базы данных требует Int для идентификатора.

Кто-нибудь знает, как использовать идентификатор приращения (или целочисленное значение в целом) из текстового файла для экземпляра класса, для которого требуется значение Int?

Заранее спасибо!

EDIT: пример кода, иллюстрирующего проблему:

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

Где generateNextId читает идентификатор текущего приращения из файла (и поэтому имеет тип IO Int, а не Int).

1 Ответ

0 голосов
/ 22 января 2019

Ну, 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"
...