java-bridge-0.20130602: src/Foreign/Java/Value.hs
{-# LANGUAGE Haskell2010 #-}
{-# OPTIONS
-Wall
-fno-warn-name-shadowing
#-}
-- |
-- Module : Foreign.Java.Value
-- Copyright : (c) Julian Fleischer 2013
-- License : MIT (See LICENSE file in cabal package)
--
-- Maintainer : julian.fleischer@fu-berlin.de
-- Stability : provisional
-- Portability : portable (Haskell2010)
--
-- The ternary value type, which can /treither/ hold a value,
-- nothing, or a special value describing an error condition.
module Foreign.Java.Value where
-- | A ternary value type to hold one of two possible value types
-- or none at all.
data Value e a
= Value a -- ^ An actual value
| NoValue -- ^ No value
| Fail e -- ^ A value describing the error
-- | fold on a 'Value', like 'either' for 'Either' or 'maybe' for 'Maybe'.
value :: b -- ^ default value if neither a value nor a fail value is given
-> (e -> b) -- ^ function to handle a fail value
-> (a -> b) -- ^ function to handle an actual value
-> Value e a -- ^ the value
-> b -- ^ the final return value
value noValue fail success value = case value of
(Value a) -> success a
(Fail e) -> fail e
_ -> noValue