预期的类型不匹配haskell

时间:2015-11-16 21:35:42

标签: haskell types try-catch

我正在使用以下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

1 个答案:

答案 0 :(得分:2)

可能还有其他错误,但以下内容向我发出:

showError :: SomeException -> IO ()

myFunc ... = do
    ...
    if ... then showError else ...

由于showError是一个函数,你可能应该在这里给它一个参数。