{-# LANGUAGE InstanceSigs #-} module Geometry.VertexEnum.Constraint ( Sense (..) , Constraint (..) , toRationalConstraint , (.>=.) , (.<=.) , (.>=) , (.<=) ) where import Geometry.VertexEnum.LinearCombination ( LinearCombination, constant, toRationalLinearCombination ) data Sense = Gt | Lt deriving Sense -> Sense -> Bool (Sense -> Sense -> Bool) -> (Sense -> Sense -> Bool) -> Eq Sense forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Sense -> Sense -> Bool == :: Sense -> Sense -> Bool $c/= :: Sense -> Sense -> Bool /= :: Sense -> Sense -> Bool Eq instance Show Sense where show :: Sense -> String show :: Sense -> String show Sense Gt = String ">=" show Sense Lt = String "<=" data Constraint a = Constraint (LinearCombination a) Sense (LinearCombination a) toRationalConstraint :: Real a => Constraint a -> Constraint Rational toRationalConstraint :: forall a. Real a => Constraint a -> Constraint Rational toRationalConstraint (Constraint LinearCombination a lhs Sense sense LinearCombination a rhs) = LinearCombination Rational -> Sense -> LinearCombination Rational -> Constraint Rational forall a. LinearCombination a -> Sense -> LinearCombination a -> Constraint a Constraint (LinearCombination a -> LinearCombination Rational forall a. Real a => LinearCombination a -> LinearCombination Rational toRationalLinearCombination LinearCombination a lhs) Sense sense (LinearCombination a -> LinearCombination Rational forall a. Real a => LinearCombination a -> LinearCombination Rational toRationalLinearCombination LinearCombination a rhs) instance Show a => Show (Constraint a) where show :: Constraint a -> String show :: Constraint a -> String show (Constraint LinearCombination a lhs Sense sense LinearCombination a rhs) = LinearCombination a -> String forall a. Show a => a -> String show LinearCombination a lhs String -> ShowS forall a. [a] -> [a] -> [a] ++ String " " String -> ShowS forall a. [a] -> [a] -> [a] ++ Sense -> String forall a. Show a => a -> String show Sense sense String -> ShowS forall a. [a] -> [a] -> [a] ++ String " " String -> ShowS forall a. [a] -> [a] -> [a] ++ LinearCombination a -> String forall a. Show a => a -> String show LinearCombination a rhs (.>=.) :: LinearCombination a -> LinearCombination a -> Constraint a .>=. :: forall a. LinearCombination a -> LinearCombination a -> Constraint a (.>=.) LinearCombination a lhs = LinearCombination a -> Sense -> LinearCombination a -> Constraint a forall a. LinearCombination a -> Sense -> LinearCombination a -> Constraint a Constraint LinearCombination a lhs Sense Gt (.<=.) :: LinearCombination a -> LinearCombination a -> Constraint a .<=. :: forall a. LinearCombination a -> LinearCombination a -> Constraint a (.<=.) LinearCombination a lhs = LinearCombination a -> Sense -> LinearCombination a -> Constraint a forall a. LinearCombination a -> Sense -> LinearCombination a -> Constraint a Constraint LinearCombination a lhs Sense Lt (.>=) :: LinearCombination a -> a -> Constraint a .>= :: forall a. LinearCombination a -> a -> Constraint a (.>=) LinearCombination a lhs a x = LinearCombination a -> LinearCombination a -> Constraint a forall a. LinearCombination a -> LinearCombination a -> Constraint a (.>=.) LinearCombination a lhs (a -> LinearCombination a forall a. a -> LinearCombination a constant a x) (.<=) :: LinearCombination a -> a -> Constraint a .<= :: forall a. LinearCombination a -> a -> Constraint a (.<=) LinearCombination a lhs a x = LinearCombination a -> LinearCombination a -> Constraint a forall a. LinearCombination a -> LinearCombination a -> Constraint a (.<=.) LinearCombination a lhs (a -> LinearCombination a forall a. a -> LinearCombination a constant a x) infix 4 .<=., .>=., .<=, .>=