trait SensorStatus = { name : [ Char ] ; online_since : TimePoint ; battery_charge : Energy ; battery_capacity : Energy ; min_sampling_period : Duration ; cur_sampling_period : Duration ; max_chunk_size : ℤ ; cur_chunk_size : ℤ ; n_chunk_capacity : ℤ ; n_full_data_chunks : ℤ ; n_empty_data_chunks : ℤ ; } trait DataChunk = { begin : TimePoint ; sampling_period: Duration ; data : [ Temperature ] ; } trait Sensor = { get_status : {} -> SensorStatus ; set_sampling_period : Duration -> (Ok | OutOfRange); pop_data_chunk : {} -> DataChunk ; }