Reformat via stylish-haskell

[?]
Mar 4, 2016, 4:43 AM
NEDDHXUK3GNFMOFO3KLU7NRIHCTYNWBT3D6HTKZAOXFDE6HMDZ6AC

Dependencies

  • [2] 6L5BK5EH Use generic SMTP rather than Sendmail-specific mail client.
  • [3] MGOF7IUF Update TASKS list to reflect completed projects.
  • [4] KEP5WUFJ Convert project to stack-based build.
  • [5] EKY7U7SK Finish conversion to stack.
  • [6] 4QX5E5AC Initial compilation of payouts function succeeds.
  • [7] WZUHEZSB Start of migration back toward snap.
  • [8] RSEB2NFG Replacing Snap with Scotty.
  • [9] SCXG6TJW Make log reduction safer in presence of overlapping events.
  • [10] OBFPJS2G Project successfully builds and tests under nix.
  • [11] Y35QCWYW Minor improvement in WorkIndex type to eliminate duplicated information.
  • [12] A6HKMINB Attempting to improve JSON handling.
  • [13] 2OIPAQCB Merge branch 'master' of github.com:nuttycom/ananke
  • [14] BROSTG5K Beginning of modularization of server.
  • [15] XTBSG4C7 Adding serveJSON combinator to eliminate some boilerplate from handlers.
  • [16] OV5AKJHA Remove unused LogInterval type.
  • [17] 7HPY3QPF Fix linting errors. (yay hlint!)
  • [18] MWUPXTBF A few steps down a road to be abandoned.
  • [19] HE3JTXO3 Added client call to payouts.
  • [20] GKGVYBZG Added JSON serialization to TimeLog
  • [21] ZITLSTYX Fix problems with SQL queries & depreciation function parsing.
  • [22] MB5SHULB Add route for accepting an invitation with an existing account
  • [23] EMVTF2IW WIP moving back to snap.
  • [24] Z7KS5XHH Very WIP. Wow.
  • [25] 2KZPOGRB Once you get Haskell to compile, the tests pass!
  • [26] EZQG2APB Update task list.
  • [27] M4KM76DG Merge branch 'stackify'
  • [28] Z3M53KTL Adrift.
  • [29] JUUMYIQE Add groupBy utility function for use in TimeLog.
  • [30] 7DBNV3GV Initial, stack-based impl of time log event reduction.
  • [31] 2Y2QZFVF Switch to more modern cabal2nix-based workflow.
  • [32] JV3UEPNC Fix Aeson constructors.
  • [33] TNR3TEHK Switch to Postgres + snaplet arch compiles.
  • [34] 75N3UJ4J More progression toward lenses.
  • [35] 2G3GNDDU Event logging is now functioning in postgres.
  • [36] SPJCFHXW Update shell scripts to point to https://aftok.com and prompt for input.
  • [37] ADMKQQGC Initial empty Snap project.
  • [38] I2KHGVD4 Require project permissions for access to most data.
  • [39] KNSI575V Cleanup of EventLog types.
  • [40] GCVQD44V Create amends endpoint, switch to UUID primary keys
  • [41] 7XN3I3QJ Add 'loggedIntervals' endpoint.
  • [42] 7KZP4RHZ Switch from Data.Time to Data.Thyme
  • [43] A2J7B4SC Initial impl of depreciation function.
  • [44] LD4GLVSF More database stuff.
  • [45] P6NR2CGX Beginning of implementation of depreciation.
  • [46] O5FVTOM6 Undo JSON silliness, enable a couple more routes.
  • [47] N4NDAZYT Initial implementation of payouts.
  • [48] TCOAKCGG Completed conversion to snap.
  • [49] FD7SV5I6 Fix handling of event_t columns.
  • [50] EYGIUUQZ Restore remainder of endpoints to compiling status.
  • [51] 4ZLEDBK7 Initial attempts at dockerizing, cabal isn't cooperating.
  • [52] VJPT6HDR Fix remaining type errors after addition of login handler.
  • [53] 5XFJNUAZ Start of addition of project infrastructure.
  • [54] 64VI73NP Server now compiles using abstracted SQLite
  • [55] LAROLAYU WIP
  • [56] NMWWP4ZN Trying out Hspec
  • [57] PBD7LZYQ Postgres & auth are beginning to function.
  • [58] 5DRIWGLU Improving TimeLog specs
  • [59] 4SCFOJGN Specs for recovering intervals from the log now pass.
  • [60] 2XQD6KKK Add invitation logic and clean up DBProg error handling.
  • [61] EQXRXRZD Changed to use tasty instead of test-framework
  • [62] ZP62WC47 Begin conversion to build with stack.
  • [63] SLL7262C Make depreciation functions more flexible.
  • [64] TJEUE7TY Added OverloadedStrings to eliminate Text fiddling.
  • [65] RPAJLHMT Change to use UUIDs instead of ints for primary keys.
  • [66] W35DDBFY Factor common JSON conversions up into client lib module.
  • [67] NVOCQVAS Initial failing tests.
  • [68] 64C6AWH6 Rename Ananke -> Quixotic, project reboot.
  • [69] IZEVQF62 Work in progress replacing sqlite with postgres.
  • [70] 4U7F3CPI THE GREAT RENAMING OF THINGS!
  • [71] V2VDN77H Enable postgres configuration via environment variable for Heroku.
  • [72] 5W5M56VJ Move library code to 'lib'
  • [73] BXGLKYRX Added primitive user registration handler.
  • [74] TLQ72DSJ Lenses, sqlite-simple
  • [75] QMRKFEPG Refactor QDB to use a free monad algebra instead.
  • [76] WO2MINIF Auctions now compile!
  • [77] 4IQVQL4T Added client for payouts endpoint.

Change contents

  • replacement in lib/Aftok/Auction.hs at line 5
    [6.5192][6.5192:5213](),[6.5213][6.96:116](),[6.21][6.21:43](),[6.43][6.3:20](),[6.20][6.1616:1645]()
    import ClassyPrelude
    import Control.Lens
    import Data.Hourglass
    import Data.UUID
    import Data.Thyme.Clock as C
    [6.5192]
    [6.26]
    import ClassyPrelude
    import Control.Lens
    import Data.Hourglass
    import Data.Thyme.Clock as C
    import Data.UUID
  • replacement in lib/Aftok/Auction.hs at line 11
    [6.27][6.762:775](),[6.775][4.246:265]()
    import Aftok
    import Aftok.Types
    [6.27]
    [6.5213]
    import Aftok
    import Aftok.Types
  • replacement in lib/Aftok/Auction.hs at line 17
    [6.5249][6.5249:5273]()
    data Auction = Auction
    [6.5249]
    [6.266]
    data Auction = Auction
  • replacement in lib/Aftok/Auction.hs at line 19
    [6.294][6.1646:1676](),[4.294][6.1646:1676](),[6.141][6.1646:1676]()
    , _auctionEnd :: C.UTCTime
    [6.294]
    [6.5319]
    , _auctionEnd :: C.UTCTime
  • replacement in lib/Aftok/Auction.hs at line 35
    [6.146][6.146:162]()
    (<=) b1 b2 =
    [6.146]
    [6.162]
    (<=) b1 b2 =
  • replacement in lib/Aftok/Auction.hs at line 37
    [6.195][6.277:288]()
    where
    [6.195]
    [6.193]
    where
  • replacement in lib/Aftok/Auction.hs at line 44
    [6.369][6.369:397]()
    winningBids auction bids =
    [6.369]
    [6.323]
    winningBids auction bids =
  • replacement in lib/Aftok/Auction.hs at line 48
    [6.538][6.100:165]()
    | total + (x ^. bidAmount) < (auction ^. raiseAmount) =
    [6.538]
    [6.3]
    | total + (x ^. bidAmount) < (auction ^. raiseAmount) =
  • replacement in lib/Aftok/Auction.hs at line 52
    [6.727][6.228:274]()
    | total < (auction ^. raiseAmount) =
    [6.727]
    [6.274]
    | total < (auction ^. raiseAmount) =
  • replacement in lib/Aftok/Auction.hs at line 60
    [6.1106][6.1106:1115]()
    [6.1106]
    [6.1115]
  • replacement in lib/Aftok/Client.hs at line 1
    [6.1][6.2:77]()
    {-# LANGUAGE ScopedTypeVariables, OverloadedStrings, NoImplicitPrelude #-}
    [6.1]
    [6.77]
    {-# LANGUAGE NoImplicitPrelude #-}
    {-# LANGUAGE OverloadedStrings #-}
    {-# LANGUAGE ScopedTypeVariables #-}
  • replacement in lib/Aftok/Client.hs at line 7
    [6.108][6.108:130]()
    import ClassyPrelude
    [6.108]
    [6.130]
    import ClassyPrelude
  • replacement in lib/Aftok/Client.hs at line 9
    [6.131][6.131:151](),[6.151][6.3:27](),[6.27][6.3:43](),[6.151][6.3:43]()
    import Control.Lens
    import Data.Aeson.Types
    import qualified Data.Configurator as C
    [6.131]
    [6.43]
    import Control.Lens
    import Data.Aeson.Types
    import qualified Data.Configurator as C
  • replacement in lib/Aftok/Client.hs at line 13
    [6.90][6.151:171](),[6.151][6.151:171]()
    import Network.Wreq
    [6.90]
    [6.171]
    import Network.Wreq
  • replacement in lib/Aftok/Client.hs at line 15
    [6.172][6.838:877]()
    import Aftok.Json
    import Aftok.TimeLog
    [6.172]
    [6.217]
    import Aftok.Json
    import Aftok.TimeLog
  • replacement in lib/Aftok/Client.hs at line 23
    [6.152][6.152:173](),[6.173][6.902:943]()
    parseQCConfig cfg =
    QCConfig <$> C.require cfg "aftokUrl"
    [6.152]
    [6.298]
    parseQCConfig cfg =
    QCConfig <$> C.require cfg "aftokUrl"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 1
    [6.456][6.73:124]()
    {-# LANGUAGE GADTs, GeneralizedNewtypeDeriving #-}
    [6.456]
    [6.565]
    {-# LANGUAGE GADTs #-}
    {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 6
    [6.672][6.672:713](),[6.713][6.176:202](),[6.202][6.73:117](),[6.713][6.73:117](),[6.117][6.1767:1801](),[6.731][6.118:140](),[6.140][6.731:753](),[6.731][6.731:753](),[6.753][6.4:56](),[6.56][6.141:164](),[6.164][6.786:820](),[6.786][6.786:820](),[6.862][6.862:906](),[6.946][6.946:988]()
    import ClassyPrelude
    import Control.Lens
    import Data.Aeson(toJSON)
    import qualified Data.ByteString.Char8 as B
    import Control.Monad.Trans.Either
    import Data.List as L
    import Data.Hourglass
    import Data.Thyme.Clock as C
    import Data.Thyme.Time
    import Data.UUID(UUID)
    import Database.PostgreSQL.Simple
    import Database.PostgreSQL.Simple.FromField
    import Database.PostgreSQL.Simple.FromRow
    [6.623]
    [6.1011]
    import ClassyPrelude
    import Control.Lens
    import Control.Monad.Trans.Either
    import Data.Aeson (toJSON)
    import qualified Data.ByteString.Char8 as B
    import Data.Hourglass
    import Data.List as L
    import Data.Thyme.Clock as C
    import Data.Thyme.Time
    import Data.UUID (UUID)
    import Database.PostgreSQL.Simple
    import Database.PostgreSQL.Simple.FromField
    import Database.PostgreSQL.Simple.FromRow
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 20
    [6.1012][6.1102:1201](),[6.1201][6.457:476]()
    import Aftok
    import Aftok.Auction
    import Aftok.Database
    import Aftok.Interval
    import Aftok.TimeLog
    import Aftok.Types
    [6.1012]
    [6.1123]
    import Aftok
    import Aftok.Auction
    import Aftok.Database
    import Aftok.Interval
    import Aftok.TimeLog
    import Aftok.Types
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 39
    [6.48][6.48:62](),[6.62][6.95:113]()
    case tn of
    "event_t" ->
    [6.48]
    [6.113]
    case tn of
    "event_t" ->
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 42
    [6.158][6.158:203]()
    (tableOid f)
    [6.158]
    [6.203]
    (tableOid f)
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 47
    [6.469][6.469:479]()
    _ ->
    [6.469]
    [6.479]
    _ ->
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 49
    [6.522][6.522:565]()
    (tableOid f)
    [6.522]
    [6.565]
    (tableOid f)
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 77
    [6.93][6.93:136]()
    utcParser f v = toThyme <$> fromField f v
    [6.93]
    [6.271]
    utcParser f v = toThyme <$> fromField f v
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 80
    [6.278][6.278:336]()
    logEntryParser =
    LogEntry <$> fieldWith btcAddrParser
    [6.278]
    [6.336]
    logEntryParser =
    LogEntry <$> fieldWith btcAddrParser
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 86
    [6.351][6.468:489](),[6.468][6.468:489]()
    qdbLogEntryParser =
    [6.351]
    [6.352]
    qdbLogEntryParser =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 88
    [6.383][5.63:95]()
    <*> fieldWith uidParser
    [6.383]
    [5.95]
    <*> fieldWith uidParser
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 90
    [5.121][6.614:617](),[4.627][6.614:617](),[6.614][6.614:617]()
    [5.121]
    [6.617]
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 92
    [6.652][6.652:669]()
    auctionParser =
    [6.652]
    [4.628]
    auctionParser =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 97
    [6.752][6.752:862]()
    bidParser =
    Bid <$> fieldWith uidParser
    <*> fieldWith secondsParser
    <*> fieldWith btcParser
    [6.752]
    [6.2179]
    bidParser =
    Bid <$> fieldWith uidParser
    <*> fieldWith secondsParser
    <*> fieldWith btcParser
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 104
    [6.908][6.908:922]()
    userParser =
    [6.908]
    [6.922]
    userParser =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 110
    [6.421][6.1046:1094](),[6.1046][6.1046:1094]()
    qdbUserParser =
    (,) <$> fieldWith uidParser
    [6.421]
    [6.1094]
    qdbUserParser =
    (,) <$> fieldWith uidParser
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 115
    [6.1151][6.1151:1189](),[6.1189][6.2240:2275]()
    projectParser =
    Project <$> field
    <*> fieldWith utcParser
    [6.1151]
    [6.1210]
    projectParser =
    Project <$> field
    <*> fieldWith utcParser
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 122
    [6.2317][6.2317:2337]()
    invitationParser =
    [6.2317]
    [6.2337]
    invitationParser =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 130
    [6.504][6.1286:1337](),[6.1286][6.1286:1337]()
    qdbProjectParser =
    (,) <$> fieldWith pidParser
    [6.504]
    [6.1337]
    qdbProjectParser =
    (,) <$> fieldWith pidParser
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 134
    [6.294][6.1362:1410]()
    pexec :: (ToRow d) => Query -> d -> QDBM Int64
    [6.294]
    [6.505]
    pexec :: (ToRow d) => Query -> d -> QDBM Int64
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 139
    [6.621][6.1466:1527]()
    pinsert :: (ToRow d) => (UUID -> r) -> Query -> d -> QDBM r
    [6.621]
    [6.528]
    pinsert :: (ToRow d) => (UUID -> r) -> Query -> d -> QDBM r
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 156
    [6.608][6.608:680]()
    dbEval (CreateEvent (ProjectId pid) (UserId uid) (LogEntry a e m)) =
    [6.608]
    [6.680]
    dbEval (CreateEvent (ProjectId pid) (UserId uid) (LogEntry a e m)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 160
    [6.840][6.840:862]()
    \RETURNING id"
    [6.840]
    [6.862]
    \RETURNING id"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 168
    [6.1808][6.198:236]()
    dbEval (FindEvent (EventId eid)) =
    [6.1808]
    [6.236]
    dbEval (FindEvent (EventId eid)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 177
    [6.1409][6.1409:1479]()
    \WHERE project_id = ? AND user_id = ? AND event_time <= ?"
    [6.1409]
    [6.2802]
    \WHERE project_id = ? AND user_id = ? AND event_time <= ?"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 182
    [6.1684][6.1684:1737]()
    \AND event_time >= ? AND event_time <= ?"
    [6.1684]
    [6.2837]
    \AND event_time >= ? AND event_time <= ?"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 186
    [6.1901][6.1901:1971]()
    \WHERE project_id = ? AND user_id = ? AND event_time >= ?"
    [6.1901]
    [6.2885]
    \WHERE project_id = ? AND user_id = ? AND event_time >= ?"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 190
    [6.1084][6.2035:2092]()
    dbEval (AmendEvent (EventId eid) (TimeChange mt t)) =
    [6.1084]
    [6.2092]
    dbEval (AmendEvent (EventId eid) (TimeChange mt t)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 195
    [6.1952][6.2277:2340]()
    dbEval (AmendEvent (EventId eid) (AddressChange mt addr)) =
    [6.1952]
    [6.2340]
    dbEval (AmendEvent (EventId eid) (AddressChange mt addr)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 199
    [6.376][6.2154:2157](),[6.2527][6.2154:2157](),[6.2154][6.2154:2157](),[6.2157][6.2528:2589]()
    dbEval (AmendEvent (EventId eid) (MetadataChange mt v)) =
    [6.2527]
    [6.2589]
    dbEval (AmendEvent (EventId eid) (MetadataChange mt v)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 207
    [6.2839][6.2839:2942]()
    "SELECT btc_addr, event_type, event_time, event_metadata FROM work_events WHERE project_id = ?"
    [6.2839]
    [6.433]
    "SELECT btc_addr, event_type, event_time, event_metadata FROM work_events WHERE project_id = ?"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 211
    [6.4862][6.2999:3035]()
    dbEval (CreateAuction pid auc) =
    [6.4862]
    [6.3035]
    dbEval (CreateAuction pid auc) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 217
    [6.5183][6.542:574]()
    dbEval (FindAuction aucId) =
    [6.5183]
    [6.574]
    dbEval (FindAuction aucId) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 219
    [6.611][6.3311:3377](),[6.3311][6.3311:3377]()
    "SELECT raise_amount, end_time FROM auctions WHERE id = ?"
    [6.611]
    [6.3377]
    "SELECT raise_amount, end_time FROM auctions WHERE id = ?"
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 222
    [6.5425][6.3441:3487]()
    dbEval (CreateBid (AuctionId aucId) bid) =
    [6.5425]
    [6.3487]
    dbEval (CreateBid (AuctionId aucId) bid) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 226
    [6.3634][6.3634:3649]()
    ( aucId
    [6.3634]
    [6.3649]
    ( aucId
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 233
    [6.5525][6.3800:3829]()
    dbEval (ReadBids aucId) =
    [6.5525]
    [6.3829]
    dbEval (ReadBids aucId) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 238
    [6.668][6.3977:4008]()
    dbEval (CreateUser user') =
    [6.668]
    [6.4008]
    dbEval (CreateUser user') =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 243
    [6.705][6.648:684]()
    dbEval (FindUser (UserId uid)) =
    [6.705]
    [6.684]
    dbEval (FindUser (UserId uid)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 248
    [6.1369][6.719:761]()
    dbEval (FindUserByName (UserName h)) =
    [6.1369]
    [6.761]
    dbEval (FindUserByName (UserName h)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 261
    [6.3742][6.799:831]()
    dbEval (FindInvitation ic) =
    [6.3742]
    [6.831]
    dbEval (FindInvitation ic) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 278
    [6.4291][6.4566:4596](),[6.3742][6.4566:4596]()
    dbEval (CreateProject p) =
    [6.4291]
    [6.4596]
    dbEval (CreateProject p) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 284
    [6.947][6.872:914]()
    dbEval (FindProject (ProjectId pid)) =
    [6.947]
    [6.914]
    dbEval (FindProject (ProjectId pid)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 289
    [6.1014][6.5055:5099]()
    dbEval (FindUserProjects (UserId uid)) =
    [6.1014]
    [6.5099]
    dbEval (FindUserProjects (UserId uid)) =
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 293
    [6.284][6.284:315]()
    \WHERE pc.user_id = ? \
    [6.284]
    [6.315]
    \WHERE pc.user_id = ? \
  • replacement in lib/Aftok/Database/PostgreSQL.hs at line 297
    [6.1043][6.952:1006]()
    dbEval (AddUserToProject pid current new) = void $
    [6.1043]
    [6.1006]
    dbEval (AddUserToProject pid current new) = void $
  • replacement in lib/Aftok/Interval.hs at line 3
    [6.465][6.1586:1609]()
    module Aftok.Interval
    [6.465]
    [6.3]
    module Aftok.Interval
  • replacement in lib/Aftok/Interval.hs at line 10
    [6.1494][6.466:487]()
    import ClassyPrelude
    [6.1494]
    [6.1726]
    import ClassyPrelude
  • replacement in lib/Aftok/Interval.hs at line 12
    [6.1727][6.3229:3285](),[6.3285][6.422:446](),[6.446][6.3285:3309](),[6.3285][6.3285:3309](),[6.3309][6.447:539]()
    import Control.Lens(makeLenses, (^.))
    import Data.Aeson
    import Data.AffineSpace
    import Data.Aeson.Types
    import Data.Thyme.Clock as C
    import Data.Thyme.LocalTime()
    import Data.Thyme.Format.Aeson()
    [6.1727]
    [6.1544]
    import Control.Lens (makeLenses, (^.))
    import Data.Aeson
    import Data.Aeson.Types
    import Data.AffineSpace
    import Data.Thyme.Clock as C
    import Data.Thyme.Format.Aeson ()
    import Data.Thyme.LocalTime ()
  • replacement in lib/Aftok/Interval.hs at line 21
    [6.587][6.587:635]()
    , _end :: C.UTCTime
    [6.587]
    [6.78]
    , _end :: C.UTCTime
  • replacement in lib/Aftok/Interval.hs at line 24
    [6.1361][6.1361:1410]()
    data Interval' = Before { _end' :: C.UTCTime }
    [6.1361]
    [6.1410]
    data Interval' = Before { _end' :: C.UTCTime }
  • replacement in lib/Aftok/Interval.hs at line 28
    [6.130][6.1840:1887](),[6.1529][6.1840:1887](),[6.1681][6.1840:1887]()
    makeLenses ''Interval
    [6.1529]
    [6.1530]
    makeLenses ''Interval
  • edit in lib/Aftok/TimeLog.hs at line 1
    [6.3497][6.3497:3530]()
    {-# LANGUAGE TemplateHaskell #-}
  • edit in lib/Aftok/TimeLog.hs at line 2
    [6.443]
    [6.883]
    {-# LANGUAGE TemplateHaskell #-}
  • replacement in lib/Aftok/TimeLog.hs at line 4
    [6.884][6.1783:1805]()
    module Aftok.TimeLog
    [6.884]
    [6.907]
    module Aftok.TimeLog
  • replacement in lib/Aftok/TimeLog.hs at line 20
    [6.998][6.565:586]()
    import ClassyPrelude
    [6.998]
    [6.586]
    import ClassyPrelude
  • replacement in lib/Aftok/TimeLog.hs at line 22
    [6.587][6.3636:3656](),[6.3656][6.757:783](),[6.783][6.3855:3878](),[6.3656][6.3855:3878](),[6.5660][6.784:808](),[6.808][6.6624:6650](),[6.6650][6.41:94](),[6.808][6.41:94](),[6.91][6.588:617](),[6.617][6.2645:2665](),[6.119][6.2645:2665](),[6.2665][6.809:838](),[6.838][6.6651:6668](),[6.6668][6.838:862](),[6.838][6.838:862]()
    import Control.Lens
    import Data.AdditiveGroup
    import Data.Aeson as A
    import Data.AffineSpace
    import Data.Foldable as F
    import Data.Heap as H
    import Data.List.NonEmpty as L
    import Data.Map.Strict as MS
    import Data.Ratio()
    import Data.Thyme.Clock as C
    import Data.UUID
    import Data.VectorSpace
    [6.587]
    [6.618]
    import Control.Lens
    import Data.AdditiveGroup
    import Data.Aeson as A
    import Data.AffineSpace
    import Data.Foldable as F
    import Data.Heap as H
    import Data.List.NonEmpty as L
    import Data.Map.Strict as MS
    import Data.Ratio ()
    import Data.Thyme.Clock as C
    import Data.UUID
    import Data.VectorSpace
  • replacement in lib/Aftok/TimeLog.hs at line 35
    [6.619][6.1806:1841]()
    import Aftok
    import Aftok.Interval
    [6.619]
    [6.1224]
    import Aftok
    import Aftok.Interval
  • replacement in lib/Aftok/TimeLog.hs at line 58
    [6.432][6.540:566](),[6.1407][6.540:566](),[6.566][6.4189:4213](),[6.4213][6.1758:1784]()
    data LogEntry = LogEntry
    { _btcAddr :: BtcAddr
    , _event :: LogEvent
    [6.432]
    [6.1784]
    data LogEntry = LogEntry
    { _btcAddr :: BtcAddr
    , _event :: LogEvent
  • replacement in lib/Aftok/TimeLog.hs at line 66
    [6.242][6.242:259]()
    compare a b =
    [6.242]
    [6.1817]
    compare a b =
  • replacement in lib/Aftok/TimeLog.hs at line 96
    [6.1201][6.1201:1243]()
    type DepF = C.UTCTime -> Interval -> NDT
    [6.1201]
    [6.2353]
    type DepF = C.UTCTime -> Interval -> NDT
  • replacement in lib/Aftok/TimeLog.hs at line 114
    [6.1819][6.614:652]()
    payouts dep ptime (WorkIndex widx) =
    [6.1819]
    [6.876]
    payouts dep ptime (WorkIndex widx) =
  • replacement in lib/Aftok/TimeLog.hs at line 116
    [6.960][6.1820:1905]()
    addIntervalDiff total ivals = (^+^ total) &&& id $ workCredit dep ptime ivals
    [6.960]
    [6.1011]
    addIntervalDiff total ivals = (^+^ total) &&& id $ workCredit dep ptime ivals
  • replacement in lib/Aftok/TimeLog.hs at line 123
    [6.4396][6.4396:4420]()
    workIndex logEntries =
    [6.4396]
    [6.1403]
    workIndex logEntries =
  • replacement in lib/Aftok/TimeLog.hs at line 127
    [6.845][6.551:600]()
    accum k l m = case nonEmpty (rights l) of
    [6.845]
    [6.600]
    accum k l m = case nonEmpty (rights l) of
  • replacement in lib/Aftok/TimeLog.hs at line 141
    [6.2117][6.2171:2211]()
    appendLogEntry idx (LogEntry k ev _) =
    [6.2117]
    [6.2211]
    appendLogEntry idx (LogEntry k ev _) =
  • replacement in lib/Aftok/TimeLog.hs at line 154
    [6.2858][6.2858:2915]()
    -- because the end of that interval is the same
    [6.2858]
    [6.2915]
    -- because the end of that interval is the same
  • replacement in lib/Aftok/TimeLog.hs at line 170
    [6.9889][6.9889:9933]()
    linearDepreciation undepLength depLength =
    [6.9889]
    [6.2404]
    linearDepreciation undepLength depLength =
  • replacement in lib/Aftok/TimeLog.hs at line 175
    [6.2537][6.9934:10010]()
    maxDepreciable = monthsLength undepLength ^+^ monthsLength depLength
    [6.2537]
    [6.970]
    maxDepreciable = monthsLength undepLength ^+^ monthsLength depLength
  • replacement in lib/Aftok/TimeLog.hs at line 178
    [6.2646][6.489:508](),[6.489][6.489:508]()
    depPct dt =
    [6.2646]
    [6.10011]
    depPct dt =
  • replacement in lib/Aftok/TimeLog.hs at line 182
    [6.558][6.2734:2756]()
    in \ptime ival ->
    [6.558]
    [6.2756]
    in \ptime ival ->
  • replacement in lib/Aftok/Types.hs at line 5
    [4.877][4.877:915]()
    import Data.Word
    import ClassyPrelude
    [4.877]
    [4.915]
    import ClassyPrelude
  • edit in lib/Aftok/Types.hs at line 9
    [4.1031][4.1031:1036]()
  • edit in lib/Aftok/Types.hs at line 10
    [4.1037]
  • replacement in lib/Aftok/Util/Http.hs at line 3
    [6.294][6.294:316]()
    import ClassyPrelude
    [6.294]
    [6.316]
    import ClassyPrelude
  • replacement in lib/Aftok/Util/Http.hs at line 5
    [6.317][6.317:430]()
    import Data.ByteString (split)
    import Data.Attoparsec.ByteString
    import qualified Data.ByteString.Base64 as B64
    [6.317]
    [6.430]
    import Data.Attoparsec.ByteString
    import Data.ByteString (split)
    import qualified Data.ByteString.Base64 as B64
  • replacement in lib/Aftok/Util/Http.hs at line 17
    [6.718][6.718:775]()
    b64 <- string "Basic " *> takeWhile1 isBase64Char
    [6.718]
    [6.775]
    b64 <- string "Basic " *> takeWhile1 isBase64Char
  • replacement in lib/Aftok/Util.hs at line 5
    [6.10116][6.10116:10199]()
    import ClassyPrelude
    import Control.Monad.Free.Church
    import Data.Functor.Coyoneda
    [6.10116]
    [6.10199]
    import ClassyPrelude
    import Control.Monad.Free.Church
    import Data.Functor.Coyoneda
  • replacement in lib/Aftok/Util.hs at line 13
    [6.10362][6.10362:10380]()
    interpret nt p =
    [6.10362]
    [6.10380]
    interpret nt p =
  • replacement in lib/Aftok.hs at line 1
    [6.2457][6.10528:10600]()
    {-# LANGUAGE NoImplicitPrelude, TemplateHaskell, DeriveDataTypeable #-}
    [6.2457]
    [6.1126]
    {-# LANGUAGE DeriveDataTypeable #-}
    {-# LANGUAGE NoImplicitPrelude #-}
    {-# LANGUAGE TemplateHaskell #-}
  • replacement in lib/Aftok.hs at line 7
    [6.2516][6.1128:1149]()
    import ClassyPrelude
    [6.2516]
    [6.2689]
    import ClassyPrelude
  • replacement in lib/Aftok.hs at line 9
    [6.2690][6.10601:10687](),[6.10687][6.6723:6764](),[6.6764][6.10687:10704](),[6.10687][6.10687:10704](),[6.10704][6.6765:6794](),[6.6794][6.2203:2220](),[6.10704][6.2203:2220](),[6.1838][6.2203:2220](),[6.2220][6.6795:6817]()
    import Control.Lens(makePrisms, makeLenses)
    import Data.Aeson
    import Data.Aeson.Types
    import Data.ByteString.Base64.URL as B64
    import Data.Data
    import Data.Thyme.Clock as C
    import Data.UUID
    import OpenSSL.Random
    [6.2690]
    [6.2592]
    import Control.Lens (makeLenses, makePrisms)
    import Data.Aeson
    import Data.Aeson.Types
    import Data.ByteString.Base64.URL as B64
    import Data.Data
    import Data.Thyme.Clock as C
    import Data.UUID
    import OpenSSL.Random
  • replacement in lib/Aftok.hs at line 24
    [6.10706][6.10706:10739]()
    newtype Months = Months Integer
    [6.10706]
    [6.10739]
    newtype Months = Months Integer
  • replacement in lib/Aftok.hs at line 40
    [6.2885][6.2885:2911]()
    { _username :: UserName
    [6.2885]
    [6.2911]
    { _username :: UserName
  • replacement in lib/Aftok.hs at line 42
    [6.2939][6.6886:6910]()
    , _userEmail :: Email
    [6.2939]
    [6.2962]
    , _userEmail :: Email
  • replacement in lib/Aftok.hs at line 51
    [6.3088][6.6936:6968]()
    { _projectName :: ProjectName
    [6.3088]
    [6.6968]
    { _projectName :: ProjectName
  • replacement in lib/Aftok.hs at line 53
    [6.7000][6.3143:3168](),[6.3143][6.3143:3168](),[6.3168][6.10879:10913]()
    , _initiator :: UserId
    , _depf :: DepreciationFunction
    [6.7000]
    [6.3168]
    , _initiator :: UserId
    , _depf :: DepreciationFunction
  • replacement in lib/Aftok.hs at line 74
    [6.7512][6.7512:7625]()
    data Invitation = Invitation
    { _projectId :: ProjectId
    , _invitingUser :: UserId
    , _invitedEmail :: Email
    [6.7512]
    [6.7625]
    data Invitation = Invitation
    { _projectId :: ProjectId
    , _invitingUser :: UserId
    , _invitedEmail :: Email
  • replacement in lib/Aftok.hs at line 98
    [6.11404][6.11404:11435]()
    "LinearDepreciation" ->
    [6.11404]
    [6.11435]
    "LinearDepreciation" ->
  • replacement in server/Aftok/QConfig.hs at line 3
    [6.4529][6.4529:4551]()
    import ClassyPrelude
    [6.4529]
    [6.4551]
    import ClassyPrelude
  • replacement in server/Aftok/QConfig.hs at line 5
    [6.4552][6.4552:4683](),[6.4683][2.265:346](),[2.346][6.4683:4709](),[6.7776][6.4683:4709](),[6.4683][6.4683:4709](),[6.4709][6.7777:7805]()
    import qualified Data.ByteString.Char8 as C
    import qualified Data.Configurator as C
    import qualified Data.Configurator.Types as CT
    import qualified Network.Socket as NS
    import qualified Network.Mail.SMTP as SMTP
    import System.Environment
    import System.IO (FilePath)
    [6.4552]
    [6.4736]
    import qualified Data.ByteString.Char8 as C
    import qualified Data.Configurator as C
    import qualified Data.Configurator.Types as CT
    import qualified Network.Mail.SMTP as SMTP
    import qualified Network.Socket as NS
    import System.Environment
    import System.IO (FilePath)
  • replacement in server/Aftok/QConfig.hs at line 13
    [6.4737][6.4737:4838]()
    import Snap.Core
    import Snap.Snaplet.PostgresqlSimple
    import qualified Snap.Http.Server.Config as SC
    [6.4737]
    [6.4838]
    import Snap.Core
    import qualified Snap.Http.Server.Config as SC
    import Snap.Snaplet.PostgresqlSimple
  • replacement in server/Aftok/QConfig.hs at line 18
    [6.4863][6.4863:4944]()
    { hostname :: ByteString
    , port :: Int
    , authSiteKey :: System.IO.FilePath
    [6.4863]
    [6.4944]
    { hostname :: ByteString
    , port :: Int
    , authSiteKey :: System.IO.FilePath
  • replacement in server/Aftok/QConfig.hs at line 22
    [6.4975][6.4975:5002](),[6.5002][2.347:376](),[2.376][6.7850:7889](),[6.7850][6.7850:7889](),[6.7889][6.5079:5084](),[6.5079][6.5079:5084]()
    , pgsConfig :: PGSConfig
    , smtpConfig :: SmtpConfig
    , templatePath :: System.IO.FilePath
    }
    [6.4975]
    [2.377]
    , pgsConfig :: PGSConfig
    , smtpConfig :: SmtpConfig
    , templatePath :: System.IO.FilePath
    }
  • replacement in server/Aftok/QConfig.hs at line 27
    [2.378][2.378:408]()
    data SmtpConfig = SmtpConfig
    [2.378]
    [2.408]
    data SmtpConfig = SmtpConfig
  • replacement in server/Aftok/QConfig.hs at line 30
    [2.472][2.472:534]()
    , smtpUser :: SMTP.UserName
    , smtpPass :: SMTP.Password
    [2.472]
    [2.534]
    , smtpUser :: SMTP.UserName
    , smtpPass :: SMTP.Password
  • replacement in server/Aftok/QConfig.hs at line 35
    [6.5133][6.5133:5159]()
    loadQConfig cfgFile = do
    [6.5133]
    [6.5159]
    loadQConfig cfgFile = do
  • replacement in server/Aftok/QConfig.hs at line 37
    [6.5183][6.5183:5221]()
    cfg <- C.load [C.Required cfgFile]
    [6.5183]
    [6.5221]
    cfg <- C.load [C.Required cfgFile]
  • replacement in server/Aftok/QConfig.hs at line 42
    [6.5380][6.5380:5402]()
    readQConfig cfg pc =
    [6.5380]
    [6.5402]
    readQConfig cfg pc =
  • replacement in server/Aftok/QConfig.hs at line 44
    [6.5459][6.5459:5506]()
    <*> C.lookupDefault 8000 cfg "port"
    [6.5459]
    [6.5506]
    <*> C.lookupDefault 8000 cfg "port"
  • replacement in server/Aftok/QConfig.hs at line 46
    [6.5544][6.5544:5588]()
    <*> C.lookup cfg "cookieTimeout"
    [6.5544]
    [6.5588]
    <*> C.lookup cfg "cookieTimeout"
  • replacement in server/Aftok/QConfig.hs at line 52
    [2.618][2.618:640]()
    readSmtpConfig cfg =
    [2.618]
    [2.640]
    readSmtpConfig cfg =
  • replacement in server/Aftok/QConfig.hs at line 59
    [6.5887][6.5887:5966]()
    baseSnapConfig qc =
    SC.setHostname (hostname qc) .
    SC.setPort (port qc)
    [6.5887]
    [6.6085]
    baseSnapConfig qc =
    SC.setHostname (hostname qc) .
    SC.setPort (port qc)
  • replacement in server/Aftok/Snaplet/Auth.hs at line 3
    [6.240][6.240:262]()
    import ClassyPrelude
    [6.240]
    [6.262]
    import ClassyPrelude
  • replacement in server/Aftok/Snaplet/Auth.hs at line 5
    [6.263][6.263:283]()
    import Control.Lens
    [6.263]
    [6.11680]
    import Control.Lens
  • replacement in server/Aftok/Snaplet/Auth.hs at line 7
    [6.11710][6.8173:8267]()
    import Data.UUID(fromASCIIBytes)
    import Data.Attoparsec.ByteString(parseOnly, takeByteString)
    [6.11710]
    [6.423]
    import Data.Attoparsec.ByteString (parseOnly, takeByteString)
    import Data.UUID (fromASCIIBytes)
  • replacement in server/Aftok/Snaplet/Auth.hs at line 10
    [6.424][6.2169:2267]()
    import Aftok
    import Aftok.Database
    import Aftok.Util.Http (authHeaderParser)
    import Aftok.Snaplet
    [6.424]
    [6.489]
    import Aftok
    import Aftok.Database
    import Aftok.Snaplet
    import Aftok.Util.Http (authHeaderParser)
  • replacement in server/Aftok/Snaplet/Auth.hs at line 15
    [6.490][6.490:527]()
    import Snap.Core
    import Snap.Snaplet
    [6.490]
    [6.11711]
    import Snap.Core
    import Snap.Snaplet
  • replacement in server/Aftok/Snaplet/Auth.hs at line 18
    [6.11751][6.564:605](),[6.564][6.564:605]()
    import qualified Snap.Snaplet.Auth as AU
    [6.11751]
    [6.643]
    import qualified Snap.Snaplet.Auth as AU
  • replacement in server/Aftok/Snaplet/Auth.hs at line 20
    [6.1164][6.1164:1209]()
    requireLogin :: Handler App App AU.AuthUser
    [6.644]
    [6.1209]
    requireLogin :: Handler App App AU.AuthUser
  • replacement in server/Aftok/Snaplet/Auth.hs at line 24
    [6.2061][6.1323:1422](),[6.1323][6.1323:1422]()
    (uname, pwd) <- either (throwDenied . AU.AuthError) pure $ parseOnly authHeaderParser rawHeader
    [6.1323]
    [6.1422]
    (uname, pwd) <- either (throwDenied . AU.AuthError) pure $ parseOnly authHeaderParser rawHeader
  • replacement in server/Aftok/Snaplet/Auth.hs at line 28
    [6.1540][6.1540:1602]()
    requireUser :: Handler App App AU.AuthUser
    requireUser = do
    [6.1540]
    [6.1602]
    requireUser :: Handler App App AU.AuthUser
    requireUser = do
  • replacement in server/Aftok/Snaplet/Auth.hs at line 38
    [6.2042][6.2042:2128]()
    Nothing -> snapError 403 "Unable to retrieve user record for authenticated user"
    [6.2042]
    [6.8071]
    Nothing -> snapError 403 "Unable to retrieve user record for authenticated user"
  • replacement in server/Aftok/Snaplet/Auth.hs at line 42
    [6.8315][6.8315:8479]()
    requireProjectId = do
    maybePid <- parseParam "projectId" pidParser
    maybe (snapError 400 "Value of parameter \"projectId\" cannot be parsed as a valid UUID")
    [6.8315]
    [6.8479]
    requireProjectId = do
    maybePid <- parseParam "projectId" pidParser
    maybe (snapError 400 "Value of parameter \"projectId\" cannot be parsed as a valid UUID")
  • replacement in server/Aftok/Snaplet/Auth.hs at line 54
    [6.2616][6.2616:2679]()
    modifyResponse $ (setResponseStatus 401 "Unauthorized") .
    [6.2616]
    [6.2268]
    modifyResponse $ (setResponseStatus 401 "Unauthorized") .
  • replacement in server/Aftok/Snaplet/Users.hs at line 3
    [6.3412][6.2532:2560]()
    module Aftok.Snaplet.Users
    [6.3412]
    [6.3137]
    module Aftok.Snaplet.Users
  • replacement in server/Aftok/Snaplet/Users.hs at line 8
    [6.3487][6.3487:3509]()
    import ClassyPrelude
    [6.3487]
    [6.3509]
    import ClassyPrelude
  • replacement in server/Aftok/Snaplet/Users.hs at line 10
    [6.3510][6.95:115](),[6.142][6.142:165](),[6.165][6.478:500](),[6.500][6.10402:10431](),[6.165][6.10402:10431]()
    import Control.Lens
    import Data.Aeson as A
    import Data.Text as T
    import Data.Thyme.Clock as C
    [6.3510]
    [6.10431]
    import Control.Lens
    import Data.Aeson as A
    import Data.Text as T
    import Data.Thyme.Clock as C
  • replacement in server/Aftok/Snaplet/Users.hs at line 15
    [6.10432][6.2561:2643](),[6.165][6.2561:2643]()
    import Aftok
    import Aftok.Database
    import Aftok.Snaplet
    import Aftok.Snaplet.Auth
    [6.10432]
    [6.3650]
    import Aftok
    import Aftok.Database
    import Aftok.Snaplet
    import Aftok.Snaplet.Auth
  • replacement in server/Aftok/Snaplet/Users.hs at line 20
    [6.3651][6.3651:3729]()
    import Snap.Core
    import Snap.Snaplet
    import qualified Snap.Snaplet.Auth as AU
    [6.3651]
    [6.268]
    import Snap.Core
    import Snap.Snaplet
    import qualified Snap.Snaplet.Auth as AU
  • replacement in server/Aftok/Snaplet/Users.hs at line 25
    [6.12436][6.298:345](),[6.298][6.298:345]()
    { _cuser :: User
    , _password :: ByteString
    [6.12436]
    [6.10433]
    { _cuser :: User
    , _password :: ByteString
  • replacement in server/Aftok/Snaplet/Users.hs at line 32
    [6.12487][6.409:435](),[6.409][6.409:435]()
    parseJSON (Object v) =
    [6.12487]
    [6.10475]
    parseJSON (Object v) =
  • replacement in server/Aftok/Snaplet/Users.hs at line 37
    [6.10652][6.10652:10784]()
    parseInvitationCodes c = either
    (\e -> fail $ "Invitation code was rejected as invalid: " <> e)
    pure
    [6.10652]
    [6.10784]
    parseInvitationCodes c = either
    (\e -> fail $ "Invitation code was rejected as invalid: " <> e)
    pure
  • replacement in server/Aftok/Snaplet/Users.hs at line 60
    [6.3800][6.11293:11344]()
    either throwDenied (\_ -> createQUser) authUser
    [6.3800]
    [6.584]
    either throwDenied (\_ -> createQUser) authUser
  • replacement in server/Aftok/Snaplet/Users.hs at line 66
    [6.714][6.714:737]()
    params <- getParams
    [6.714]
    [6.737]
    params <- getParams
  • replacement in server/Aftok/Snaplet/Users.hs at line 71
    [6.889][6.889:899]()
    either
    [6.889]
    [6.899]
    either
  • replacement in server/Aftok/Snaplet/Users.hs at line 75
    [6.1064][6.1064:1073]()
    [6.1064]
  • replacement in server/Aftok/Snaplet/Util.hs at line 3
    [6.4244][6.4244:4266]()
    import ClassyPrelude
    [6.4244]
    [6.4266]
    import ClassyPrelude
  • replacement in server/Aftok/Snaplet/Util.hs at line 5
    [6.4267][6.4267:4411]()
    import Control.Monad.Trans.Maybe
    import Data.ByteString.Char8 as B
    import Data.Time.ISO8601
    import Data.Thyme.Time
    import Data.Thyme.Clock as C
    [6.4267]
    [6.4411]
    import Control.Monad.Trans.Maybe
    import Data.ByteString.Char8 as B
    import Data.Thyme.Clock as C
    import Data.Thyme.Time
    import Data.Time.ISO8601
  • replacement in server/Aftok/Snaplet/Util.hs at line 11
    [6.4412][6.4412:4429]()
    import Snap.Core
    [6.4412]
    [6.4429]
    import Snap.Core
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 3
    [6.5522][6.5522:5544]()
    import ClassyPrelude
    [6.5522]
    [6.5544]
    import ClassyPrelude
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 5
    [6.5545][6.5545:5565](),[6.5592][6.5592:5625](),[6.5625][6.8148:8194](),[6.8194][6.2995:3024](),[6.5625][6.2995:3024]()
    import Control.Lens
    import qualified Data.Aeson as A
    import Data.Aeson.Types
    import Data.UUID as U
    import Data.Thyme.Clock as C
    [6.5545]
    [6.5641]
    import Control.Lens
    import qualified Data.Aeson as A
    import Data.Aeson.Types
    import Data.Thyme.Clock as C
    import Data.UUID as U
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 11
    [6.5642][6.2782:2878]()
    import Aftok
    import Aftok.Database
    import Aftok.Interval
    import Aftok.Json
    import Aftok.TimeLog
    [6.5642]
    [6.5728]
    import Aftok
    import Aftok.Database
    import Aftok.Interval
    import Aftok.Json
    import Aftok.TimeLog
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 17
    [6.5729][6.2879:2952]()
    import Aftok.Snaplet
    import Aftok.Snaplet.Auth
    import Aftok.Snaplet.Util
    [6.5729]
    [6.5755]
    import Aftok.Snaplet
    import Aftok.Snaplet.Auth
    import Aftok.Snaplet.Util
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 21
    [6.5756][6.5756:5793]()
    import Snap.Core
    import Snap.Snaplet
    [6.5756]
    [6.5830]
    import Snap.Core
    import Snap.Snaplet
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 25
    [6.3219][6.3219:3246]()
    logWorkHandler evCtr = do
    [6.3219]
    [6.12607]
    logWorkHandler evCtr = do
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 32
    [6.6216][6.12657:12673]()
    Nothing ->
    [6.6216]
    [6.12673]
    Nothing ->
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 34
    [6.12756][6.8283:8301](),[6.6308][6.8283:8301]()
    Just addr ->
    [6.12756]
    [6.12757]
    Just addr ->
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 56
    [6.1704][6.3650:3671](),[6.6669][6.3650:3671]()
    payoutsHandler = do
    [6.1704]
    [6.13025]
    payoutsHandler = do
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 59
    [6.13074][6.13074:13122]()
    projectMay <- snapEval $ findProject pid uid
    [6.13074]
    [6.13122]
    projectMay <- snapEval $ findProject pid uid
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 69
    [6.8865][6.8865:8960]()
    eventId <- maybe
    (snapError 400 "eventId parameter is required")
    (pure . EventId)
    [6.8865]
    [6.8960]
    eventId <- maybe
    (snapError 400 "eventId parameter is required")
    (pure . EventId)
  • replacement in server/Aftok/Snaplet/WorkLog.hs at line 75
    [6.9233][6.13340:13350]()
    either
    [6.9233]
    [6.13350]
    either
  • replacement in server/Aftok/Snaplet.hs at line 1
    [6.1088][6.3819:3871]()
    {-# LANGUAGE TemplateHaskell, FlexibleInstances #-}
    [6.1088]
    [6.1158]
    {-# LANGUAGE FlexibleInstances #-}
    {-# LANGUAGE TemplateHaskell #-}
  • replacement in server/Aftok/Snaplet.hs at line 6
    [6.1192][6.1192:1214]()
    import ClassyPrelude
    [6.1192]
    [6.1214]
    import ClassyPrelude
  • replacement in server/Aftok/Snaplet.hs at line 8
    [6.1215][6.1215:1290](),[6.1290][6.11346:11380](),[6.11380][6.9489:9522](),[6.1290][6.9489:9522](),[6.9522][6.11381:11434]()
    import Control.Lens
    import Control.Monad.Reader
    import Control.Monad.State
    import Control.Monad.Trans.Either
    import qualified Data.Aeson as A
    import Data.Attoparsec.ByteString(Parser, parseOnly)
    [6.1215]
    [6.1324]
    import Control.Lens
    import Control.Monad.Reader
    import Control.Monad.State
    import Control.Monad.Trans.Either
    import qualified Data.Aeson as A
    import Data.Attoparsec.ByteString (Parser, parseOnly)
  • replacement in server/Aftok/Snaplet.hs at line 15
    [6.1325][6.11435:11448](),[6.11448][6.3017:3072](),[6.1325][6.3017:3072](),[6.3072][6.13479:13497]()
    import Aftok
    import Aftok.Database
    import Aftok.Database.PostgreSQL
    import Aftok.Util
    [6.1325]
    [6.1432]
    import Aftok
    import Aftok.Database
    import Aftok.Database.PostgreSQL
    import Aftok.Util
  • replacement in server/Aftok/Snaplet.hs at line 20
    [6.1433][6.1433:1576]()
    import Snap.Core
    import Snap.Snaplet
    import Snap.Snaplet.PostgresqlSimple
    import qualified Snap.Snaplet.Auth as AU
    import Snap.Snaplet.Session
    [6.1433]
    [6.1688]
    import Snap.Core
    import Snap.Snaplet
    import qualified Snap.Snaplet.Auth as AU
    import Snap.Snaplet.PostgresqlSimple
    import Snap.Snaplet.Session
  • replacement in server/Aftok/Snaplet.hs at line 26
    [6.1689][6.1689:1705]()
    data App = App
    [6.1689]
    [6.13498]
    data App = App
  • replacement in server/Aftok/Snaplet.hs at line 39
    [6.11621][6.11621:11678]()
    let handleDBError (OpForbidden (UserId uid) reason) =
    [6.11621]
    [6.11678]
    let handleDBError (OpForbidden (UserId uid) reason) =
  • replacement in server/Aftok/Snaplet.hs at line 41
    [6.11748][6.11748:11789]()
    handleDBError (SubjectNotFound) =
    [6.11748]
    [6.11789]
    handleDBError (SubjectNotFound) =
  • replacement in server/Aftok/Snaplet.hs at line 56
    [6.3169][6.3169:3199]()
    getResponse >>= finishWith
    [6.3169]
    [6.11976]
    getResponse >>= finishWith
  • replacement in server/Main.hs at line 3
    [6.1461][6.148:170]()
    import ClassyPrelude
    [6.1461]
    [6.5259]
    import ClassyPrelude
  • replacement in server/Main.hs at line 5
    [6.170][6.593:626](),[6.626][6.1635:1661]()
    import qualified Data.Aeson as A
    import System.Environment
    [6.5260]
    [6.918]
    import qualified Data.Aeson as A
    import System.Environment
  • replacement in server/Main.hs at line 8
    [6.919][6.3095:3134]()
    import Aftok.TimeLog
    import Aftok.Json
    [6.919]
    [6.942]
    import Aftok.Json
    import Aftok.TimeLog
  • replacement in server/Main.hs at line 11
    [6.943][6.6333:6354](),[6.6354][6.3135:3268](),[6.943][6.3135:3268]()
    import Aftok.QConfig
    import Aftok.Snaplet
    import Aftok.Snaplet.Auth
    import Aftok.Snaplet.Users
    import Aftok.Snaplet.WorkLog
    import Aftok.Snaplet.Projects
    [6.943]
    [6.782]
    import Aftok.QConfig
    import Aftok.Snaplet
    import Aftok.Snaplet.Auth
    import Aftok.Snaplet.Projects
    import Aftok.Snaplet.Users
    import Aftok.Snaplet.WorkLog
  • replacement in server/Main.hs at line 18
    [6.783][6.1565:1582](),[6.943][6.1565:1582](),[6.2567][6.1565:1582](),[6.218][6.7662:7682](),[6.7682][6.1189:1226](),[6.1267][6.7707:7758](),[6.7707][6.7707:7758](),[6.7823][6.7823:7874]()
    import Snap.Core
    import Snap.Snaplet
    import Snap.Snaplet.PostgresqlSimple
    import Snap.Snaplet.Auth.Backends.PostgresqlSimple
    import Snap.Snaplet.Session.Backends.CookieSession
    [6.783]
    [6.314]
    import Snap.Core
    import Snap.Snaplet
    import Snap.Snaplet.Auth.Backends.PostgresqlSimple
    import Snap.Snaplet.PostgresqlSimple
    import Snap.Snaplet.Session.Backends.CookieSession
  • replacement in server/Main.hs at line 33
    [6.55][6.8526:8568](),[6.2273][6.8526:8568](),[6.12436][6.8526:8568](),[6.8526][6.8526:8568]()
    sesss <- nestSnaplet "sessions" sess $
    [6.12436]
    [6.12437]
    sesss <- nestSnaplet "sessions" sess $
  • replacement in server/Main.hs at line 54
    [6.2570][3.214:265]()
    addRoutes [ ("login", loginRoute)
    [6.2570]
    [3.265]
    addRoutes [ ("login", loginRoute)
  • replacement in server/Main.hs at line 63
    [6.3049][6.3550:3631]()
    , ("projects/:projectId/logEnd/:btcAddr", logEventRoute StopWork)
    [6.3049]
    [6.3631]
    , ("projects/:projectId/logEnd/:btcAddr", logEventRoute StopWork)
  • replacement in server/Main.hs at line 70
    [6.216][6.8999:9014](),[6.1047][6.8999:9014](),[6.1120][6.8999:9014](),[6.1396][6.8999:9014](),[6.1943][6.8999:9014](),[6.3397][6.8999:9014](),[6.3938][6.8999:9014](),[6.3957][6.8999:9014](),[6.7585][6.8999:9014](),[6.13332][6.8999:9014](),[6.8999][6.8999:9014]()
    ]
    [6.13332]
    [6.13644]
    ]
  • replacement in test/Aftok/TimeLogSpec.hs at line 1
    [6.3665][6.1583:1658]()
    {-# LANGUAGE OverloadedStrings, ScopedTypeVariables, NoImplicitPrelude #-}
    [6.3665]
    [6.3106]
    {-# LANGUAGE NoImplicitPrelude #-}
    {-# LANGUAGE OverloadedStrings #-}
    {-# LANGUAGE ScopedTypeVariables #-}
  • replacement in test/Aftok/TimeLogSpec.hs at line 8
    [6.1660][6.1660:1681]()
    import ClassyPrelude
    [6.1660]
    [6.2656]
    import ClassyPrelude
  • replacement in test/Aftok/TimeLogSpec.hs at line 10
    [6.2657][6.1696:1747](),[6.1747][6.3398:3478](),[6.3478][6.1807:1860](),[6.1807][6.1807:1860]()
    import Control.Lens ((^.))
    import Data.AffineSpace
    import qualified Data.List.NonEmpty as L
    import qualified Data.Map.Strict as M
    import Data.Time.ISO8601
    import Data.Thyme.Time as T
    [6.2657]
    [6.1860]
    import Control.Lens ((^.))
    import Data.AffineSpace
    import qualified Data.List.NonEmpty as L
    import qualified Data.Map.Strict as M
    import Data.Thyme.Time as T
    import Data.Time.ISO8601
  • replacement in test/Aftok/TimeLogSpec.hs at line 17
    [6.1861][6.3553:3615]()
    import Aftok
    import Aftok.Interval as I
    import Aftok.TimeLog
    [6.1861]
    [6.269]
    import Aftok
    import Aftok.Interval as I
    import Aftok.TimeLog
  • replacement in test/Aftok/TimeLogSpec.hs at line 21
    [6.3256][6.3256:3279](),[6.3279][6.1888:1906]()
    import Test.QuickCheck
    import Test.Hspec
    [6.270]
    [6.3279]
    import Test.Hspec
    import Test.QuickCheck
  • replacement in test/Aftok/TimeLogSpec.hs at line 36
    [6.3596][6.52:93](),[6.93][6.3629:3666](),[6.3629][6.3629:3666]()
    buildIntervals t (d : s : dx) | d > 0 =
    let ival = I.interval t (t .+^ d)
    [6.3596]
    [6.94]
    buildIntervals t (d : s : dx) | d > 0 =
    let ival = I.interval t (t .+^ d)
  • replacement in test/Aftok/TimeLogSpec.hs at line 43
    [6.3800][6.3800:3828]()
    startTime <- arbitrary
    [6.3800]
    [6.146]
    startTime <- arbitrary
  • replacement in test/Aftok/TimeLogSpec.hs at line 49
    [6.2081][6.2081:2096](),[6.2096][6.3999:4038]()
    arbitrary =
    let record = do addr <- arbitrary
    [6.2081]
    [6.4038]
    arbitrary =
    let record = do addr <- arbitrary
  • replacement in test/Aftok/TimeLogSpec.hs at line 58
    [6.198][6.2221:2263](),[6.2263][6.6:39]()
    it "reduces a log to a work index" $
    let testAddrs = catMaybes
    [6.198]
    [6.2309]
    it "reduces a log to a work index" $
    let testAddrs = catMaybes
  • replacement in test/Aftok/TimeLogSpec.hs at line 64
    [6.4127][6.40:82]()
    starts = toThyme <$> catMaybes
    [6.4127]
    [6.2466]
    starts = toThyme <$> catMaybes
  • replacement in test/Aftok/TimeLogSpec.hs at line 68
    [6.4254][6.83:125]()
    ends = toThyme <$> catMaybes
    [6.4254]
    [6.4127]
    ends = toThyme <$> catMaybes
  • replacement in test/Aftok/TimeLogSpec.hs at line 89
    [6.3444][6.1936:1964]()
    \(WorkIndex widx) ->
    [6.3444]
    [6.237]
    \(WorkIndex widx) ->
  • replacement in test/Aftok/Util/HttpSpec.hs at line 1
    [6.4932][6.4933:5008]()
    {-# LANGUAGE OverloadedStrings, ScopedTypeVariables, NoImplicitPrelude #-}
    [6.4932]
    [6.5008]
    {-# LANGUAGE NoImplicitPrelude #-}
    {-# LANGUAGE OverloadedStrings #-}
    {-# LANGUAGE ScopedTypeVariables #-}
  • replacement in test/Aftok/Util/HttpSpec.hs at line 7
    [6.5046][6.5046:5067]()
    import ClassyPrelude
    [6.5046]
    [6.5067]
    import ClassyPrelude
  • replacement in test/Aftok/Util/HttpSpec.hs at line 9
    [6.5068][6.3705:3728](),[6.3728][6.5094:5129](),[6.5094][6.5094:5129]()
    import Aftok.Util.Http
    import Data.Attoparsec.ByteString
    [6.5068]
    [6.5129]
    import Aftok.Util.Http
    import Data.Attoparsec.ByteString
  • replacement in test/Aftok/Util/HttpSpec.hs at line 12
    [6.5130][6.5130:5148]()
    import Test.Hspec
    [6.5130]
    [6.5148]
    import Test.Hspec