From 5b76347008ba482c0e82db7f99a6aa1b23e13032 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Fri, 16 Oct 2009 09:41:29 +0200 Subject: [PATCH] Move some utility functions to Utils.hs These were already duplicate (Text and Simu) and we need tryRead in more places. --- Ganeti/HTools/Simu.hs | 12 ------------ Ganeti/HTools/Text.hs | 12 ------------ Ganeti/HTools/Utils.hs | 15 +++++++++++++++ 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/Ganeti/HTools/Simu.hs b/Ganeti/HTools/Simu.hs index 29bf6ff94..07656b464 100644 --- a/Ganeti/HTools/Simu.hs +++ b/Ganeti/HTools/Simu.hs @@ -38,18 +38,6 @@ import Ganeti.HTools.Types import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance --- | Parse results from readsPrec -parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a -parseChoices _ _ ((v, ""):[]) = return v -parseChoices name s ((_, e):[]) = - fail $ name ++ ": leftover characters when parsing '" - ++ s ++ "': '" ++ e ++ "'" -parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" - --- | Safe 'read' function returning data encapsulated in a Result. -tryRead :: (Monad m, Read a) => String -> String -> m a -tryRead name s = parseChoices name s $ reads s - -- | Parse the string description into nodes parseDesc :: String -> Result (Int, Int, Int, Int) parseDesc desc = diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs index aea0c00ed..5fae5aa25 100644 --- a/Ganeti/HTools/Text.hs +++ b/Ganeti/HTools/Text.hs @@ -40,18 +40,6 @@ import Ganeti.HTools.Types import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance --- | Parse results from readsPrec -parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a -parseChoices _ _ ((v, ""):[]) = return v -parseChoices name s ((_, e):[]) = - fail $ name ++ ": leftover characters when parsing '" - ++ s ++ "': '" ++ e ++ "'" -parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" - --- | Safe 'read' function returning data encapsulated in a Result. -tryRead :: (Monad m, Read a) => String -> String -> m a -tryRead name s = parseChoices name s $ reads s - -- | Load a node from a field list. loadNode :: (Monad m) => [String] -> m (String, Node.Node) loadNode (name:tm:nm:fm:td:fd:tc:fo:[]) = do diff --git a/Ganeti/HTools/Utils.hs b/Ganeti/HTools/Utils.hs index 295d6fcc0..2cf8aae2c 100644 --- a/Ganeti/HTools/Utils.hs +++ b/Ganeti/HTools/Utils.hs @@ -34,6 +34,7 @@ module Ganeti.HTools.Utils , asJSObject , asObjectList , fromJResult + , tryRead ) where import Data.List @@ -125,3 +126,17 @@ asJSObject _ = fail "not an object" -- | Coneverts a list of JSON values into a list of JSON objects. asObjectList :: (Monad m) => [J.JSValue] -> m [J.JSObject J.JSValue] asObjectList = mapM asJSObject + +-- * Parsing utility functions + +-- | Parse results from readsPrec +parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a +parseChoices _ _ ((v, ""):[]) = return v +parseChoices name s ((_, e):[]) = + fail $ name ++ ": leftover characters when parsing '" + ++ s ++ "': '" ++ e ++ "'" +parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" + +-- | Safe 'read' function returning data encapsulated in a Result. +tryRead :: (Monad m, Read a) => String -> String -> m a +tryRead name s = parseChoices name s $ reads s -- GitLab