-- | History
data History a = History { past :: NonEmpty a , future :: [a] }
-- step backwards in time
History (p :| ps) (m:f)
before h = h
-- step forwards in time
History (m <| p) f
after h = h
-- go to present
h
ultimate h = ultimate $ after h
-- get current
m
-- record moment
History (m <| p) f