我是一个哈克尔假人.我试图请求用户几秒钟,然后显示小时,分钟和秒.这是我的代码:
prompt x = do
putStrLn x
number <- getLine
return number
main = do
number <- prompt " Please input a number: "
seconds <- read number :: Int
let hours = seconds / 3600
remaining_seconds = seconds mod 3600
minutes = remaining_seconds/60
final_seconds = remaining_seconds `rem` 60
putStr (hours)
Run Code Online (Sandbox Code Playgroud)
但是,我有一个错误remaining_seconds = seconds mod 3600.这是错误parse error on input '='
请帮我解决一下.问候,
好的,这里是你需要做的部分,以便编译/运行:
seconds/ read不是IO动作所以使用let/=div而不是/mod 这里需要加入反叛putStr期望String添加show或使用printmodule Main where
prompt x = do
putStrLn x
number <- getLine
return number
main = do
number <- prompt " Please input a number: "
let seconds = read number :: Int
hours = seconds `div` 3600
remaining_seconds = seconds `mod` 3600
minutes = remaining_seconds `div` 60
final_seconds = remaining_seconds `rem` 60
print hours
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我会把它重构成这个:
module Main where
prompt :: String -> IO Int
prompt x = do
putStrLn x
number <- getLine
return $ read number
main :: IO ()
main = do
seconds <- prompt " Please input a number: "
let (minutes,seconds') = seconds `divMod` 60
(hours',minutes') = minutes `divMod` 60
putStrLn $ show hours' ++ ":" ++ show minutes' ++ ":" ++ show seconds'
Run Code Online (Sandbox Code Playgroud)