module Graphics.Wayland.Internal.Version (version) where
data VersionInt = MicroInt
| MajorInt
| MinorInt
deriving (Eq,Ord)
instance Enum VersionInt where
succ MicroInt = MajorInt
succ MajorInt = MinorInt
succ MinorInt = error "VersionInt.succ: MinorInt has no successor"
pred MajorInt = MicroInt
pred MinorInt = MajorInt
pred MicroInt = error "VersionInt.pred: MicroInt has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from MinorInt
fromEnum MicroInt = 0
fromEnum MajorInt = 1
fromEnum MinorInt = 4
toEnum 0 = MicroInt
toEnum 1 = MajorInt
toEnum 4 = MinorInt
toEnum unmatched = error ("VersionInt.toEnum: Cannot match " ++ show unmatched)
version = (fromEnum MajorInt, fromEnum MinorInt, fromEnum MicroInt)