7DBNV3GV773FH5ZLQWFX4RBOS4Q3CIK2RYZNNABY3ZOETYZCXRNQC intervals :: [LogEntry] -> [LogInterval]intervals e = undefined
intervals :: 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
groupBy f = fromListWith (++) . fmap (f &&& pure)
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