感觉我现在永远不会完全掌握Haskell。有两个功能:一个在SQlite DB中对记录进行计数,因此它可以产生增量ID(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 ()
答案 0 :(得分:2)
首先,checkUniqueID
返回一个Int
,因此其类型应为IO Int
,而不是IO ()
:
checkUniqueID :: IO Int
第二,在do
表示法中,左箭头<-
是将单子函数的结果绑定到名称的函数。您已经在getLine
中使用了它,所以我不完全确定为什么您也无法在checkUniqueID
中使用它:
taskIDInt <- checkUniqueID