packages feed

vertexenum-0.1.1.0: src/Geometry/VertexEnum/Constraint.hs

{-# LANGUAGE InstanceSigs #-}
module Geometry.VertexEnum.Constraint
  ( Sense (..)
  , Constraint (..)
  , (.>=.)
  , (.<=.)
  , (.>=)
  , (.<=) )
  where
import Geometry.VertexEnum.LinearCombination ( LinearCombination, constant )

data Sense = Gt | Lt
  deriving Eq

instance Show Sense where
  show :: Sense -> String
  show Gt = ">="
  show Lt = "<="

data Constraint a = Constraint (LinearCombination a) Sense (LinearCombination a)

instance Show a => Show (Constraint a) where 
  show :: Constraint a -> String
  show (Constraint lhs sense rhs) = show lhs ++ " " ++ show sense ++ " " ++ show rhs 

(.>=.) :: LinearCombination a -> LinearCombination a -> Constraint a
(.>=.) lhs = Constraint lhs Gt

(.<=.) :: LinearCombination a -> LinearCombination a -> Constraint a
(.<=.) lhs = Constraint lhs Lt

(.>=) :: LinearCombination a -> a -> Constraint a
(.>=) lhs x = (.>=.) lhs (constant x)

(.<=) :: LinearCombination a -> a -> Constraint a
(.<=) lhs x = (.<=.) lhs (constant x)

infix 4 .<=., .>=.