Revision 78694255 Ganeti/HTools/Text.hs
b/Ganeti/HTools/Text.hs | ||
---|---|---|
37 | 37 |
import qualified Ganeti.HTools.Node as Node |
38 | 38 |
import qualified Ganeti.HTools.Instance as Instance |
39 | 39 |
|
40 |
-- | Parse results from readsPrec |
|
41 |
parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a |
|
42 |
parseChoices _ _ ((v, ""):[]) = return v |
|
43 |
parseChoices name s ((_, e):[]) = |
|
44 |
fail $ name ++ ": leftover characters when parsing '" |
|
45 |
++ s ++ "': '" ++ e ++ "'" |
|
46 |
parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" |
|
47 |
|
|
40 | 48 |
-- | Safe 'read' function returning data encapsulated in a Result. |
41 | 49 |
tryRead :: (Monad m, Read a) => String -> String -> m a |
42 |
tryRead name s = |
|
43 |
let sols = readsPrec 0 s |
|
44 |
in case sols of |
|
45 |
(v, ""):[] -> return v |
|
46 |
(_, e):[] -> fail $ name ++ ": leftover characters when parsing '" |
|
47 |
++ s ++ "': '" ++ e ++ "'" |
|
48 |
_ -> fail $ name ++ ": cannot parse string '" ++ s ++ "'" |
|
50 |
tryRead name s = parseChoices name s $ readsPrec 0 s |
|
49 | 51 |
|
50 | 52 |
-- | Load a node from a field list. |
51 | 53 |
loadNode :: (Monad m) => [String] -> m (String, Node.Node) |
Also available in: Unified diff