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