Reformat via stylish-haskell
[?]
Mar 4, 2016, 4:43 AM
NEDDHXUK3GNFMOFO3KLU7NRIHCTYNWBT3D6HTKZAOXFDE6HMDZ6ACDependencies
- [2]
6L5BK5EHUse generic SMTP rather than Sendmail-specific mail client. - [3]
MGOF7IUFUpdate TASKS list to reflect completed projects. - [4]
KEP5WUFJConvert project to stack-based build. - [5]
EKY7U7SKFinish conversion to stack. - [6]
4QX5E5ACInitial compilation of payouts function succeeds. - [7]
WZUHEZSBStart of migration back toward snap. - [8]
RSEB2NFGReplacing Snap with Scotty. - [9]
SCXG6TJWMake log reduction safer in presence of overlapping events. - [10]
OBFPJS2GProject successfully builds and tests under nix. - [11]
Y35QCWYWMinor improvement in WorkIndex type to eliminate duplicated information. - [12]
A6HKMINBAttempting to improve JSON handling. - [13]
2OIPAQCBMerge branch 'master' of github.com:nuttycom/ananke - [14]
BROSTG5KBeginning of modularization of server. - [15]
XTBSG4C7Adding serveJSON combinator to eliminate some boilerplate from handlers. - [16]
OV5AKJHARemove unused LogInterval type. - [17]
7HPY3QPFFix linting errors. (yay hlint!) - [18]
MWUPXTBFA few steps down a road to be abandoned. - [19]
HE3JTXO3Added client call to payouts. - [20]
GKGVYBZGAdded JSON serialization to TimeLog - [21]
ZITLSTYXFix problems with SQL queries & depreciation function parsing. - [22]
MB5SHULBAdd route for accepting an invitation with an existing account - [23]
EMVTF2IWWIP moving back to snap. - [24]
Z7KS5XHHVery WIP. Wow. - [25]
2KZPOGRBOnce you get Haskell to compile, the tests pass! - [26]
EZQG2APBUpdate task list. - [27]
M4KM76DGMerge branch 'stackify' - [28]
Z3M53KTLAdrift. - [29]
JUUMYIQEAdd groupBy utility function for use in TimeLog. - [30]
7DBNV3GVInitial, stack-based impl of time log event reduction. - [31]
2Y2QZFVFSwitch to more modern cabal2nix-based workflow. - [32]
JV3UEPNCFix Aeson constructors. - [33]
TNR3TEHKSwitch to Postgres + snaplet arch compiles. - [34]
75N3UJ4JMore progression toward lenses. - [35]
2G3GNDDUEvent logging is now functioning in postgres. - [36]
SPJCFHXWUpdate shell scripts to point to https://aftok.com and prompt for input. - [37]
ADMKQQGCInitial empty Snap project. - [38]
I2KHGVD4Require project permissions for access to most data. - [39]
KNSI575VCleanup of EventLog types. - [40]
GCVQD44VCreate amends endpoint, switch to UUID primary keys - [41]
7XN3I3QJAdd 'loggedIntervals' endpoint. - [42]
7KZP4RHZSwitch from Data.Time to Data.Thyme - [43]
A2J7B4SCInitial impl of depreciation function. - [44]
LD4GLVSFMore database stuff. - [45]
P6NR2CGXBeginning of implementation of depreciation. - [46]
O5FVTOM6Undo JSON silliness, enable a couple more routes. - [47]
N4NDAZYTInitial implementation of payouts. - [48]
TCOAKCGGCompleted conversion to snap. - [49]
FD7SV5I6Fix handling of event_t columns. - [50]
EYGIUUQZRestore remainder of endpoints to compiling status. - [51]
4ZLEDBK7Initial attempts at dockerizing, cabal isn't cooperating. - [52]
VJPT6HDRFix remaining type errors after addition of login handler. - [53]
5XFJNUAZStart of addition of project infrastructure. - [54]
64VI73NPServer now compiles using abstracted SQLite - [55]
LAROLAYUWIP - [56]
NMWWP4ZNTrying out Hspec - [57]
PBD7LZYQPostgres & auth are beginning to function. - [58]
5DRIWGLUImproving TimeLog specs - [59]
4SCFOJGNSpecs for recovering intervals from the log now pass. - [60]
2XQD6KKKAdd invitation logic and clean up DBProg error handling. - [61]
EQXRXRZDChanged to use tasty instead of test-framework - [62]
ZP62WC47Begin conversion to build with stack. - [63]
SLL7262CMake depreciation functions more flexible. - [64]
TJEUE7TYAdded OverloadedStrings to eliminate Text fiddling. - [65]
RPAJLHMTChange to use UUIDs instead of ints for primary keys. - [66]
W35DDBFYFactor common JSON conversions up into client lib module. - [67]
NVOCQVASInitial failing tests. - [68]
64C6AWH6Rename Ananke -> Quixotic, project reboot. - [69]
IZEVQF62Work in progress replacing sqlite with postgres. - [70]
4U7F3CPITHE GREAT RENAMING OF THINGS! - [71]
V2VDN77HEnable postgres configuration via environment variable for Heroku. - [72]
5W5M56VJMove library code to 'lib' - [73]
BXGLKYRXAdded primitive user registration handler. - [74]
TLQ72DSJLenses, sqlite-simple - [75]
QMRKFEPGRefactor QDB to use a free monad algebra instead. - [76]
WO2MINIFAuctions now compile! - [77]
4IQVQL4TAdded 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 ClassyPreludeimport Control.Lensimport Data.Hourglassimport Data.UUIDimport Data.Thyme.Clock as Cimport ClassyPreludeimport Control.Lensimport Data.Hourglassimport Data.Thyme.Clock as Cimport Data.UUID - replacement in lib/Aftok/Auction.hs at line 11
import Aftokimport Aftok.Typesimport Aftokimport Aftok.Types - replacement in lib/Aftok/Auction.hs at line 17
data Auction = Auctiondata Auction = Auction - replacement in lib/Aftok/Auction.hs at line 19
, _auctionEnd :: C.UTCTime, _auctionEnd :: C.UTCTime - replacement in lib/Aftok/Auction.hs at line 35
(<=) b1 b2 =(<=) b1 b2 = - replacement in lib/Aftok/Auction.hs at line 37
wherewhere - replacement in lib/Aftok/Auction.hs at line 44
winningBids auction bids =winningBids auction bids = - replacement in lib/Aftok/Auction.hs at line 48
| total + (x ^. bidAmount) < (auction ^. raiseAmount) =| total + (x ^. bidAmount) < (auction ^. raiseAmount) = - replacement in lib/Aftok/Auction.hs at line 52
| total < (auction ^. raiseAmount) =| total < (auction ^. raiseAmount) = - replacement in lib/Aftok/Auction.hs at line 60
- replacement in lib/Aftok/Client.hs at line 1
{-# LANGUAGE ScopedTypeVariables, OverloadedStrings, NoImplicitPrelude #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE OverloadedStrings #-}{-# LANGUAGE ScopedTypeVariables #-} - replacement in lib/Aftok/Client.hs at line 7
import ClassyPreludeimport ClassyPrelude - replacement in lib/Aftok/Client.hs at line 9
import Control.Lensimport Data.Aeson.Typesimport qualified Data.Configurator as Cimport Control.Lensimport Data.Aeson.Typesimport qualified Data.Configurator as C - replacement in lib/Aftok/Client.hs at line 13
import Network.Wreqimport Network.Wreq - replacement in lib/Aftok/Client.hs at line 15
import Aftok.Jsonimport Aftok.TimeLogimport Aftok.Jsonimport Aftok.TimeLog - replacement in lib/Aftok/Client.hs at line 23
parseQCConfig cfg =QCConfig <$> C.require cfg "aftokUrl"parseQCConfig cfg =QCConfig <$> C.require cfg "aftokUrl" - replacement in lib/Aftok/Database/PostgreSQL.hs at line 1
{-# LANGUAGE GADTs, GeneralizedNewtypeDeriving #-}{-# 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 ClassyPreludeimport Control.Lensimport Data.Aeson(toJSON)import qualified Data.ByteString.Char8 as Bimport Control.Monad.Trans.Eitherimport Data.List as Limport Data.Hourglassimport Data.Thyme.Clock as Cimport Data.Thyme.Timeimport Data.UUID(UUID)import Database.PostgreSQL.Simpleimport Database.PostgreSQL.Simple.FromFieldimport Database.PostgreSQL.Simple.FromRowimport ClassyPreludeimport Control.Lensimport Control.Monad.Trans.Eitherimport Data.Aeson (toJSON)import qualified Data.ByteString.Char8 as Bimport Data.Hourglassimport Data.List as Limport Data.Thyme.Clock as Cimport Data.Thyme.Timeimport Data.UUID (UUID)import Database.PostgreSQL.Simpleimport Database.PostgreSQL.Simple.FromFieldimport Database.PostgreSQL.Simple.FromRow - replacement in lib/Aftok/Database/PostgreSQL.hs at line 20
import Aftokimport Aftok.Auctionimport Aftok.Databaseimport Aftok.Intervalimport Aftok.TimeLogimport Aftok.Typesimport Aftokimport Aftok.Auctionimport Aftok.Databaseimport Aftok.Intervalimport Aftok.TimeLogimport Aftok.Types - replacement in lib/Aftok/Database/PostgreSQL.hs at line 39
case tn of"event_t" ->case tn of"event_t" -> - replacement in lib/Aftok/Database/PostgreSQL.hs at line 42
(tableOid f)(tableOid f) - replacement in lib/Aftok/Database/PostgreSQL.hs at line 47
_ ->_ -> - replacement in lib/Aftok/Database/PostgreSQL.hs at line 49
(tableOid f)(tableOid f) - replacement in lib/Aftok/Database/PostgreSQL.hs at line 77
utcParser f v = toThyme <$> fromField f vutcParser f v = toThyme <$> fromField f v - replacement in lib/Aftok/Database/PostgreSQL.hs at line 80
logEntryParser =LogEntry <$> fieldWith btcAddrParserlogEntryParser =LogEntry <$> fieldWith btcAddrParser - replacement in lib/Aftok/Database/PostgreSQL.hs at line 86
qdbLogEntryParser =qdbLogEntryParser = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 88
<*> fieldWith uidParser<*> fieldWith uidParser - replacement in lib/Aftok/Database/PostgreSQL.hs at line 90
- replacement in lib/Aftok/Database/PostgreSQL.hs at line 92
auctionParser =auctionParser = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 97
bidParser =Bid <$> fieldWith uidParser<*> fieldWith secondsParser<*> fieldWith btcParserbidParser =Bid <$> fieldWith uidParser<*> fieldWith secondsParser<*> fieldWith btcParser - replacement in lib/Aftok/Database/PostgreSQL.hs at line 104
userParser =userParser = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 110
qdbUserParser =(,) <$> fieldWith uidParserqdbUserParser =(,) <$> fieldWith uidParser - replacement in lib/Aftok/Database/PostgreSQL.hs at line 115
projectParser =Project <$> field<*> fieldWith utcParserprojectParser =Project <$> field<*> fieldWith utcParser - replacement in lib/Aftok/Database/PostgreSQL.hs at line 122
invitationParser =invitationParser = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 130
qdbProjectParser =(,) <$> fieldWith pidParserqdbProjectParser =(,) <$> fieldWith pidParser - replacement in lib/Aftok/Database/PostgreSQL.hs at line 134
pexec :: (ToRow d) => Query -> d -> QDBM Int64pexec :: (ToRow d) => Query -> d -> QDBM Int64 - replacement in lib/Aftok/Database/PostgreSQL.hs at line 139
pinsert :: (ToRow d) => (UUID -> r) -> Query -> d -> QDBM rpinsert :: (ToRow d) => (UUID -> r) -> Query -> d -> QDBM r - replacement in lib/Aftok/Database/PostgreSQL.hs at line 156
dbEval (CreateEvent (ProjectId pid) (UserId uid) (LogEntry a e m)) =dbEval (CreateEvent (ProjectId pid) (UserId uid) (LogEntry a e m)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 160
\RETURNING id"\RETURNING id" - replacement in lib/Aftok/Database/PostgreSQL.hs at line 168
dbEval (FindEvent (EventId eid)) =dbEval (FindEvent (EventId eid)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 177
\WHERE project_id = ? AND user_id = ? AND event_time <= ?"\WHERE project_id = ? AND user_id = ? AND event_time <= ?" - replacement in lib/Aftok/Database/PostgreSQL.hs at line 182
\AND event_time >= ? AND event_time <= ?"\AND event_time >= ? AND event_time <= ?" - replacement in lib/Aftok/Database/PostgreSQL.hs at line 186
\WHERE project_id = ? AND user_id = ? AND event_time >= ?"\WHERE project_id = ? AND user_id = ? AND event_time >= ?" - replacement in lib/Aftok/Database/PostgreSQL.hs at line 190
dbEval (AmendEvent (EventId eid) (TimeChange mt t)) =dbEval (AmendEvent (EventId eid) (TimeChange mt t)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 195
dbEval (AmendEvent (EventId eid) (AddressChange mt addr)) =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)) =dbEval (AmendEvent (EventId eid) (MetadataChange mt v)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 207
"SELECT btc_addr, event_type, event_time, event_metadata FROM work_events WHERE project_id = ?""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
dbEval (CreateAuction pid auc) =dbEval (CreateAuction pid auc) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 217
dbEval (FindAuction aucId) =dbEval (FindAuction aucId) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 219
"SELECT raise_amount, end_time FROM auctions WHERE id = ?""SELECT raise_amount, end_time FROM auctions WHERE id = ?" - replacement in lib/Aftok/Database/PostgreSQL.hs at line 222
dbEval (CreateBid (AuctionId aucId) bid) =dbEval (CreateBid (AuctionId aucId) bid) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 226
( aucId( aucId - replacement in lib/Aftok/Database/PostgreSQL.hs at line 233
dbEval (ReadBids aucId) =dbEval (ReadBids aucId) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 238
dbEval (CreateUser user') =dbEval (CreateUser user') = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 243
dbEval (FindUser (UserId uid)) =dbEval (FindUser (UserId uid)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 248
dbEval (FindUserByName (UserName h)) =dbEval (FindUserByName (UserName h)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 261
dbEval (FindInvitation ic) =dbEval (FindInvitation ic) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 278
dbEval (CreateProject p) =dbEval (CreateProject p) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 284
dbEval (FindProject (ProjectId pid)) =dbEval (FindProject (ProjectId pid)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 289
dbEval (FindUserProjects (UserId uid)) =dbEval (FindUserProjects (UserId uid)) = - replacement in lib/Aftok/Database/PostgreSQL.hs at line 293
\WHERE pc.user_id = ? \\WHERE pc.user_id = ? \ - replacement in lib/Aftok/Database/PostgreSQL.hs at line 297
dbEval (AddUserToProject pid current new) = void $dbEval (AddUserToProject pid current new) = void $ - replacement in lib/Aftok/Interval.hs at line 3
module Aftok.Intervalmodule Aftok.Interval - replacement in lib/Aftok/Interval.hs at line 10
import ClassyPreludeimport 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.Aesonimport Data.AffineSpaceimport Data.Aeson.Typesimport Data.Thyme.Clock as Cimport Data.Thyme.LocalTime()import Data.Thyme.Format.Aeson()import Control.Lens (makeLenses, (^.))import Data.Aesonimport Data.Aeson.Typesimport Data.AffineSpaceimport Data.Thyme.Clock as Cimport Data.Thyme.Format.Aeson ()import Data.Thyme.LocalTime () - replacement in lib/Aftok/Interval.hs at line 21
, _end :: C.UTCTime, _end :: C.UTCTime - replacement in lib/Aftok/Interval.hs at line 24
data Interval' = Before { _end' :: C.UTCTime }data Interval' = Before { _end' :: C.UTCTime } - replacement in lib/Aftok/Interval.hs at line 28
makeLenses ''IntervalmakeLenses ''Interval - edit in lib/Aftok/TimeLog.hs at line 1
{-# LANGUAGE TemplateHaskell #-} - edit in lib/Aftok/TimeLog.hs at line 2
{-# LANGUAGE TemplateHaskell #-} - replacement in lib/Aftok/TimeLog.hs at line 4
module Aftok.TimeLogmodule Aftok.TimeLog - replacement in lib/Aftok/TimeLog.hs at line 20
import ClassyPreludeimport 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.Lensimport Data.AdditiveGroupimport Data.Aeson as Aimport Data.AffineSpaceimport Data.Foldable as Fimport Data.Heap as Himport Data.List.NonEmpty as Limport Data.Map.Strict as MSimport Data.Ratio()import Data.Thyme.Clock as Cimport Data.UUIDimport Data.VectorSpaceimport Control.Lensimport Data.AdditiveGroupimport Data.Aeson as Aimport Data.AffineSpaceimport Data.Foldable as Fimport Data.Heap as Himport Data.List.NonEmpty as Limport Data.Map.Strict as MSimport Data.Ratio ()import Data.Thyme.Clock as Cimport Data.UUIDimport Data.VectorSpace - replacement in lib/Aftok/TimeLog.hs at line 35
import Aftokimport Aftok.Intervalimport Aftokimport 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 :: LogEventdata LogEntry = LogEntry{ _btcAddr :: BtcAddr, _event :: LogEvent - replacement in lib/Aftok/TimeLog.hs at line 66
compare a b =compare a b = - replacement in lib/Aftok/TimeLog.hs at line 96
type DepF = C.UTCTime -> Interval -> NDTtype DepF = C.UTCTime -> Interval -> NDT - replacement in lib/Aftok/TimeLog.hs at line 114
payouts dep ptime (WorkIndex widx) =payouts dep ptime (WorkIndex widx) = - replacement in lib/Aftok/TimeLog.hs at line 116
addIntervalDiff total ivals = (^+^ total) &&& id $ workCredit dep ptime ivalsaddIntervalDiff total ivals = (^+^ total) &&& id $ workCredit dep ptime ivals - replacement in lib/Aftok/TimeLog.hs at line 123
workIndex logEntries =workIndex logEntries = - replacement in lib/Aftok/TimeLog.hs at line 127
accum k l m = case nonEmpty (rights l) ofaccum k l m = case nonEmpty (rights l) of - replacement in lib/Aftok/TimeLog.hs at line 141
appendLogEntry idx (LogEntry k ev _) =appendLogEntry idx (LogEntry k ev _) = - replacement in lib/Aftok/TimeLog.hs at line 154
-- because the end of that interval is the same-- because the end of that interval is the same - replacement in lib/Aftok/TimeLog.hs at line 170
linearDepreciation undepLength depLength =linearDepreciation undepLength depLength = - replacement in lib/Aftok/TimeLog.hs at line 175
maxDepreciable = monthsLength undepLength ^+^ monthsLength depLengthmaxDepreciable = monthsLength undepLength ^+^ monthsLength depLength - replacement in lib/Aftok/TimeLog.hs at line 178
depPct dt =depPct dt = - replacement in lib/Aftok/TimeLog.hs at line 182
in \ptime ival ->in \ptime ival -> - replacement in lib/Aftok/Types.hs at line 5
import Data.Wordimport ClassyPreludeimport ClassyPrelude - edit in lib/Aftok/Types.hs at line 9
- edit in lib/Aftok/Types.hs at line 10[4.1037]
- replacement in lib/Aftok/Util/Http.hs at line 3
import ClassyPreludeimport ClassyPrelude - replacement in lib/Aftok/Util/Http.hs at line 5
import Data.ByteString (split)import Data.Attoparsec.ByteStringimport qualified Data.ByteString.Base64 as B64import Data.Attoparsec.ByteStringimport Data.ByteString (split)import qualified Data.ByteString.Base64 as B64 - replacement in lib/Aftok/Util/Http.hs at line 17
b64 <- string "Basic " *> takeWhile1 isBase64Charb64 <- string "Basic " *> takeWhile1 isBase64Char - replacement in lib/Aftok/Util.hs at line 5
import ClassyPreludeimport Control.Monad.Free.Churchimport Data.Functor.Coyonedaimport ClassyPreludeimport Control.Monad.Free.Churchimport Data.Functor.Coyoneda - replacement in lib/Aftok/Util.hs at line 13
interpret nt p =interpret nt p = - replacement in lib/Aftok.hs at line 1
{-# LANGUAGE NoImplicitPrelude, TemplateHaskell, DeriveDataTypeable #-}{-# LANGUAGE DeriveDataTypeable #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE TemplateHaskell #-} - replacement in lib/Aftok.hs at line 7
import ClassyPreludeimport 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.Aesonimport Data.Aeson.Typesimport Data.ByteString.Base64.URL as B64import Data.Dataimport Data.Thyme.Clock as Cimport Data.UUIDimport OpenSSL.Randomimport Control.Lens (makeLenses, makePrisms)import Data.Aesonimport Data.Aeson.Typesimport Data.ByteString.Base64.URL as B64import Data.Dataimport Data.Thyme.Clock as Cimport Data.UUIDimport OpenSSL.Random - replacement in lib/Aftok.hs at line 24
newtype Months = Months Integernewtype Months = Months Integer - replacement in lib/Aftok.hs at line 40
{ _username :: UserName{ _username :: UserName - replacement in lib/Aftok.hs at line 42
, _userEmail :: Email, _userEmail :: Email - replacement in lib/Aftok.hs at line 51
{ _projectName :: ProjectName{ _projectName :: ProjectName - replacement in lib/Aftok.hs at line 53
, _initiator :: UserId, _depf :: DepreciationFunction, _initiator :: UserId, _depf :: DepreciationFunction - replacement in lib/Aftok.hs at line 74
data Invitation = Invitation{ _projectId :: ProjectId, _invitingUser :: UserId, _invitedEmail :: Emaildata Invitation = Invitation{ _projectId :: ProjectId, _invitingUser :: UserId, _invitedEmail :: Email - replacement in lib/Aftok.hs at line 98
"LinearDepreciation" ->"LinearDepreciation" -> - replacement in server/Aftok/QConfig.hs at line 3
import ClassyPreludeimport 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 Cimport qualified Data.Configurator as Cimport qualified Data.Configurator.Types as CTimport qualified Network.Socket as NSimport qualified Network.Mail.SMTP as SMTPimport System.Environmentimport System.IO (FilePath)import qualified Data.ByteString.Char8 as Cimport qualified Data.Configurator as Cimport qualified Data.Configurator.Types as CTimport qualified Network.Mail.SMTP as SMTPimport qualified Network.Socket as NSimport System.Environmentimport System.IO (FilePath) - replacement in server/Aftok/QConfig.hs at line 13
import Snap.Coreimport Snap.Snaplet.PostgresqlSimpleimport qualified Snap.Http.Server.Config as SCimport Snap.Coreimport qualified Snap.Http.Server.Config as SCimport Snap.Snaplet.PostgresqlSimple - replacement in server/Aftok/QConfig.hs at line 18
{ hostname :: ByteString, port :: Int, authSiteKey :: System.IO.FilePath{ 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}, pgsConfig :: PGSConfig, smtpConfig :: SmtpConfig, templatePath :: System.IO.FilePath} - replacement in server/Aftok/QConfig.hs at line 27
data SmtpConfig = SmtpConfigdata SmtpConfig = SmtpConfig - replacement in server/Aftok/QConfig.hs at line 30
, smtpUser :: SMTP.UserName, smtpPass :: SMTP.Password, smtpUser :: SMTP.UserName, smtpPass :: SMTP.Password - replacement in server/Aftok/QConfig.hs at line 35
loadQConfig cfgFile = doloadQConfig cfgFile = do - replacement in server/Aftok/QConfig.hs at line 37
cfg <- C.load [C.Required cfgFile]cfg <- C.load [C.Required cfgFile] - replacement in server/Aftok/QConfig.hs at line 42
readQConfig cfg pc =readQConfig cfg pc = - replacement in server/Aftok/QConfig.hs at line 44
<*> C.lookupDefault 8000 cfg "port"<*> C.lookupDefault 8000 cfg "port" - replacement in server/Aftok/QConfig.hs at line 46
<*> C.lookup cfg "cookieTimeout"<*> C.lookup cfg "cookieTimeout" - replacement in server/Aftok/QConfig.hs at line 52
readSmtpConfig cfg =readSmtpConfig cfg = - replacement in server/Aftok/QConfig.hs at line 59
baseSnapConfig qc =SC.setHostname (hostname qc) .SC.setPort (port qc)baseSnapConfig qc =SC.setHostname (hostname qc) .SC.setPort (port qc) - replacement in server/Aftok/Snaplet/Auth.hs at line 3
import ClassyPreludeimport ClassyPrelude - replacement in server/Aftok/Snaplet/Auth.hs at line 5
import Control.Lensimport Control.Lens - replacement in server/Aftok/Snaplet/Auth.hs at line 7
import Data.UUID(fromASCIIBytes)import Data.Attoparsec.ByteString(parseOnly, takeByteString)import Data.Attoparsec.ByteString (parseOnly, takeByteString)import Data.UUID (fromASCIIBytes) - replacement in server/Aftok/Snaplet/Auth.hs at line 10
import Aftokimport Aftok.Databaseimport Aftok.Util.Http (authHeaderParser)import Aftok.Snapletimport Aftokimport Aftok.Databaseimport Aftok.Snapletimport Aftok.Util.Http (authHeaderParser) - replacement in server/Aftok/Snaplet/Auth.hs at line 15
import Snap.Coreimport Snap.Snapletimport Snap.Coreimport Snap.Snaplet - replacement in server/Aftok/Snaplet/Auth.hs at line 18
import qualified Snap.Snaplet.Auth as AUimport qualified Snap.Snaplet.Auth as AU - replacement in server/Aftok/Snaplet/Auth.hs at line 20
requireLogin :: Handler App App AU.AuthUserrequireLogin :: Handler App App AU.AuthUser - replacement in server/Aftok/Snaplet/Auth.hs at line 24
(uname, pwd) <- either (throwDenied . AU.AuthError) pure $ parseOnly authHeaderParser rawHeader(uname, pwd) <- either (throwDenied . AU.AuthError) pure $ parseOnly authHeaderParser rawHeader - replacement in server/Aftok/Snaplet/Auth.hs at line 28
requireUser :: Handler App App AU.AuthUserrequireUser = dorequireUser :: Handler App App AU.AuthUserrequireUser = do - replacement in server/Aftok/Snaplet/Auth.hs at line 38
Nothing -> snapError 403 "Unable to retrieve user record for authenticated user"Nothing -> snapError 403 "Unable to retrieve user record for authenticated user" - replacement in server/Aftok/Snaplet/Auth.hs at line 42
requireProjectId = domaybePid <- parseParam "projectId" pidParsermaybe (snapError 400 "Value of parameter \"projectId\" cannot be parsed as a valid UUID")requireProjectId = domaybePid <- parseParam "projectId" pidParsermaybe (snapError 400 "Value of parameter \"projectId\" cannot be parsed as a valid UUID") - replacement in server/Aftok/Snaplet/Auth.hs at line 54
modifyResponse $ (setResponseStatus 401 "Unauthorized") .modifyResponse $ (setResponseStatus 401 "Unauthorized") . - replacement in server/Aftok/Snaplet/Users.hs at line 3
module Aftok.Snaplet.Usersmodule Aftok.Snaplet.Users - replacement in server/Aftok/Snaplet/Users.hs at line 8
import ClassyPreludeimport 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.Lensimport Data.Aeson as Aimport Data.Text as Timport Data.Thyme.Clock as Cimport Control.Lensimport Data.Aeson as Aimport Data.Text as Timport Data.Thyme.Clock as C - replacement in server/Aftok/Snaplet/Users.hs at line 15
import Aftokimport Aftok.Databaseimport Aftok.Snapletimport Aftok.Snaplet.Authimport Aftokimport Aftok.Databaseimport Aftok.Snapletimport Aftok.Snaplet.Auth - replacement in server/Aftok/Snaplet/Users.hs at line 20
import Snap.Coreimport Snap.Snapletimport qualified Snap.Snaplet.Auth as AUimport Snap.Coreimport Snap.Snapletimport qualified Snap.Snaplet.Auth as AU - replacement in server/Aftok/Snaplet/Users.hs at line 25
{ _cuser :: User, _password :: ByteString{ _cuser :: User, _password :: ByteString - replacement in server/Aftok/Snaplet/Users.hs at line 32
parseJSON (Object v) =parseJSON (Object v) = - replacement in server/Aftok/Snaplet/Users.hs at line 37
parseInvitationCodes c = either(\e -> fail $ "Invitation code was rejected as invalid: " <> e)pureparseInvitationCodes c = either(\e -> fail $ "Invitation code was rejected as invalid: " <> e)pure - replacement in server/Aftok/Snaplet/Users.hs at line 60
either throwDenied (\_ -> createQUser) authUsereither throwDenied (\_ -> createQUser) authUser - replacement in server/Aftok/Snaplet/Users.hs at line 66
params <- getParamsparams <- getParams - replacement in server/Aftok/Snaplet/Users.hs at line 71
eithereither - replacement in server/Aftok/Snaplet/Users.hs at line 75[6.1064]
- replacement in server/Aftok/Snaplet/Util.hs at line 3
import ClassyPreludeimport ClassyPrelude - replacement in server/Aftok/Snaplet/Util.hs at line 5
import Control.Monad.Trans.Maybeimport Data.ByteString.Char8 as Bimport Data.Time.ISO8601import Data.Thyme.Timeimport Data.Thyme.Clock as Cimport Control.Monad.Trans.Maybeimport Data.ByteString.Char8 as Bimport Data.Thyme.Clock as Cimport Data.Thyme.Timeimport Data.Time.ISO8601 - replacement in server/Aftok/Snaplet/Util.hs at line 11
import Snap.Coreimport Snap.Core - replacement in server/Aftok/Snaplet/WorkLog.hs at line 3
import ClassyPreludeimport 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.Lensimport qualified Data.Aeson as Aimport Data.Aeson.Typesimport Data.UUID as Uimport Data.Thyme.Clock as Cimport Control.Lensimport qualified Data.Aeson as Aimport Data.Aeson.Typesimport Data.Thyme.Clock as Cimport Data.UUID as U - replacement in server/Aftok/Snaplet/WorkLog.hs at line 11
import Aftokimport Aftok.Databaseimport Aftok.Intervalimport Aftok.Jsonimport Aftok.TimeLogimport Aftokimport Aftok.Databaseimport Aftok.Intervalimport Aftok.Jsonimport Aftok.TimeLog - replacement in server/Aftok/Snaplet/WorkLog.hs at line 17
import Aftok.Snapletimport Aftok.Snaplet.Authimport Aftok.Snaplet.Utilimport Aftok.Snapletimport Aftok.Snaplet.Authimport Aftok.Snaplet.Util - replacement in server/Aftok/Snaplet/WorkLog.hs at line 21
import Snap.Coreimport Snap.Snapletimport Snap.Coreimport Snap.Snaplet - replacement in server/Aftok/Snaplet/WorkLog.hs at line 25
logWorkHandler evCtr = dologWorkHandler evCtr = do - replacement in server/Aftok/Snaplet/WorkLog.hs at line 32
Nothing ->Nothing -> - replacement in server/Aftok/Snaplet/WorkLog.hs at line 34
Just addr ->Just addr -> - replacement in server/Aftok/Snaplet/WorkLog.hs at line 56
payoutsHandler = dopayoutsHandler = do - replacement in server/Aftok/Snaplet/WorkLog.hs at line 59
projectMay <- snapEval $ findProject pid uidprojectMay <- snapEval $ findProject pid uid - replacement in server/Aftok/Snaplet/WorkLog.hs at line 69
eventId <- maybe(snapError 400 "eventId parameter is required")(pure . EventId)eventId <- maybe(snapError 400 "eventId parameter is required")(pure . EventId) - replacement in server/Aftok/Snaplet/WorkLog.hs at line 75
eithereither - replacement in server/Aftok/Snaplet.hs at line 1
{-# LANGUAGE TemplateHaskell, FlexibleInstances #-}{-# LANGUAGE FlexibleInstances #-}{-# LANGUAGE TemplateHaskell #-} - replacement in server/Aftok/Snaplet.hs at line 6
import ClassyPreludeimport 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.Lensimport Control.Monad.Readerimport Control.Monad.Stateimport Control.Monad.Trans.Eitherimport qualified Data.Aeson as Aimport Data.Attoparsec.ByteString(Parser, parseOnly)import Control.Lensimport Control.Monad.Readerimport Control.Monad.Stateimport Control.Monad.Trans.Eitherimport qualified Data.Aeson as Aimport 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 Aftokimport Aftok.Databaseimport Aftok.Database.PostgreSQLimport Aftok.Utilimport Aftokimport Aftok.Databaseimport Aftok.Database.PostgreSQLimport Aftok.Util - replacement in server/Aftok/Snaplet.hs at line 20
import Snap.Coreimport Snap.Snapletimport Snap.Snaplet.PostgresqlSimpleimport qualified Snap.Snaplet.Auth as AUimport Snap.Snaplet.Sessionimport Snap.Coreimport Snap.Snapletimport qualified Snap.Snaplet.Auth as AUimport Snap.Snaplet.PostgresqlSimpleimport Snap.Snaplet.Session - replacement in server/Aftok/Snaplet.hs at line 26
data App = Appdata App = App - replacement in server/Aftok/Snaplet.hs at line 39
let handleDBError (OpForbidden (UserId uid) reason) =let handleDBError (OpForbidden (UserId uid) reason) = - replacement in server/Aftok/Snaplet.hs at line 41
handleDBError (SubjectNotFound) =handleDBError (SubjectNotFound) = - replacement in server/Aftok/Snaplet.hs at line 56
getResponse >>= finishWithgetResponse >>= finishWith - replacement in server/Main.hs at line 3
import ClassyPreludeimport ClassyPrelude - replacement in server/Main.hs at line 5
import qualified Data.Aeson as Aimport System.Environmentimport qualified Data.Aeson as Aimport System.Environment - replacement in server/Main.hs at line 8
import Aftok.TimeLogimport Aftok.Jsonimport Aftok.Jsonimport Aftok.TimeLog - replacement in server/Main.hs at line 11
import Aftok.QConfigimport Aftok.Snapletimport Aftok.Snaplet.Authimport Aftok.Snaplet.Usersimport Aftok.Snaplet.WorkLogimport Aftok.Snaplet.Projectsimport Aftok.QConfigimport Aftok.Snapletimport Aftok.Snaplet.Authimport Aftok.Snaplet.Projectsimport Aftok.Snaplet.Usersimport 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.Coreimport Snap.Snapletimport Snap.Snaplet.PostgresqlSimpleimport Snap.Snaplet.Auth.Backends.PostgresqlSimpleimport Snap.Snaplet.Session.Backends.CookieSessionimport Snap.Coreimport Snap.Snapletimport Snap.Snaplet.Auth.Backends.PostgresqlSimpleimport Snap.Snaplet.PostgresqlSimpleimport 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 $sesss <- nestSnaplet "sessions" sess $ - replacement in server/Main.hs at line 54
addRoutes [ ("login", loginRoute)addRoutes [ ("login", loginRoute) - replacement in server/Main.hs at line 63
, ("projects/:projectId/logEnd/:btcAddr", logEventRoute StopWork), ("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](∅→∅)
]] - replacement in test/Aftok/TimeLogSpec.hs at line 1
{-# LANGUAGE OverloadedStrings, ScopedTypeVariables, NoImplicitPrelude #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE OverloadedStrings #-}{-# LANGUAGE ScopedTypeVariables #-} - replacement in test/Aftok/TimeLogSpec.hs at line 8
import ClassyPreludeimport 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.AffineSpaceimport qualified Data.List.NonEmpty as Limport qualified Data.Map.Strict as Mimport Data.Time.ISO8601import Data.Thyme.Time as Timport Control.Lens ((^.))import Data.AffineSpaceimport qualified Data.List.NonEmpty as Limport qualified Data.Map.Strict as Mimport Data.Thyme.Time as Timport Data.Time.ISO8601 - replacement in test/Aftok/TimeLogSpec.hs at line 17
import Aftokimport Aftok.Interval as Iimport Aftok.TimeLogimport Aftokimport Aftok.Interval as Iimport Aftok.TimeLog - replacement in test/Aftok/TimeLogSpec.hs at line 21
import Test.QuickCheckimport Test.Hspecimport Test.Hspecimport Test.QuickCheck - replacement in test/Aftok/TimeLogSpec.hs at line 36
buildIntervals t (d : s : dx) | d > 0 =let ival = I.interval t (t .+^ d)buildIntervals t (d : s : dx) | d > 0 =let ival = I.interval t (t .+^ d) - replacement in test/Aftok/TimeLogSpec.hs at line 43
startTime <- arbitrarystartTime <- arbitrary - replacement in test/Aftok/TimeLogSpec.hs at line 49
arbitrary =let record = do addr <- arbitraryarbitrary =let record = do addr <- arbitrary - replacement in test/Aftok/TimeLogSpec.hs at line 58
it "reduces a log to a work index" $let testAddrs = catMaybesit "reduces a log to a work index" $let testAddrs = catMaybes - replacement in test/Aftok/TimeLogSpec.hs at line 64
starts = toThyme <$> catMaybesstarts = toThyme <$> catMaybes - replacement in test/Aftok/TimeLogSpec.hs at line 68
ends = toThyme <$> catMaybesends = toThyme <$> catMaybes - replacement in test/Aftok/TimeLogSpec.hs at line 89
\(WorkIndex widx) ->\(WorkIndex widx) -> - replacement in test/Aftok/Util/HttpSpec.hs at line 1
{-# LANGUAGE OverloadedStrings, ScopedTypeVariables, NoImplicitPrelude #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE OverloadedStrings #-}{-# LANGUAGE ScopedTypeVariables #-} - replacement in test/Aftok/Util/HttpSpec.hs at line 7
import ClassyPreludeimport ClassyPrelude - replacement in test/Aftok/Util/HttpSpec.hs at line 9
import Aftok.Util.Httpimport Data.Attoparsec.ByteStringimport Aftok.Util.Httpimport Data.Attoparsec.ByteString - replacement in test/Aftok/Util/HttpSpec.hs at line 12
import Test.Hspecimport Test.Hspec