module Propellor.Types.Val where

import Data.Monoid

import Propellor.Types.Empty

data Val a = Val a | NoVal
	deriving (Eq, Show)

instance Monoid (Val a) where
	mempty = NoVal
	mappend old new = case new of
		NoVal -> old
		_ -> new

instance Empty (Val a) where
	isEmpty NoVal = True
	isEmpty _ = False

fromVal :: Val a -> Maybe a
fromVal (Val a) = Just a
fromVal NoVal = Nothing