hspec-core-2.11.10: src/Test/Hspec/Core/Annotations.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Test.Hspec.Core.Annotations (
Annotations
, setValue
, getValue
) where
import Prelude ()
import Test.Hspec.Core.Compat
import Data.Typeable
import Data.Dynamic
import Data.Map (Map)
import qualified Data.Map as Map
newtype Annotations = Annotations (Map TypeRep Dynamic)
deriving (
#if MIN_VERSION_base(4,11,0)
Semigroup,
#endif
Monoid)
setValue :: Typeable value => value -> Annotations -> Annotations
setValue value (Annotations values) = Annotations $ Map.insert (typeOf value) (toDyn value) values
getValue :: forall value. Typeable value => Annotations -> Maybe value
getValue (Annotations values) = Map.lookup (typeOf (undefined :: value)) values >>= fromDynamic