Provide witness for the sum-type structure of GenericResult
authorKlaus Aehlig <aehlig@google.com>
Fri, 14 Jun 2013 13:47:55 +0000 (15:47 +0200)
committerKlaus Aehlig <aehlig@google.com>
Mon, 17 Jun 2013 14:36:27 +0000 (16:36 +0200)
GenericResult, while rightfully a type of its own, is isomorphic
to Either. So, also provide the case analysis function (i.e., the
universal arrow out of the sum).

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>

src/Ganeti/BasicTypes.hs

index 3d935c2..f7b024b 100644 (file)
@@ -23,6 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 module Ganeti.BasicTypes
   ( GenericResult(..)
+  , genericResult
   , Result
   , ResultT(..)
   , resultT
@@ -53,6 +54,11 @@ data GenericResult a b
   | Ok b
     deriving (Show, Eq)
 
+-- | Sum type structure of GenericResult.
+genericResult :: (a -> c) -> (b -> c) -> GenericResult a b -> c
+genericResult f _ (Bad a) = f a
+genericResult _ g (Ok b) = g b
+
 -- | Type alias for a string Result.
 type Result = GenericResult String