Am 07.02.13 03:37, schrieb Jacob Thomas:
Hello
I'm new to Haskell, and need help with figuring out the Either type... Any example to show how this works?
Maybe a program I wrote a while ago can help you get it.
https://github.com/ctbo/slitherlink
In Slitherlink.hs there is a function readProblem that can fail. It
returns either a String with an error message (Left) or the problem read
(Right).
[...]
readProblem :: String -> Either String Problem
readProblem s = do
            pl <- readProblemList s
            when (null pl) $ Left "Problem is empty."
            let columns = length $ head pl
            when (columns == 0) $ Left "Problem starts with an empty line."
            unless (all ((== columns) . length) pl) $ Left "Problem not
rectangular."
            let rows = length pl
            return $ listArray ((0, 0), (rows-1, columns-1)) $ concat pl
[...]
Or if you don't feel comfortable with using the Either monad, look at
the even simpler function readConstraint a few lines earlier in the same
file.
In the main solve.hs program this is used to output a meaningful error
message to the user if the input file is invalid:
[...]
  where work s n = case readProblem s of
             Left e -> putStrLn e
             Right p -> do
[...do something with the problem p...]
Hope this helps.
Harald
-- 
Harald Bögeholz