我正在使用以下haskell代码来捕获错误,而使用getLine在int中读取'read'。调用CheckInt函数时,我遇到类型不匹配错误。请告诉我在哪里修改类型。
import System.Exit
import Control.Exception
funSeq n = do
if (n<4) then 1 else floor $ (fromIntegral (funSeq (n-1) + funSeq (n-2))) * ((fromIntegral.funSeq) (n-3) / (fromIntegral.funSeq) (n-4))
myFunc ('N':'T':'H':' ': restOfString) = do
checkInt restOfString
let num = (read restOfString :: Int)
if (num < 0) then showError else print (funSeq (num))
main = do
putStrLn "Enter the code: "
code <- getLine
myFunc code
main
checkInt :: String -> IO ()
checkInt str = catch (seq (read str :: Int) $ return ()) showError
showError :: SomeException -> IO ()
showError _ = do
putStrLn("ERR")
exitSuccess
答案 0 :(得分:2)
可能还有其他错误,但以下内容向我发出:
showError :: SomeException -> IO ()
myFunc ... = do
...
if ... then showError else ...
由于showError
是一个函数,你可能应该在这里给它一个参数。