]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/Usernames.hs
Create a Usernames newtype to fix an orphan instance.
[dead/halcyon.git] / src / Usernames.hs
diff --git a/src/Usernames.hs b/src/Usernames.hs
new file mode 100644 (file)
index 0000000..6f2fb28
--- /dev/null
@@ -0,0 +1,34 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+
+-- | A newtype around a list of Strings which represent the usernames
+--   to watch. This is all to avoid an orphan instance of Configured
+--   for [String] if we had defined one in e.g. OptionalConfiguration.
+--
+module Usernames
+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
+import Data.Data (Data)
+import System.Console.CmdArgs.Default (Default(..))
+import Data.Typeable (Typeable)
+
+
+newtype Usernames =
+  Usernames { get_usernames :: [String] }
+    deriving (Data, Show, Typeable)
+
+
+instance Default Usernames where
+  def = Usernames []
+
+
+instance DCT.Configured Usernames where
+  convert (DCT.List xs) =
+    fmap Usernames (mapM convert_string xs)
+    where
+      convert_string :: DCT.Value -> Maybe String
+      convert_string = DCT.convert
+
+  convert _ = Nothing