module Language.Paraiso.Annotation.Boundary
(
Valid(..), NearBoundary(..), Condition(..)
) where
import Data.Dynamic
import Language.Paraiso.Prelude
import Language.Paraiso.Interval
import Language.Paraiso.PiSystem
newtype Valid g = Valid [Interval (NearBoundary g)] deriving (Eq, Show, Typeable)
instance (Ord g) => PiSystem (Valid g) where
empty = error "empty set is undefined for type Valid"
null = const False
intersection (Valid xs) (Valid ys)
| length xs /= length ys = error "length mismatch in merging two Valid"
| otherwise = Valid $ zipWith intersection xs ys
data NearBoundary a = NegaInfinity | LowerBoundary a | UpperBoundary a | PosiInfinity
deriving (Eq, Ord, Show, Typeable)
data Condition
= Open
| Cyclic
deriving (Eq, Read, Show)