Add uncommitted files
This commit is contained in:
parent
8c9de5cd8b
commit
59b2d64a3c
3 changed files with 103 additions and 0 deletions
24
plan.txt
Normal file
24
plan.txt
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
normal task
|
||||
- | x(completion date)
|
||||
(priority)
|
||||
(due date)
|
||||
(creation date)
|
||||
description
|
||||
|
||||
delayed task
|
||||
(start date)
|
||||
(priority)
|
||||
(due date)
|
||||
(creation date)
|
||||
description
|
||||
|
||||
on update:
|
||||
if after start date:
|
||||
turn into normal task
|
||||
|
||||
formula task
|
||||
(when formula)
|
||||
(priority)
|
||||
(due date)
|
||||
|
||||
"update":
|
||||
72
src/TaskMachine/History.hs
Normal file
72
src/TaskMachine/History.hs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
-- | An undo-redo history that keeps a copy of every state.
|
||||
|
||||
module TaskMachine.History
|
||||
( History
|
||||
, history
|
||||
, step
|
||||
, current
|
||||
, modify
|
||||
, undo
|
||||
, maybeUndo
|
||||
, redo
|
||||
, maybeRedo
|
||||
) where
|
||||
|
||||
data Step a b = Step a b
|
||||
|
||||
-- | Represents the history (only one branch) of some type @a@.
|
||||
--
|
||||
-- Contains backwards (ctrl+z) as well as forwards (ctrl+y or ctrl+shift+z) history,
|
||||
-- as well as the current state.
|
||||
data History a b = History [Step a b] a [Step a b]
|
||||
|
||||
-- | Create a new 'History' from a single state.
|
||||
history :: a -> History a b
|
||||
history a = History [] a []
|
||||
|
||||
-- | Add a new step to the history.
|
||||
--
|
||||
-- Any forwards history will be overwritten, as this action starts a new
|
||||
-- branch in the history tree.
|
||||
step :: a -> b -> History a b -> History a b
|
||||
step a (History xs y _) = History (Step y b : xs) a []
|
||||
|
||||
-- | Read the current state of the history.
|
||||
current :: History a -> b -> a
|
||||
current (History _ a _) = a
|
||||
|
||||
{-
|
||||
-- | Modify the current state, adding a step in the process.
|
||||
--
|
||||
-- @'modify' f h = 'step' (f $ 'current' h) h@
|
||||
modify :: (a -> a) -> History a -> History a -- not a functor!
|
||||
modify f h = step (f $ current h) h
|
||||
-}
|
||||
|
||||
-- | Jump to the previous state, remembering the future for later redos.
|
||||
--
|
||||
-- If there is no previous state, do nothing.
|
||||
undo :: History a b -> Maybe (History a b, b)
|
||||
undo (History (Step x b : xs) y zs) = Just (History xs x (Step y b : zs), b)
|
||||
undo _ = Nothing
|
||||
|
||||
{-
|
||||
-- | Like 'undo', but returns 'Nothing' if there was no previous state.
|
||||
maybeUndo :: History a -> Maybe (History a)
|
||||
maybeUndo (History (x:xs) y zs) = Just $ History xs x (y:zs)
|
||||
maybeUndo _ = Nothing
|
||||
-}
|
||||
|
||||
-- | Jump to the next state, remembering the past for later undos.
|
||||
--
|
||||
-- If there is no next state, do nothing.
|
||||
redo :: History a b -> Maybe (History a b, b)
|
||||
redo (History xs y (Step z b : zs)) = Just (History (Step y b : xs) z zs, b)
|
||||
redo _ = Nothing
|
||||
|
||||
{-
|
||||
-- | Like 'redo', but returns 'Nothing' if there was no next state.
|
||||
maybeRedo :: History a -> Maybe (History a)
|
||||
maybeRedo (History xs y (z:zs)) = Just $ History (y:xs) z zs
|
||||
maybeRedo _ = Nothing
|
||||
-}
|
||||
7
test.txt
Normal file
7
test.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
- A simple task
|
||||
x A simple completed task
|
||||
|
||||
- c2018-12-13 A simple task with creation date
|
||||
|
||||
s2018-12-20 d2018-12-24 A task with start date
|
||||
-2018-12-20 d2018-12-24 A task with alternate start date
|
||||
Loading…
Add table
Add a link
Reference in a new issue