on 3a76afa help sign in
35 lines 1.1 kB history raw
1module TutorialD.Interpreter.DataTypes.Interval where
2import Text.Parsec
3import Text.Parsec.String
4import ProjectM36.Base
5import ProjectM36.DataTypes.Interval ()
6import TutorialD.Interpreter.Base
7import TutorialD.Interpreter.DataTypes.DateTime
8import Data.Interval
9import Data.Time.Clock
11intervalP :: (Ord a) => Parser (Extended a) -> Parser (Interval a)
12intervalP unitP = do
13 lBoundClosed <- string "(" *> return False <|>
14 string "[" *> return True
15 lBound <- unitP
16 reservedOp ","
17 uBound <- unitP
19 uBoundClosed <- string ")" *> return False <|>
20 string "]" *> return True
22 return $ interval (lBound, lBoundClosed) (uBound, uBoundClosed)
24intervalDateTimeUnitP :: Parser (Extended UTCTime)
25intervalDateTimeUnitP = Finite <$> dateTimeStringP <|>
26 (reserved "inf" *> return PosInf) <|>
27 (reserved "-inf" *> return NegInf)
29intervalDateTimeAtomP :: Parser Atom
30intervalDateTimeAtomP = do
31 reserved "interval_datetime("
32 intv <- intervalP intervalDateTimeUnitP
33 reserved ")"
34 return $ Atom intv