{-# OPTIONS_HADDOCK hide #-} -- | -- Copyright: © 2018-2020 IOHK -- License: Apache-2.0 -- -- Provides internal functions relating to verification of invariants. -- module Internal.Invariant ( invariant ) where import Prelude -- | Checks whether or not an invariant holds, by applying the given predicate -- to the given value. -- -- If the invariant does not hold (indicated by the predicate function -- returning 'False'), throws an error with the specified message. -- -- >>> invariant "not empty" [1,2,3] (not . null) -- [1, 2, 3] -- -- >>> invariant "not empty" [] (not . null) -- *** Exception: not empty invariant :: String -- ^ The message -> a -- ^ The value to test -> (a -> Bool) -- ^ The predicate -> a invariant msg a predicate = if predicate a then a else error msg