data Ġclass ĠMy Date ( val Ġyear : ĠInt , Ġval Ġmonth : ĠInt , Ġval Ġday OfMonth : ĠInt ) Ġ: ĠComparable < My Date > Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( year Ġin Ġ 1 .. 2 0 2 0 Ġ&& Ġmonth Ġin Ġ 1 .. 1 2 Ġ&& Ġday OfMonth Ġin Ġ 1 .. 3 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠMy Date ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis Number : ĠInt Ġ= Ġ 3 6 0 Ġ* Ġthis . year Ġ+ Ġ 1 2 Ġ* Ġthis . month Ġ+ Ġthis . day OfMonth ĊĠĠĠĠĠĠĠ Ġval Ġother Number : ĠInt Ġ= Ġ 3 6 0 Ġ* Ġother . year Ġ+ Ġ 1 2 Ġ* Ġother . month Ġ+ Ġother . day OfMonth ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Number Ġ> Ġother Number Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Number Ġ== Ġother Number Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ fun Ġtest ( date 1 : ĠMy Date , Ġdate 2 : ĠMy Date ) Ġ{ ĊĠĠĠ Ġ// Ġthis Ġcode Ġshould Ġcompile : ĊĠĠĠ Ġprintln ( date 1 Ġ< Ġdate 2 ) Ċ } Ċ