schematic-0.5.0.0: src/Data/Schematic/Verifier/Common.hs
module Data.Schematic.Verifier.Common where
import Data.List (nub)
simplifyNumberConstraint :: ([Integer] -> Integer) -> [Integer] -> Maybe Integer
simplifyNumberConstraint f =
\case
[] -> Nothing
x -> Just $ f x
simplifyDNLs :: [Integer] -> Maybe Integer
simplifyDNLs = simplifyNumberConstraint minimum
simplifyDNGs :: [Integer] -> Maybe Integer
simplifyDNGs = simplifyNumberConstraint maximum
verifyDNEq :: [Integer] -> Maybe (Maybe Integer)
verifyDNEq x =
case nub x of
[] -> Just Nothing
[y] -> Just $ Just y
(_:_:_) -> Nothing
verify3 :: Maybe Integer -> Maybe Integer -> Maybe Integer -> Maybe ()
verify3 (Just x) (Just y) (Just z) =
if x < y && y < z
then Just ()
else Nothing
verify3 _ _ _ = Just ()
verify2 :: Maybe Integer -> Maybe Integer -> Maybe ()
verify2 (Just x) (Just y) =
if x < y
then Just ()
else Nothing
verify2 _ _ = Just ()
verifyEquations :: Maybe Integer -> Maybe Integer -> Maybe Integer -> Maybe ()
verifyEquations mgt meq mlt = do
verify3 mgt meq mlt
verify2 mgt meq
verify2 meq mlt
verify2 mgt mlt