Чувствую, что я никогда не пойму полностью Хаскелла.Две функции: одна, которая подсчитывает записи в SQlite DB, поэтому она может генерировать инкрементные идентификаторы (checkUniqueID
).Другой, чтобы сделать записи, позвонив на checkUniqueID
.Мне просто нужно значение до taskEntry
как Int
.Я предполагаю, что мне не хватает знаний, чтобы оставаться в монадическом царстве.Код ниже.
-- checkUniqueID :: IO ()
checkUniqueID = do
conn <- open "taglist.db"
len <- query_ conn "SELECT (id) FROM task" :: IO [Only Int]
let showLength = Data.List.length $ len
close conn
return (showLength + 1) -- for testing purposes
-- fieldnames: id, task, date_in, date_out
taskEntry :: IO ()
taskEntry = do
putStrLn "Provide task and date due: "
let taskIDInt = checkUniqueID -- issue here!
task <- getLine
date_out <- getLine
let date_in = "today"
conn <- open "taglist.db"
execute conn "INSERT INTO task (id, task, date_in, date_out) VALUES (?,?,?,?)"
(taskIDInt :: Int , task :: String , date_in :: String , date_out :: String)
close conn
return ()