Sketch out the basic data type
Sketch out the evaluation functions
Use a MonadReader interface for getting at the time