Initial, stack-based impl of time log event reduction.
[?]
Feb 7, 2014, 5:25 AM
7DBNV3GV773FH5ZLQWFX4RBOS4Q3CIK2RYZNNABY3ZOETYZCXRNQCDependencies
- [2]
JUUMYIQEAdd groupBy utility function for use in TimeLog. - [3]
EQXRXRZDChanged to use tasty instead of test-framework - [4]
NVOCQVASInitial failing tests.
Change contents
- replacement in src/Ananke/Interval.hs at line 12
interval s e = if s < e then Just (Interval s e) else Nothinginterval s e = if s < e then Interval s e else Interval e s - replacement in src/Ananke/TimeLog.hs at line 13
import Data.Mapimport Data.Foldable as Fimport Data.Map.Strict as M - edit in src/Ananke/TimeLog.hs at line 26
- 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
data LogInterval = LogInterval { intervalBtcAddr :: BtcAddr, workInterval :: Interval} deriving (Show, Eq) - edit in src/Ananke/TimeLog.hs at line 49
type WorkIndex = Map BtcAddr ([LogEntry], [LogInterval]) - replacement in src/Ananke/TimeLog.hs at line 54
intervals :: [LogEntry] -> [LogInterval]intervals e = undefinedintervals :: Foldable f => f LogEntry -> WorkIndexintervals = F.foldl' appendLogEntry M.emptyappendLogEntry :: WorkIndex -> LogEntry -> WorkIndexappendLogEntry workIndex entry = let acc = reduce $ pushEntry entry workIndexin insert (btcAddr entry) acc workIndex - replacement in src/Ananke/TimeLog.hs at line 61
groupBy f = fromListWith (++) . fmap (f &&& pure)[2.26]pushEntry :: LogEntry -> WorkIndex -> ([LogEntry], [LogInterval])pushEntry entry idx = consLeft entry $ findWithDefault ([], []) (btcAddr entry) idx whereconsLeft 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
, btcAddr, parseBtcAddr - replacement in src/Ananke.hs at line 9
newtype BtcAddr = BtcAddr { address :: T.Text } deriving (Show, Eq)newtype BtcAddr = BtcAddr { address :: T.Text } deriving (Show, Eq, Ord) - replacement in src/Ananke.hs at line 11
btcAddr :: T.Text -> Maybe BtcAddrbtcAddr = Just . BtcAddr -- this will be changed to do validationparseBtcAddr :: T.Text -> Maybe BtcAddrparseBtcAddr = Just . BtcAddr -- this will be changed to do validation