use "lazy_lists.sml"; fun odometerNextState [] = NONE | odometerNextState (x::xs) = if x = 5 then case odometerNextState xs of NONE => NONE | SOME v => SOME (1::v) else SOME ((x+1)::xs); fun odometerList NONE = LazyNil | odometerList (SOME state) = LazyCons (state, fn () => odometerList (odometerNextState state)); val finiteOdometer = odometerList (SOME [1,1,1,1,1]);