Initial, stack-based impl of time log event reduction.

[?]
Feb 7, 2014, 5:25 AM
7DBNV3GV773FH5ZLQWFX4RBOS4Q3CIK2RYZNNABY3ZOETYZCXRNQC

Dependencies

  • [2] JUUMYIQE Add groupBy utility function for use in TimeLog.
  • [3] EQXRXRZD Changed to use tasty instead of test-framework
  • [4] NVOCQVAS Initial failing tests.

Change contents

  • replacement in src/Ananke/Interval.hs at line 12
    [3.1682][3.1682:1744]()
    interval s e = if s < e then Just (Interval s e) else Nothing
    [3.1682]
    [3.1744]
    interval s e = if s < e then Interval s e else Interval e s
  • replacement in src/Ananke/TimeLog.hs at line 13
    [3.1808][4.1012:1028](),[4.1012][4.1012:1028]()
    import Data.Map
    [3.1808]
    [4.1028]
    import Data.Foldable as F
    import Data.Map.Strict as M
  • edit in src/Ananke/TimeLog.hs at line 26
    [4.1361][4.1361:1362]()
  • edit in src/Ananke/TimeLog.hs at line 38
    [4.1910][4.1910:1971](),[4.1971][3.1809:1863](),[3.1863][4.2069:2123](),[4.2069][4.2069:2123]()
    data LogInterval = LogInterval { intervalBtcAddr :: BtcAddr
    , interval :: Interval
    } deriving (Show, Eq)
  • edit in src/Ananke/TimeLog.hs at line 45
    [4.2286]
    [4.2286]
    data LogInterval = LogInterval { intervalBtcAddr :: BtcAddr
    , workInterval :: Interval
    } deriving (Show, Eq)
  • edit in src/Ananke/TimeLog.hs at line 49
    [4.2287]
    [4.2287]
    type WorkIndex = Map BtcAddr ([LogEntry], [LogInterval])
  • replacement in src/Ananke/TimeLog.hs at line 54
    [4.2354][4.2354:2419]()
    intervals :: [LogEntry] -> [LogInterval]
    intervals e = undefined
    [4.2354]
    [2.25]
    intervals :: Foldable f => f LogEntry -> WorkIndex
    intervals = F.foldl' appendLogEntry M.empty
    appendLogEntry :: WorkIndex -> LogEntry -> WorkIndex
    appendLogEntry workIndex entry = let acc = reduce $ pushEntry entry workIndex
    in insert (btcAddr entry) acc workIndex
  • replacement in src/Ananke/TimeLog.hs at line 61
    [2.26][2.26:76]()
    groupBy f = fromListWith (++) . fmap (f &&& pure)
    [2.26]
    pushEntry :: LogEntry -> WorkIndex -> ([LogEntry], [LogInterval])
    pushEntry entry idx = consLeft entry $ findWithDefault ([], []) (btcAddr entry) idx where
    consLeft a (ex, ix) = (a : ex, ix)
    reduce :: ([LogEntry], [LogInterval]) -> ([LogEntry], [LogInterval])
    reduce ((LogEntry addr end StopWork) : (LogEntry _ start StartWork) : xs, intervals) = (xs, (LogInterval addr (interval start end)) : intervals)
    reduce other = other
  • replacement in src/Ananke.hs at line 3
    [4.2493][4.2493:2505]()
    , btcAddr
    [4.2493]
    [4.2505]
    , parseBtcAddr
  • replacement in src/Ananke.hs at line 9
    [4.2593][4.2593:2661]()
    newtype BtcAddr = BtcAddr { address :: T.Text } deriving (Show, Eq)
    [4.2593]
    [4.2661]
    newtype BtcAddr = BtcAddr { address :: T.Text } deriving (Show, Eq, Ord)
  • replacement in src/Ananke.hs at line 11
    [4.2662][4.2662:2763]()
    btcAddr :: T.Text -> Maybe BtcAddr
    btcAddr = Just . BtcAddr -- this will be changed to do validation
    [4.2662]
    [4.2763]
    parseBtcAddr :: T.Text -> Maybe BtcAddr
    parseBtcAddr = Just . BtcAddr -- this will be changed to do validation