abstract Time = Cat, Numeral ** {

-- Time grammar Abstract syntax. Modified by BB and AR from Karin Cavallin.

-- Dates and times

cat 

DateTime ;

Date ;
Year ;
Month ;
MonthName ;
Day ;

Time ; 
Hour ; 
Minute ; 
Weekday ;

[Dig]{1};

fun

DateTimeDateTime : Date -> Time -> DateTime ;

WeekdayDate      : Weekday -> Date ; -- Monday
MonthDayDate     : MonthName -> Day -> Date ; -- the third of March
MonthDate        : MonthName -> Date ; -- March
YearDate         : Year -> Date ; -- two thousand eight
YearMonthDate    : Year -> MonthName -> Date ; -- March 1995
YearMonthDayDate : Year -> MonthName -> Day -> Date ; -- January 1st, 2006

NumYear    : Numeral -> Year ;
DigYear    : [Dig] -> Year ;

NumMonth   : Sub100 -> Month ;
DigMonth   : [Dig] -> Month ;
NameMonth  : MonthName -> Month ;

NumDay     : Sub100 -> Day ;
DigDay     : [Dig] -> Day ;

FormalTime : Hour -> Minute -> Time ; -- "two twenty"
PastTime   : Hour -> Minute -> Time ; -- "twenty past two"
ToTime     : Hour -> Minute -> Time ; -- "twenty to two"
HourTime   : Hour -> Time ;           -- "two o'clock"
ExactTime  : Hour -> Time ;           -- "sharp"

NumHour     : Numeral -> Hour ;
DigHour     : [Dig] -> Hour ;
NumMinute   : Numeral -> Minute ;
DigMinute   : [Dig] -> Minute ;

fun
january   : MonthName ;
february  : MonthName ;
march     : MonthName ;
april     : MonthName ;
may       : MonthName ;
june      : MonthName ;
july      : MonthName ;
august    : MonthName ;
september : MonthName ;
october   : MonthName ;
november  : MonthName ;
december  : MonthName ;

fun
monday : Weekday ;
tuesday : Weekday ;
wednesday : Weekday ;
thursday : Weekday ;
friday : Weekday ;
saturday : Weekday ;
sunday : Weekday ;

-- Date and time adverbs

fun 
  OnDate     : Date -> Adv ;
  AtTime     : Time -> Adv ;


{-
Add:

era (AD, BC)

twelve hour time (am, pm)

teen-hundred years: "x-teen hundred"

relative weeks: next week, last week, in x weeks, x weeks ago

relative days: today, tomorrow, yesterday, the day before yesterday,
the day after tomorrow, in x days, x days ago

relative time: in x minutes, in x hours

-}

} ;
