English 中文(简体)
无教区例外
原标题:no parse exception
  • 时间:2012-01-16 08:52:17
  •  标签:
  • haskell

我试图逐项排除因阅读功能造成的例外情况:

run :: CurrentData -> IO ()
run current = do
{
    x <- (getCommandFromUser) `E.catch` handler;
    updated <- executeCommand x current;
    run updated;    
} where handler :: E.IOException -> IO Command
    handler e = do putStrLn "wrong command format" >> return (DoNothing);

In this code function getCommandfrom user gets some string from user and then tries to read some data from this string using "read" function

If read fails there is exception thrown:

*** Exception : prelude.read : no parse

and program exits... I can t catch this exception - what is type of this exception???

我还尝试了E.SomeException,而不是E.IOException...。

E is from import Control.Exception As E

问题回答

"what is type of this exception?" The type is ErrorCall, also available from Control.Exception. An ErrorCall is what is thrown when the error function is called. Just change the type of handler and it will work. A last resort to get things working is to catch E.SomeException, but that s almost always the wrong thing to do.





相关问题
Euler Problem in Haskell -- Can Someone Spot My Error

I m trying my hand at Euler Problem 4 in Haskell. It asks for that largest palindrome formed by multiplying two three-digit numbers. The problem was simple enough, and I thought my Haskell-fu was up ...

How does foldr work?

Can anybody explain how does foldr work? Take these examples: Prelude> foldr (-) 54 [10, 11] 53 Prelude> foldr (x y -> (x+y)/2) 54 [12, 4, 10, 6] 12.0 I am confused about these executions....

Efficient queue in Haskell

How can I efficiently implement a list data structure where I can have 2 views to the head and end of the list, that always point to a head a tail of a list without expensive calls to reverse. i.e: ...

Problem detecting cyclic numbers in Haskell

I am doing problem 61 at project Euler and came up with the following code (to test the case they give): p3 n = n*(n+1) `div` 2 p4 n = n*n p5 n = n*(3*n -1) `div` 2 p6 n = n*(2*n -1) p7 n = n*(5*n -3)...

Ways to get the middle of a list in Haskell?

I ve just started learning about Functional Programming, using Haskel. I m slowly getting through Erik Meijer s lectures on Channel 9 (I ve watched the first 4 so far) and in the 4th video Erik ...

haskell grouping problem

group :: Ord a => [(a, [b])] -> [(a, [b])] I want to look up all pairs that have the same fst, and merge them, by appending all the list of bs together where they have the same a and discarding ...

Closest equivalent to subprocess.communicate in Haskell

I want to do a popen() / python s subprocess.communicate from Haskell - start a program, give it stdin, and get its stdout/stderr. What s the most direct / Haskellish way to do this?

热门标签