]> gitweb.michael.orlitzky.com - dead/harbl.git/blobdiff - harbl-cli/src/Lists.hs
Clean up the configurator code in the CLI app.
[dead/harbl.git] / harbl-cli / src / Lists.hs
index 8edb167e30685abbd37b777dde3506e19bda7243..d94e85d16abbb797f2a160c0a8e853b13fcfafbb 100644 (file)
@@ -3,45 +3,33 @@
 --   [String] if we had defined one in e.g. 'OptionalConfiguration'.
 --
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
 module Lists ( Lists(..) )
 where
 
--- DC is needed only for the DCT.Configured instance of String.
-import qualified Data.Configurator as DC()
-import qualified Data.Configurator.Types as DCT (
-  Configured,
-  Value( List ),
-  convert )
+import Data.Configurator () -- Needed for predefined instances.
+import Data.Configurator.Types ( Configured(..) )
 import Data.Data ( Data )
+import Data.Monoid ( Monoid )
 import System.Console.CmdArgs.Default ( Default(..) )
 import Data.Typeable ( Typeable )
 
+import Configurator ( convert_newtype_list )
+
 
 -- | A (wrapper around a) list of blacklists.
 --
 newtype Lists =
   Lists { get_lists :: [String] }
-    deriving (Data, Show, Typeable)
+    deriving (Data, Monoid, Show, Typeable)
 
 
 -- | The default list of white/blacklists. It's empty.
 --
 instance Default Lists where def = Lists []
 
-instance DCT.Configured Lists where
+instance Configured Lists where
   -- | This allows us to read a 'Lists' object out of a Configurator
-  --   config file. By default Configurator wouldn't know what to do,
-  --   so we have to tell it that we expect a list, and if that list
-  --   has strings in it, we can apply the Lists constructor to
-  --   it.
-  convert (DCT.List xs) =
-    -- mapM gives us a Maybe [String] here.
-    fmap Lists (mapM convert_string xs)
-    where
-      convert_string :: DCT.Value -> Maybe String
-      convert_string = DCT.convert
-
-  -- If we read anything other than a list of values out of the file,
-  -- fail.
-  convert _ = Nothing
+  --   config file: by default Configurator wouldn't know what to do.
+  convert = convert_newtype_list Lists