Closed MaxGabriel closed 3 years ago
If they're useful including them in the readme makes sense. PR welcome! I'd suggest the FAQ section.
As to the slowness, I'd be keen to know how slow using the latest HLint 3.2.1 which disabled one particularly slow hint.
Good question. I think that specific optimization wouldn't come into play, since we already disabled it in hlint.yaml
. This is everything we disable:
- ignore: {name: "Reduce duplication"} # Often pretty spurious/reducing duplication makes the code more confusing
- ignore: {name: "Use fromMaybe"} # Often `fromMaybe` the code more complicated
- ignore: {name: "Replace case with fromMaybe"} # Often `fromMaybe` the code more complicated
- ignore: {name: "Avoid lambda"} # Lambas sometimes help readability. This is a more controversial one.
- ignore: {name: "Redundant do"} # Triggered when using `do` for a one liner. Often a redundant do is nice for consistency though (e.g. so every test starts the same)
- ignore: {name: "Eta reduce"} # (Going from e.g. func arg1 = func "x" "y" arg1 to func = "x" "y"). Generally think this is worse for readability, more confusing for beginners and without the argument name less self-documenting. In some cases it's great (e.g. oldDeprecatedName = newFunctionName) but we can still write those by hand.
- ignore: {name: "Use unwords"} # This function has a terrible name. I'll take intercalate " " any day.
- ignore: {name: "Use .", within: [Handler.Uploads.CheckImage, Mercury.API.Plaid.Esqueleto]} # hlint wants to reorder some of the esqueleto into a non-compiling form
- ignore: {name: "Avoid restricted function", within: [Mercury.ICalendar, TestImport]} # unsafePerformIO is used to streamline FFI access in a safe way
- ignore: {name: "Use list comprehension"} # We don't use these anywhere in our codebase. I don't think it's worth the very minor character savings to have one more construct for beginners to learn.
- ignore: {name: "Use ||"} # using or [a, b, c] is sometimes nicer than a || b || c when a, b, and c are long expressions
- ignore: {name: "Move brackets to avoid $"} # https://mercurytechnologies.slack.com/archives/CPE2X5DMJ/p1586975051135300
But I did run a couple tests:
3.2.1 (HLint v3.2.1, (C) Neil Mitchell 2006-2020):
Run 1:
time hlint src/ test/
66.75 real 65.43 user 1.04 sys
Run 2:
time hlint src/ test/
62.78 real 61.87 user 0.89 sys
HLint v2.2.10, (C) Neil Mitchell 2006-2020
(This is what we currently use—we don't use 8.10 yet so we can't upgrade to 3.x for real is my understanding).
Run 1
81.05 real 80.06 user 0.99 sys
Run 2
83.15 real 82.08 user 1.03 sys
This is for this much code:
cloc src/ test/ 14:06:46
866 text files.
866 unique files.
5 files ignored.
github.com/AlDanial/cloc v 1.84 T=0.79 s (1086.3 files/s, 168492.7 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Haskell 828 14552 8787 106761
JSON 32 3 0 3420
Markdown 1 8 0 16
-------------------------------------------------------------------------------
SUM: 861 14563 8787 110197
-------------------------------------------------------------------------------
Disabling a hint has no impact on performance - I generate the hint and then ignore it. It's possible in the future that we might optimise for hints that will be ignored, but since most hints are enabled most of the time, it's never been worth it.
Great to see that HLint 3.2.1 is faster! I'd be curious to see a --verbose
run with 3.2.1 if you can, and then just chop out the bit which says which phases took most time, as that will give a hint if there's a big outlier (e.g. one single hint goes crazy on your code), or if it's just a case of a lot of code.
Sure thing. It looks like everything is almost no time at all (nothing is >= 0.1 seconds), so either the time spent isn't reflected here, or its just all adding up.
I don't think this is a priority for us right now (the solution of only doing files that changed in git is really effective), but in case it is in the future, would you or someone else want to do contracting to optimize hlint based on running it on our codebase?
~/D/M/h/mercury-web-backend> hlint src/ test/ --verbose 18:32:22
# Initialise of global flags... took 0.00s
# Config of data/hlint.yaml... took 0.09s
# Config of /Users/maximiliantagher/Documents/Mercury/hs/mercury-web-backend/.hlint.yaml... took 0.00s
# Parse of src/App.hs... took 0.01s
# Parse of src/Application.hs... took 0.02s
# Parse of src/Client.hs... took 0.01s
# Parse of src/Foundation.hs... took 0.04s
# Parse of src/Import.hs... took 0.00s
# Parse of src/Logging.hs... took 0.00s
# Parse of src/Metrics.hs... took 0.00s
# Parse of src/Settings.hs... took 0.01s
# Parse of src/Task.hs... took 0.00s
# Parse of src/TaskMain.hs... took 0.01s
# Parse of src/AWS/S3.hs... took 0.00s
# Parse of src/AWS/Types.hs... took 0.00s
# Parse of src/AWS/EC2/InstanceId.hs... took 0.00s
# Parse of src/Client/Concurrency.hs... took 0.00s
# Parse of src/Client/Export.hs... took 0.00s
# Parse of src/Client/HTTP.hs... took 0.01s
# Parse of src/Client/Integration.hs... took 0.01s
# Parse of src/Client/SQL.hs... took 0.01s
# Parse of src/Client/Types.hs... took 0.00s
# Parse of src/Client/APNs/V1.hs... took 0.01s
# Parse of src/Client/Apex/Atlas.hs... took 0.02s
# Parse of src/Client/Apex/ConsistencyChecker.hs... took 0.00s
# Parse of src/Client/Apex/Edocs.hs... took 0.00s
# Parse of src/Client/Apex/Enotices.hs... took 0.00s
# Parse of src/Client/Apex/Equilibrium.hs... took 0.01s
# Parse of src/Client/Apex/HTTP.hs... took 0.01s
src/Client/Apex/HTTP.hs:211:20-69: Suggestion: Use <=<
Found:
(runParser fromXml =<<) . fromRawXml . BL.toStrict
Perhaps:
runParser fromXml Control.Monad.<=< (fromRawXml . BL.toStrict)
# Parse of src/Client/Apex/Sentinel.hs... took 0.01s
# Parse of src/Client/Apex/Sketch.hs... took 0.01s
# Parse of src/Client/Apex/Snap.hs... took 0.00s
# Parse of src/Client/Apex/Sql.hs... took 0.01s
src/Client/Apex/Sql.hs:(103,13)-(104,62): Warning: Redundant ^.
Found:
treasuryMetadata
^.
TransactionMetadataStatus
`in_` valList [M.Created, M.Pending, M.Sent]
&&. apexClearingAccount
^. ApexClearingAccountId
Perhaps:
(treasuryMetadata
^.
((TransactionMetadataStatus
`in_` valList [M.Created, M.Pending, M.Sent]
&&. apexClearingAccount)
. ApexClearingAccountId))
# Parse of src/Client/Apex/StartOfDayWorker.hs... took 0.01s
# Parse of src/Client/Apex/Stubs.hs... took 0.00s
# Parse of src/Client/Apex/Unused.hs... took 0.01s
# Parse of src/Client/Apex/Ale/Dispatch.hs... took 0.00s
# Parse of src/Client/Apex/Ale/EventConsumer.hs... took 0.00s
# Parse of src/Client/Apex/Atlas/Forms.hs... took 0.00s
# Parse of src/Client/Apex/Atlas/Forms/Generate/CreateEntityCorporationCashAccountAgreementForm.hs... took 0.00s
# Parse of src/Client/Apex/Atlas/Forms/Generate/CreateEntityDueDiligenceForm.hs... took 0.00s
# Parse of src/Client/Apex/Atlas/Forms/Generate/CreateEntityLlcAgreementForm.hs... took 0.00s
# Parse of src/Client/Apex/Atlas/Forms/Generate/CreateEntityNewAccountRiaForm.hs... took 0.01s
# Parse of src/Client/Apex/Atlas/Forms/Seed/EntityDueDiligenceForm.hs... took 0.00s
# Parse of src/Client/Apex/Atlas/Forms/Seed/EntityNewAccountRiaForm.hs... took 0.00s
# Parse of src/Client/Apex/Auth/Common.hs... took 0.00s
# Parse of src/Client/Apex/Auth/Endpoints.hs... took 0.00s
# Parse of src/Client/Apex/Auth/Worker.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/ActivityListEndOfDay.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/CashActivity.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/CashAvailable.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/Common.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/Fetch.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/Position.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/PositionStrategy.hs... took 0.00s
# Parse of src/Client/Apex/Extracts/TradeActivity.hs... took 0.00s
# Parse of src/Client/Apex/Types/Ale.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas.hs... took 0.07s
# Parse of src/Client/Apex/Types/Auth.hs... took 0.00s
# Parse of src/Client/Apex/Types/Common.hs... took 0.00s
# Parse of src/Client/Apex/Types/Database.hs... took 0.02s
# Parse of src/Client/Apex/Types/Edocs.hs... took 0.01s
# Parse of src/Client/Apex/Types/Enotices.hs... took 0.00s
# Parse of src/Client/Apex/Types/Onboarding.hs... took 0.00s
# Parse of src/Client/Apex/Types/Sketch.hs... took 0.02s
# Parse of src/Client/Apex/Types/Snap.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms/All.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms/EntityAccountUpdateForm.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms/EntityCorporationCashAccountAgreementForm.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms/EntityDueDiligenceForm.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms/EntityLlcAgreementForm.hs... took 0.00s
# Parse of src/Client/Apex/Types/Atlas/Forms/EntityNewAccountRiaForm.hs... took 0.00s
# Parse of src/Client/Apex/Types/Equilibrium/Trades.hs... took 0.02s
# Parse of src/Client/Apex/Types/Sentinel/V1/Transfers.hs... took 0.04s
# Parse of src/Client/Apex/Types/Sentinel/V2/AchRelationships.hs... took 0.01s
# Parse of src/Client/Apex/Types/Sentinel/V2/Types.hs... took 0.06s
# Parse of src/Client/Bank/Feature.hs... took 0.00s
# Parse of src/Client/Bank/Limit.hs... took 0.01s
src/Client/Bank/Limit.hs:309:8-83: Warning: Redundant <$>
Found:
onboardingApplicationFirstApprovedAt
=<< entityVal <$> onboardingApplication
Perhaps:
onboardingApplicationFirstApprovedAt . entityVal
=<< onboardingApplication
# Parse of src/Client/Bank/Migrate.hs... took 0.02s
# Parse of src/Client/Bank/Primitive.hs... took 0.05s
# Parse of src/Client/Bank/Statements/Fetch.hs... took 0.00s
# Parse of src/Client/Bank/Statements/StatementId.hs... took 0.00s
# Parse of src/Client/Bank/Statements/Types.hs... took 0.00s
# Parse of src/Client/Clearbit/V2018_11_19/Enrichment.hs... took 0.00s
# Parse of src/Client/CrossPartnerSync/Apex.hs... took 0.00s
# Parse of src/Client/CrossPartnerSync/Common.hs... took 0.00s
# Parse of src/Client/CrossPartnerSync/Core.hs... took 0.00s
# Parse of src/Client/CrossPartnerSync/Synapse.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Account.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Beneficiary.hs... took 0.01s
# Parse of src/Client/CurrencyCloud/V2/Contact.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Credential.hs... took 0.00s
src/Client/CurrencyCloud/V2/Credential.hs:138:3-33: Warning: Redundant <$>
Found:
CredentialManager <$> pure tvar
Perhaps:
pure (CredentialManager tvar)
src/Client/CurrencyCloud/V2/Credential.hs:146:3-33: Warning: Redundant <$>
Found:
CredentialManager <$> pure tvar
Perhaps:
pure (CredentialManager tvar)
# Parse of src/Client/CurrencyCloud/V2/HTTP.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Notification.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Payment.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Sql.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Notification/Conversion.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Notification/Funding.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Notification/Payment.hs... took 0.00s
# Parse of src/Client/CurrencyCloud/V2/Notification/Transfer.hs... took 0.00s
# Parse of src/Client/Dialpad/V1.hs... took 0.01s
# Parse of src/Client/Dialpad/V1/Sql.hs... took 0.00s
# Parse of src/Client/Freshsales/V1.hs... took 0.01s
# Parse of src/Client/Front/V2.hs... took 0.01s
src/Client/Front/V2.hs:240:29-76: Warning: Redundant <$>
Found:
userExtraNote =<< userExtra <$> eitherToMaybe su
Perhaps:
(userExtraNote . userExtra =<< eitherToMaybe su)
# Parse of src/Client/HubSpot/V1.hs... took 0.01s
src/Client/HubSpot/V1.hs:302:25-72: Warning: Redundant <$>
Found:
userExtraNote =<< userExtra <$> eitherToMaybe su
Perhaps:
(userExtraNote . userExtra =<< eitherToMaybe su)
# Parse of src/Client/Lob/VerifyAddress.hs... took 0.01s
# Parse of src/Client/Persona/HTTP.hs... took 0.01s
# Parse of src/Client/Persona/Types.hs... took 0.00s
# Parse of src/Client/Persona/Webhook/Inquiry.hs... took 0.00s
# Parse of src/Client/Segment/V1/Group.hs... took 0.00s
# Parse of src/Client/Segment/V1/HTTP.hs... took 0.00s
# Parse of src/Client/Segment/V1/Identify.hs... took 0.00s
# Parse of src/Client/Segment/V1/Segment.hs... took 0.00s
# Parse of src/Client/Segment/V1/Sql.hs... took 0.00s
# Parse of src/Client/Segment/V1/Types.hs... took 0.00s
# Parse of src/Client/Synapse/Cip14.hs... took 0.00s
# Parse of src/Client/Synapse/Dashboard/Routes.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Address.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Card.hs... took 0.02s
# Parse of src/Client/Synapse/V3/Consistency.hs... took 0.02s
# Parse of src/Client/Synapse/V3/Document.hs... took 0.00s
# Parse of src/Client/Synapse/V3/HTTP.hs... took 0.01s
# Parse of src/Client/Synapse/V3/HighPriorityApprovals.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Integration.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Node.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Oauth.hs... took 0.00s
# Parse of src/Client/Synapse/V3/SQL.hs... took 0.00s
# Parse of src/Client/Synapse/V3/SQLeto.hs... took 0.01s
src/Client/Synapse/V3/SQLeto.hs:(128,72)-(129,63): Warning: Redundant ^.
Found:
synapseRecipientAchNode
^.
SynapseRecipientAchNodeRecipientPaymentDataId &&. recipientAccount
^. RecipientAccountBankAccountId
Perhaps:
(synapseRecipientAchNode
^.
((SynapseRecipientAchNodeRecipientPaymentDataId
&&. recipientAccount)
. RecipientAccountBankAccountId))
# Parse of src/Client/Synapse/V3/Statements.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Transaction.hs... took 0.02s
# Parse of src/Client/Synapse/V3/User.hs... took 0.06s
src/Client/Synapse/V3/User.hs:214:14-88: Warning: Redundant <$>
Found:
mkNonEmptyText
=<< tshow <$> countryToUSTerritory addressWithoutNameCountry
Perhaps:
mkNonEmptyText . tshow
=<< countryToUSTerritory addressWithoutNameCountry
# Parse of src/Client/Synapse/V3/Node/Ach.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Node/Check.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Node/Class.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Node/Deposit.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Node/ResponseTypes.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Node/Savings.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Node/Subnet.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Node/Wire.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Transaction/Class.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Transaction/Dispute.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Transaction/Dispute/Types.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Types/Address.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/Card.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/Common.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/Document.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Types/HTTP.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/Node.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/Statement.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/Transaction.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Types/User.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Types/UserPermission.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Webhook/Node.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Webhook/NoteParser.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Webhook/Subscribe.hs... took 0.00s
# Parse of src/Client/Synapse/V3/Webhook/TransactionConsumer.hs... took 0.02s
src/Client/Synapse/V3/Webhook/TransactionConsumer.hs:788:15-95: Warning: Use Just
Found:
fromMaybe False
$ synapseTransactionMetadataAmountAllowedToChange synapseMetadata
Perhaps:
Just True
== synapseTransactionMetadataAmountAllowedToChange synapseMetadata
# Parse of src/Client/Synapse/V3/Webhook/UserConsumer.hs... took 0.01s
# Parse of src/Client/Synapse/V3/Webhook/WireFeeParser.hs... took 0.00s
# Parse of src/Client/Test/Card.hs... took 0.00s
# Parse of src/Client/Xero/V1/Feed.hs... took 0.01s
# Parse of src/Client/Xero/V1/Statement.hs... took 0.01s
# Parse of src/Client/Xero/V1/Types.hs... took 0.00s
# Parse of src/Consumer/Postgresque.hs... took 0.02s
# Parse of src/Consumer/Types.hs... took 0.01s
# Parse of src/Consumer/Jobs/SendAPIPartnerInviteEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendAPIPartnerWebhook.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendAccountOpenedEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendAdjunctUserApprovedEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendAdminNewBeneficialOwnerEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendGenericEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendInviteEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendRecipientElectronicPaymentEmail.hs... took 0.00s
# Parse of src/Consumer/Jobs/SendTransactionMoneyMonitoring.hs... took 0.01s
# Parse of src/Handler/AlphaCodeExists.hs... took 0.00s
# Parse of src/Handler/Common.hs... took 0.00s
# Parse of src/Handler/Concurrency.hs... took 0.00s
# Parse of src/Handler/CreateOrganization.hs... took 0.01s
# Parse of src/Handler/EncryptedCookie.hs... took 0.00s
# Parse of src/Handler/Home.hs... took 0.00s
# Parse of src/Handler/IP.hs... took 0.00s
# Parse of src/Handler/Metrics.hs... took 0.00s
# Parse of src/Handler/Notifications.hs... took 0.00s
# Parse of src/Handler/Security.hs... took 0.01s
# Parse of src/Handler/TOTPSignupComplete.hs... took 0.00s
# Parse of src/Handler/TOTPSignupStart.hs... took 0.00s
# Parse of src/Handler/TOTPUpdateComplete.hs... took 0.00s
# Parse of src/Handler/TOTPUpdateStart.hs... took 0.00s
# Parse of src/Handler/ThrowException.hs... took 0.00s
# Parse of src/Handler/Util.hs... took 0.00s
# Parse of src/Handler/API/BankingPartner/AuthToken.hs... took 0.00s
# Parse of src/Handler/API/BankingPartner/Transactions.hs... took 0.00s
# Parse of src/Handler/API/BankingPartner/TwoFA.hs... took 0.00s
# Parse of src/Handler/API/BankingPartner/User.hs... took 0.00s
# Parse of src/Handler/API/Clerky/SubmitOnboardingData.hs... took 0.00s
# Parse of src/Handler/API/Finicity/Login.hs... took 0.00s
# Parse of src/Handler/API/Mercury/Accounts.hs... took 0.01s
# Parse of src/Handler/API/Mercury/ApiTokens.hs... took 0.02s
# Parse of src/Handler/API/Mercury/Common.hs... took 0.00s
# Parse of src/Handler/API/Mercury/LookupToken.hs... took 0.00s
# Parse of src/Handler/API/Mercury/Recipients.hs... took 0.01s
# Parse of src/Handler/API/Mercury/Transactions.hs... took 0.01s
# Parse of src/Handler/API/Plaid/AuthToken.hs... took 0.00s
# Parse of src/Handler/API/Plaid/Common.hs... took 0.01s
# Parse of src/Handler/API/Plaid/Transactions.hs... took 0.01s
src/Handler/API/Plaid/Transactions.hs:112:37-57: Suggestion: Avoid lambda using `infix`
Found:
(\ p -> p >>= readMay)
Perhaps:
(>>= readMay)
src/Handler/API/Plaid/Transactions.hs:117:37-57: Suggestion: Avoid lambda using `infix`
Found:
(\ p -> p >>= readMay)
Perhaps:
(>>= readMay)
# Parse of src/Handler/API/Plaid/TwoFA.hs... took 0.00s
# Parse of src/Handler/API/Plaid/User.hs... took 0.01s
# Parse of src/Handler/Admin/AdminOmniSearch.hs... took 0.00s
# Parse of src/Handler/Admin/AlphaCodes.hs... took 0.00s
# Parse of src/Handler/Admin/Brex.hs... took 0.00s
# Parse of src/Handler/Admin/Cards.hs... took 0.01s
# Parse of src/Handler/Admin/CloseOrganization.hs... took 0.00s
# Parse of src/Handler/Admin/Manage.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding.hs... took 0.00s
# Parse of src/Handler/Admin/Organization.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationAccounts.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationStatus.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationSummary.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationToggleInternationalFundraiser.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationToggleTeaRoom.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationToggleTopTuna.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationTransactions.hs... took 0.03s
# Parse of src/Handler/Admin/OrganizationUser.hs... took 0.00s
# Parse of src/Handler/Admin/PPP.hs... took 0.02s
# Parse of src/Handler/Admin/Postgresque.hs... took 0.00s
# Parse of src/Handler/Admin/SearchForUser.hs... took 0.00s
# Parse of src/Handler/Admin/Statement.hs... took 0.00s
# Parse of src/Handler/Admin/Support.hs... took 0.00s
# Parse of src/Handler/Admin/ToggleShipCardsToOrg.hs... took 0.00s
# Parse of src/Handler/Admin/UpdateAdminOnboardingNote.hs... took 0.00s
# Parse of src/Handler/Admin/User.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/About.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/BeneficialOwnerGenerateShareLink.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/BeneficialOwnerIdReuploadReceived.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/BeneficialOwnerIndex.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/BusinessDetailsRequest.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/FlagBeneficialOwnerForIdReupload.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/FlagOrganizationForDocReupload.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/GetData.hs... took 0.01s
# Parse of src/Handler/Admin/Onboarding/MoveBack.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/OnboardingRequests.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/Purge.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/Reject.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/Reservation.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/ReuploadBeneficialOwnerIdentityDocument.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/SetData.hs... took 0.01s
# Parse of src/Handler/Admin/Onboarding/Submit.hs... took 0.01s
# Parse of src/Handler/Admin/Onboarding/GetData/Esqueleto.hs... took 0.01s
# Parse of src/Handler/Admin/Onboarding/OnboardingRequests/Automated.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/OnboardingRequests/BusinessDetailsRequest.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/OnboardingRequests/IdentityVerificationRequest.hs... took 0.00s
# Parse of src/Handler/Admin/Onboarding/OnboardingRequests/Types.hs... took 0.00s
# Parse of src/Handler/Admin/OrganizationTransactions/EsqueletoExperimental.hs... took 0.00s
# Parse of src/Handler/Admin/Treasury/Alerts.hs... took 0.00s
# Parse of src/Handler/Admin/Treasury/Onboarding.hs... took 0.00s
# Parse of src/Handler/Admin/Treasury/Proposals.hs... took 0.01s
# Parse of src/Handler/Admin/Treasury/Sketch.hs... took 0.00s
# Parse of src/Handler/Admin/Treasury/Onboarding/GetFormData.hs... took 0.00s
# Parse of src/Handler/Admin/Treasury/Onboarding/SetFormData.hs... took 0.00s
# Parse of src/Handler/Authentication/Biometrics.hs... took 0.00s
# Parse of src/Handler/Authentication/CheckCallsign.hs... took 0.00s
# Parse of src/Handler/Authentication/CreateMFAResetCodes.hs... took 0.00s
# Parse of src/Handler/Authentication/Sessions.hs... took 0.01s
# Parse of src/Handler/Authentication/Signup.hs... took 0.01s
# Parse of src/Handler/Authentication/Email/Change.hs... took 0.00s
# Parse of src/Handler/Authentication/OAuth/Integration.hs... took 0.00s
src/Handler/Authentication/OAuth/Integration.hs:117:24-81: Warning: Redundant <$>
Found:
getTemporaryCredential oauth =<< appHttpManager <$> getApp
Perhaps:
getTemporaryCredential oauth . appHttpManager =<< getApp
# Parse of src/Handler/Authentication/OAuth/V1.hs... took 0.00s
# Parse of src/Handler/Authentication/Password/Change.hs... took 0.00s
# Parse of src/Handler/Authentication/Password/CheckResetCode.hs... took 0.00s
# Parse of src/Handler/Authentication/Password/Forgot.hs... took 0.00s
# Parse of src/Handler/Authentication/Password/Pwned.hs... took 0.00s
# Parse of src/Handler/Authentication/Password/Reset.hs... took 0.00s
# Parse of src/Handler/Authentication/VerifyEmail/Resend.hs... took 0.00s
# Parse of src/Handler/Authentication/VerifyEmail/Verify.hs... took 0.00s
# Parse of src/Handler/Banking/AccountGraphData.hs... took 0.00s
# Parse of src/Handler/Banking/AddRecipient.hs... took 0.03s
# Parse of src/Handler/Banking/CancelPayment.hs... took 0.00s
# Parse of src/Handler/Banking/CreateCheckingAccount.hs... took 0.00s
# Parse of src/Handler/Banking/DebitCards.hs... took 0.01s
# Parse of src/Handler/Banking/DeleteRecipient.hs... took 0.00s
# Parse of src/Handler/Banking/DismissFailedTransaction.hs... took 0.00s
# Parse of src/Handler/Banking/EditAccountNickname.hs... took 0.00s
# Parse of src/Handler/Banking/EditRecipient.hs... took 0.00s
# Parse of src/Handler/Banking/Feature.hs... took 0.00s
# Parse of src/Handler/Banking/GetBankAccountTransactions.hs... took 0.00s
# Parse of src/Handler/Banking/GetInitialData.hs... took 0.01s
# Parse of src/Handler/Banking/GetOrganizationDashboardOverview.hs... took 0.00s
# Parse of src/Handler/Banking/GetPaymentCardTransactions.hs... took 0.00s
# Parse of src/Handler/Banking/GetPayments.hs... took 0.00s
# Parse of src/Handler/Banking/Limit.hs... took 0.01s
# Parse of src/Handler/Banking/QuickbooksExport.hs... took 0.00s
# Parse of src/Handler/Banking/SearchTransactions.hs... took 0.00s
src/Handler/Banking/SearchTransactions.hs:22:8-41: Warning: Redundant fmap
Found:
fmap cs mPayloadT >>= decodeStrict
Perhaps:
mPayloadT >>= decodeStrict . cs
# Parse of src/Handler/Banking/SendMoney.hs... took 0.02s
# Parse of src/Handler/Banking/SendMoneyReceipt.hs... took 0.02s
# Parse of src/Handler/Banking/TransferMoney.hs... took 0.01s
src/Handler/Banking/TransferMoney.hs:(167,11)-(168,39): Warning: Redundant <$>
Found:
TransferMoneyResponse <$> pure mercuryAccountData
Perhaps:
pure (TransferMoneyResponse mercuryAccountData)
# Parse of src/Handler/Banking/UnlinkAccount.hs... took 0.00s
# Parse of src/Handler/Banking/UpdateTransaction.hs... took 0.00s
# Parse of src/Handler/Banking/UpdateTransactionParty.hs... took 0.00s
# Parse of src/Handler/Banking/WireDetails.hs... took 0.00s
# Parse of src/Handler/Banking/Accounts/CloseAccount.hs... took 0.00s
# Parse of src/Handler/Banking/Accounts/Letters.hs... took 0.00s
# Parse of src/Handler/Banking/GetInitialData/Esqueleto.hs... took 0.00s
# Parse of src/Handler/Banking/RoutingNumber/GetRoutingNumber.hs... took 0.00s
# Parse of src/Handler/Banking/RoutingNumber/Types.hs... took 0.00s
# Parse of src/Handler/Banking/Statements/GetStatement.hs... took 0.00s
# Parse of src/Handler/Banking/Statements/ListStatements.hs... took 0.01s
# Parse of src/Handler/CurrencyCloud/V2/Notification.hs... took 0.00s
# Parse of src/Handler/CurrencyCloud/V2/Notification/Payment.hs... took 0.00s
# Parse of src/Handler/Dialpad/Webhook.hs... took 0.00s
# Parse of src/Handler/Front/Webhook.hs... took 0.00s
# Parse of src/Handler/Onboarding/About.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner.hs... took 0.00s
# Parse of src/Handler/Onboarding/BusinessDetailsRequest.hs... took 0.00s
# Parse of src/Handler/Onboarding/BusinessNames.hs... took 0.00s
# Parse of src/Handler/Onboarding/ConfirmAllowedIndustry.hs... took 0.00s
# Parse of src/Handler/Onboarding/ContactDetails.hs... took 0.00s
# Parse of src/Handler/Onboarding/ExpectedServices.hs... took 0.00s
# Parse of src/Handler/Onboarding/FormationDetails.hs... took 0.00s
# Parse of src/Handler/Onboarding/GetData.hs... took 0.00s
# Parse of src/Handler/Onboarding/GetSummary.hs... took 0.00s
# Parse of src/Handler/Onboarding/IdentityVerificationRequest.hs... took 0.00s
# Parse of src/Handler/Onboarding/Investors.hs... took 0.00s
# Parse of src/Handler/Onboarding/OnboardingRequests.hs... took 0.00s
# Parse of src/Handler/Onboarding/Submit.hs... took 0.01s
# Parse of src/Handler/Onboarding/Sync.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner/Create.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner/Delete.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner/NonUser/Esqueleto.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner/NonUser/Info.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner/NonUser/Link.hs... took 0.00s
# Parse of src/Handler/Onboarding/BeneficialOwner/NonUser/Update.hs... took 0.00s
# Parse of src/Handler/Onboarding/OnboardingRequests/BusinessDetailsRequest.hs... took 0.00s
# Parse of src/Handler/Onboarding/OnboardingRequests/IdentityVerificationRequest.hs... took 0.00s
# Parse of src/Handler/Onboarding/Purge/Common.hs... took 0.00s
# Parse of src/Handler/Onboarding/Purge/Organization.hs... took 0.00s
# Parse of src/Handler/Onboarding/Purge/User.hs... took 0.00s
# Parse of src/Handler/PPP/Application.hs... took 0.00s
# Parse of src/Handler/PPP/FileUpload.hs... took 0.00s
# Parse of src/Handler/Persona/Webhook.hs... took 0.00s
# Parse of src/Handler/Plaid/ExchangePublicToken.hs... took 0.03s
# Parse of src/Handler/Plaid/GetFinancialInstitutions.hs... took 0.00s
# Parse of src/Handler/Plaid/RetrieveAuth.hs... took 0.00s
# Parse of src/Handler/Plaid/RetrieveBalance.hs... took 0.00s
# Parse of src/Handler/Plaid/RetrieveIdentity.hs... took 0.01s
# Parse of src/Handler/Plaid/RetrieveTransactions.hs... took 0.00s
# Parse of src/Handler/PostOnboarding/AddFunds.hs... took 0.00s
# Parse of src/Handler/PostOnboarding/Address.hs... took 0.00s
# Parse of src/Handler/PostOnboarding/DebitCards.hs... took 0.00s
# Parse of src/Handler/PostOnboarding/GetPostOnboardingData.hs... took 0.00s
# Parse of src/Handler/PostOnboarding/SaveTeam.hs... took 0.00s
# Parse of src/Handler/PushNotifications/AddToken.hs... took 0.00s
# Parse of src/Handler/Settings/NotificationPreferences.hs... took 0.01s
# Parse of src/Handler/Synapse/Clean.hs... took 0.00s
# Parse of src/Handler/Synapse/Webhook.hs... took 0.01s
# Parse of src/Handler/Team/Invites.hs... took 0.01s
src/Handler/Team/Invites.hs:251:14-55: Warning: Use Just
Found:
fromMaybe False inviteParamsCanAddAccounts
Perhaps:
Just True == inviteParamsCanAddAccounts
src/Handler/Team/Invites.hs:252:14-54: Warning: Use Just
Found:
fromMaybe False inviteParamsCanChangeTeam
Perhaps:
Just True == inviteParamsCanChangeTeam
src/Handler/Team/Invites.hs:254:14-56: Warning: Use Just
Found:
fromMaybe False inviteParamsCanViewPayments
Perhaps:
Just True == inviteParamsCanViewPayments
src/Handler/Team/Invites.hs:255:14-60: Warning: Use Just
Found:
fromMaybe False inviteParamsCanResetTeammate2fa
Perhaps:
Just True == inviteParamsCanResetTeammate2fa
src/Handler/Team/Invites.hs:256:14-56: Warning: Use Just
Found:
fromMaybe False inviteParamsCanAddApiTokens
Perhaps:
Just True == inviteParamsCanAddApiTokens
# Parse of src/Handler/Team/RemoveUser.hs... took 0.00s
# Parse of src/Handler/Team/UpdatePermissions.hs... took 0.00s
# Parse of src/Handler/Team/InvitedUsers/BeneficialOwnerData.hs... took 0.00s
# Parse of src/Handler/Treasury/Onboarding.hs... took 0.01s
# Parse of src/Handler/Treasury/Treasury.hs... took 0.01s
# Parse of src/Handler/Treasury/Onboarding/BeneficialOwner.hs... took 0.01s
# Parse of src/Handler/Treasury/Onboarding/Types.hs... took 0.01s
# Parse of src/Handler/Uploads/BusinessNameDocument.hs... took 0.00s
# Parse of src/Handler/Uploads/CheckImage.hs... took 0.02s
# Parse of src/Handler/Uploads/ConvertImage.hs... took 0.00s
# Parse of src/Handler/Uploads/Core.hs... took 0.01s
# Parse of src/Handler/Uploads/EinDocument.hs... took 0.00s
# Parse of src/Handler/Uploads/EntityFormation.hs... took 0.00s
# Parse of src/Handler/Uploads/Identification.hs... took 0.00s
# Parse of src/Handler/Uploads/Types.hs... took 0.00s
# Parse of src/Handler/User/ShippingAddress.hs... took 0.00s
# Parse of src/Handler/Util/AppHelpers.hs... took 0.00s
# Parse of src/Handler/Util/Cookie.hs... took 0.00s
src/Handler/Util/Cookie.hs:37:3-74: Warning: Redundant <$>
Found:
parseMaybe parser
=<< toLower . decodeUtf8 <$> Wai.requestHeaderHost req
Perhaps:
parseMaybe parser . toLower . decodeUtf8
=<< Wai.requestHeaderHost req
# Parse of src/Handler/Util/JSONError.hs... took 0.00s
# Parse of src/Handler/Util/JSONParsing.hs... took 0.00s
# Parse of src/Import/Handler.hs... took 0.00s
# Parse of src/Import/NoFoundation.hs... took 0.00s
# Parse of src/Import/PreModel.hs... took 0.00s
# Parse of src/Import/TotpCommon.hs... took 0.00s
# Parse of src/Import/Typescript.hs... took 0.00s
# Parse of src/Mailer/Mailer.hs... took 0.00s
# Parse of src/Mailer/Subscription.hs... took 0.00s
src/Mailer/Subscription.hs:63:26-54: Warning: Use Just
Found:
fromMaybe True userSubscribed
Perhaps:
Just False /= userSubscribed
# Parse of src/Mailer/Validate.hs... took 0.00s
# Parse of src/Mailer/Admin/AdminAdded.hs... took 0.00s
# Parse of src/Mailer/Admin/NewBeneficialOwner.hs... took 0.00s
# Parse of src/Mailer/Admin/Onboarding.hs... took 0.00s
# Parse of src/Mailer/Authentication/ChangedPassword.hs... took 0.00s
# Parse of src/Mailer/Authentication/ForgotPassword.hs... took 0.00s
# Parse of src/Mailer/Authentication/UsedMFAResetCode.hs... took 0.00s
# Parse of src/Mailer/Authentication/VerifyEmail.hs... took 0.00s
# Parse of src/Mailer/BadWires/BadWires.hs... took 0.00s
# Parse of src/Mailer/Banking/BrexUnderwriting.hs... took 0.00s
# Parse of src/Mailer/Banking/Common.hs... took 0.00s
# Parse of src/Mailer/Banking/RecipientCheckPayment.hs... took 0.00s
# Parse of src/Mailer/Banking/RecipientElectronicPayment.hs... took 0.00s
# Parse of src/Mailer/Banking/SendDebitCardFrozen.hs... took 0.00s
# Parse of src/Mailer/Banking/SendLowBalance.hs... took 0.00s
# Parse of src/Mailer/Banking/SendStaleCheck.hs... took 0.00s
# Parse of src/Mailer/Banking/SendTransactionFailed.hs... took 0.01s
# Parse of src/Mailer/Banking/SendTransactionRequiresDetailedPurpose.hs... took 0.00s
# Parse of src/Mailer/Banking/SendTransactionStarted.hs... took 0.01s
src/Mailer/Banking/SendTransactionStarted.hs:(265,24)-(270,32): Warning: Use Just
Found:
fromMaybe True
$ case amount of
CreditAmount amountDollars
-> do pure
$ positiveDollarToDollar amountDollars >= minIncoming thresholds
DebitAmount amountDollars
-> do pure
$ positiveDollarToDollar amountDollars >= minOutgoing thresholds
ZeroAmount -> pure False
Perhaps:
Just False
/=
(case amount of
CreditAmount amountDollars
-> do pure
$ positiveDollarToDollar amountDollars >= minIncoming thresholds
DebitAmount amountDollars
-> do pure
$ positiveDollarToDollar amountDollars >= minOutgoing thresholds
ZeroAmount -> pure False)
# Parse of src/Mailer/Layout/Notice.hs... took 0.00s
# Parse of src/Mailer/Onboarding/AccountApproved.hs... took 0.00s
# Parse of src/Mailer/Onboarding/AdjunctUserApproved.hs... took 0.00s
# Parse of src/Mailer/Onboarding/BeneficialOwner.hs... took 0.00s
# Parse of src/Mailer/Onboarding/BeneficialOwnersCompletedSharedForm.hs... took 0.00s
# Parse of src/Mailer/Onboarding/DebitCardShipped.hs... took 0.00s
# Parse of src/Mailer/Onboarding/SendAPIPartnerInvite.hs... took 0.00s
# Parse of src/Mailer/Onboarding/SendInvite.hs... took 0.00s
# Parse of src/Mailer/Treasury/ApexLargeTrades.hs... took 0.00s
# Parse of src/Mercury/AddressUtils.hs... took 0.00s
# Parse of src/Mercury/Addresses.hs... took 0.00s
# Parse of src/Mercury/AesonUtils.hs... took 0.01s
# Parse of src/Mercury/ApplicativeUtils.hs... took 0.00s
# Parse of src/Mercury/BeneficialOwners.hs... took 0.00s
# Parse of src/Mercury/Casing.hs... took 0.00s
# Parse of src/Mercury/Cryptable.hs... took 0.01s
# Parse of src/Mercury/DailyRecords.hs... took 0.00s
# Parse of src/Mercury/DayUtils.hs... took 0.00s
# Parse of src/Mercury/Display.hs... took 0.00s
# Parse of src/Mercury/Errors.hs... took 0.00s
# Parse of src/Mercury/EsqueletoUtils.hs... took 0.00s
# Parse of src/Mercury/FakeData.hs... took 0.04s
# Parse of src/Mercury/FederalHolidays.hs... took 0.00s
# Parse of src/Mercury/GithubLink.hs... took 0.00s
# Parse of src/Mercury/ICalendar.hs... took 0.00s
# Parse of src/Mercury/Onboarding.hs... took 0.00s
# Parse of src/Mercury/OrganizationAddresses.hs... took 0.00s
src/Mercury/OrganizationAddresses.hs:125:20-78: Warning: Use Just
Found:
fromMaybe False (overrideDeliverability editAddressPayload)
Perhaps:
(Just True == overrideDeliverability editAddressPayload)
# Parse of src/Mercury/Organizations.hs... took 0.01s
# Parse of src/Mercury/PasswordReset.hs... took 0.00s
# Parse of src/Mercury/PersistentUtils.hs... took 0.01s
# Parse of src/Mercury/SicknessScore.hs... took 0.01s
# Parse of src/Mercury/Slack.hs... took 0.01s
# Parse of src/Mercury/StmUtils.hs... took 0.00s
# Parse of src/Mercury/SwiftUtils.hs... took 0.00s
# Parse of src/Mercury/TupleUtils.hs... took 0.00s
# Parse of src/Mercury/Users.hs... took 0.00s
# Parse of src/Mercury/Validation.hs... took 0.00s
# Parse of src/Mercury/VerifyEmail.hs... took 0.00s
# Parse of src/Mercury/XmlbfUtils.hs... took 0.00s
# Parse of src/Mercury/API/Common.hs... took 0.00s
# Parse of src/Mercury/API/Clerky/ExternalOnboardingData.hs... took 0.00s
# Parse of src/Mercury/API/External/Esqueleto.hs... took 0.00s
# Parse of src/Mercury/API/External/Types.hs... took 0.01s
# Parse of src/Mercury/API/Plaid/Esqueleto.hs... took 0.00s
src/Mercury/API/Plaid/Esqueleto.hs:(66,15)-(68,95): Warning: Redundant ^.
Found:
settledTrx &&. transactionMetadata
^.
TransactionMetadataPostedAt >=. (val $ Just startDate)
&&. transactionMetadata
^. TransactionMetadataPostedAt <=. (val $ Just endDate)
Perhaps:
(settledTrx &&. transactionMetadata)
^.
((TransactionMetadataPostedAt >=. (val $ Just startDate)
&&. transactionMetadata)
. (TransactionMetadataPostedAt <=. (val $ Just endDate)))
src/Mercury/API/Plaid/Esqueleto.hs:(70,21)-(71,93): Warning: Redundant ^.
Found:
transactionMetadata
^.
TransactionMetadataCreatedAt >=. val startDate
&&. transactionMetadata
^. TransactionMetadataCreatedAt <=. val endDate
Perhaps:
transactionMetadata
^.
((TransactionMetadataCreatedAt >=. val startDate
&&. transactionMetadata)
. (TransactionMetadataCreatedAt <=. val endDate))
# Parse of src/Mercury/Admin/AuditTrail.hs... took 0.00s
# Parse of src/Mercury/Admin/AuditTrail/Sql.hs... took 0.00s
# Parse of src/Mercury/Admin/BeneficialOwners/Esqueleto.hs... took 0.00s
# Parse of src/Mercury/Authentication/AlphaCodes.hs... took 0.00s
# Parse of src/Mercury/Authentication/Passwords.hs... took 0.00s
# Parse of src/Mercury/Authentication/PermanentCookieIdentifier.hs... took 0.00s
# Parse of src/Mercury/Authentication/RememberedDevices.hs... took 0.00s
# Parse of src/Mercury/Authentication/UserIpAddress.hs... took 0.00s
# Parse of src/Mercury/Authentication/MFAReset/Core.hs... took 0.00s
# Parse of src/Mercury/Authentication/MFAReset/DB.hs... took 0.00s
# Parse of src/Mercury/Authentication/OAuth/V1/RSA.hs... took 0.00s
# Parse of src/Mercury/Authentication/OAuth/V1/Types.hs... took 0.00s
# Parse of src/Mercury/Authentication/OAuth/V1/Xero.hs... took 0.01s
src/Mercury/Authentication/OAuth/V1/Xero.hs:51:27-84: Warning: Redundant <$>
Found:
readMay =<< decodeUtf8 <$> lookup "oauth_expires_in" creds
Perhaps:
readMay . decodeUtf8 =<< lookup "oauth_expires_in" creds
src/Mercury/Authentication/OAuth/V1/Xero.hs:171:15-68: Warning: Redundant <$>
Found:
getAccessToken oauth req =<< appHttpManager <$> getApp
Perhaps:
getAccessToken oauth req . appHttpManager =<< getApp
# Parse of src/Mercury/Authentication/Sessions/CookieKeys.hs... took 0.00s
# Parse of src/Mercury/Authentication/Sessions/Interface.hs... took 0.00s
# Parse of src/Mercury/Authentication/Sessions/Server/Core.hs... took 0.00s
# Parse of src/Mercury/Authentication/Sessions/Server/DB.hs... took 0.00s
# Parse of src/Mercury/Banking/BankNameFromRoutingNumber.hs... took 0.00s
# Parse of src/Mercury/Banking/Common.hs... took 0.03s
# Parse of src/Mercury/Banking/OrganizationDashboardOverview.hs... took 0.00s
# Parse of src/Mercury/Banking/Quickbooks.hs... took 0.00s
# Parse of src/Mercury/Banking/ScheduledPayment.hs... took 0.00s
# Parse of src/Mercury/Banking/SearchTransactions.hs... took 0.01s
src/Mercury/Banking/SearchTransactions.hs:304:20-120: Suggestion: Use maybe
Found:
map
(toWhere_ metadata party counterparty debitCardPayment)
(fromMaybe [] (searchTerm filterPayload))
Perhaps:
maybe
[] (map (toWhere_ metadata party counterparty debitCardPayment))
(searchTerm filterPayload)
# Parse of src/Mercury/Banking/Sql.hs... took 0.04s
src/Mercury/Banking/Sql.hs:(90,9)-(91,55): Warning: Redundant ^.
Found:
plaidItem
^. PlaidItemOrganizationId `in_` valList orgIdList &&. plaidAccount
^. PlaidAccountMarkedDeleted
Perhaps:
(plaidItem
^.
((PlaidItemOrganizationId `in_` valList orgIdList &&. plaidAccount)
. PlaidAccountMarkedDeleted))
src/Mercury/Banking/Sql.hs:(115,9)-(116,46): Warning: Redundant ^.
Found:
mercuryAccount
^.
MercuryAccountOrganizationId `in_` valList orgIdList
&&. bankAccount
^. BankAccountStatus
Perhaps:
(mercuryAccount
^.
((MercuryAccountOrganizationId `in_` valList orgIdList
&&. bankAccount)
. BankAccountStatus))
src/Mercury/Banking/Sql.hs:(126,9)-(127,46): Warning: Redundant ^.
Found:
mercuryAccount
^.
MercuryAccountOrganizationId `in_` valList orgIdList
&&. bankAccount
^. BankAccountStatus
Perhaps:
(mercuryAccount
^.
((MercuryAccountOrganizationId `in_` valList orgIdList
&&. bankAccount)
. BankAccountStatus))
src/Mercury/Banking/Sql.hs:(285,9)-(286,46): Warning: Redundant ^.
Found:
externalAccount
^.
ExternalAccountOrganizationId `in_` valList orgIdList
&&. bankAccount
^. BankAccountStatus
Perhaps:
(externalAccount
^.
((ExternalAccountOrganizationId `in_` valList orgIdList
&&. bankAccount)
. BankAccountStatus))
src/Mercury/Banking/Sql.hs:(379,54)-(384,149): Warning: Redundant ^.
Found:
val ExternalAccountKind &&. transactionParty
^.
TransactionPartyOrganizationId `in_` valList orgIdList
&&. plaidAccount
^.
PlaidAccountMarkedDeleted !=. val True
&&.
coalesceDefault
[plaidAccount ^. PlaidAccountAccountType]
(val [compileNonEmptyText|depository|])
!=. val [compileNonEmptyText|credit|]
Perhaps:
((val ExternalAccountKind &&. transactionParty)
^.
((TransactionPartyOrganizationId `in_` valList orgIdList
&&. plaidAccount)
. (PlaidAccountMarkedDeleted !=. val True
&&.
coalesceDefault
[plaidAccount ^. PlaidAccountAccountType]
(val [compileNonEmptyText|depository|])
!=. val [compileNonEmptyText|credit|])))
src/Mercury/Banking/Sql.hs:(589,9)-(591,42): Warning: Redundant ^.
Found:
(orgUser ^. OrganizationUserId) `in_` valList orgUserIdList
&&. debitCard
^. DebitCardStatus `in_` valList acceptableStatuses &&. debitCard
^. DebitCardUserId
Perhaps:
(((orgUser ^. OrganizationUserId) `in_` valList orgUserIdList
&&. debitCard)
^.
((DebitCardStatus `in_` valList acceptableStatuses &&. debitCard)
. DebitCardUserId))
src/Mercury/Banking/Sql.hs:(591,48)-(592,72): Warning: Redundant ^.
Found:
orgUser ^. OrganizationUserUserId &&. debitCard
^. DebitCardRealm `in_` valList acceptableRealms
Perhaps:
(orgUser
^.
((OrganizationUserUserId &&. debitCard)
. (DebitCardRealm `in_` valList acceptableRealms)))
src/Mercury/Banking/Sql.hs:(732,9)-(733,100): Warning: Redundant ^.
Found:
mercuryAccount
^.
MercuryAccountOrganizationId `in_` valList orgIdList &&. debitCard
^.
DebitCardStatus
`notIn` valList [Card.StatusCancelled, Card.StatusLocked]
Perhaps:
(mercuryAccount
^.
((MercuryAccountOrganizationId `in_` valList orgIdList
&&. debitCard)
. (DebitCardStatus
`notIn` valList [Card.StatusCancelled, Card.StatusLocked])))
src/Mercury/Banking/Sql.hs:1479:32-140: Warning: Redundant ^.
Found:
mercuryAccount
^. MercuryAccountAvailableBalance >. lowBalanceNotification
^. LowBalanceNotificationThreshold
Perhaps:
mercuryAccount
^.
((MercuryAccountAvailableBalance >. lowBalanceNotification)
. LowBalanceNotificationThreshold)
# Parse of src/Mercury/Banking/UserSecurityLogging.hs... took 0.00s
# Parse of src/Mercury/Banking/Types/Accounts.hs... took 0.00s
# Parse of src/Mercury/Banking/Types/Cards.hs... took 0.01s
# Parse of src/Mercury/Banking/Types/Core.hs... took 0.03s
# Parse of src/Mercury/Banking/Types/ExternalAccounts.hs... took 0.00s
# Parse of src/Mercury/Banking/Types/Organizations.hs... took 0.00s
# Parse of src/Mercury/Banking/Types/Recipients.hs... took 0.00s
# Parse of src/Mercury/Banking/Types/Transactions.hs... took 0.00s
# Parse of src/Mercury/Banking/Types/Transfers.hs... took 0.00s
# Parse of src/Mercury/BannedRecipients/BanList.hs... took 0.00s
# Parse of src/Mercury/BannedRecipients/Handler.hs... took 0.00s
# Parse of src/Mercury/Brex/AccountData.hs... took 0.01s
# Parse of src/Mercury/CountrySpecific/Chile.hs... took 0.00s
# Parse of src/Mercury/CountrySpecific/Colombia.hs... took 0.00s
# Parse of src/Mercury/CountrySpecific/Singapore.hs... took 0.00s
# Parse of src/Mercury/Data/Char.hs... took 0.00s
# Parse of src/Mercury/Database/Exceptions.hs... took 0.00s
# Parse of src/Mercury/Database/Idempotency.hs... took 0.00s
# Parse of src/Mercury/Database/SafeDelete.hs... took 0.00s
# Parse of src/Mercury/Database/Persist/DeriveEnum.hs... took 0.00s
# Parse of src/Mercury/Frontend/Routes.hs... took 0.00s
# Parse of src/Mercury/IOS/Alerts.hs... took 0.00s
# Parse of src/Mercury/IOS/Generate.hs... took 0.01s
# Parse of src/Mercury/Image/Convert.hs... took 0.01s
# Parse of src/Mercury/Image/Metadata.hs... took 0.00s
# Parse of src/Mercury/Metrics/Helpers.hs... took 0.00s
# Parse of src/Mercury/Network/Logging.hs... took 0.01s
# Parse of src/Mercury/Network/SFTP.hs... took 0.00s
# Parse of src/Mercury/Network/Utils.hs... took 0.00s
# Parse of src/Mercury/Network/Bugsnag/Core.hs... took 0.00s
# Parse of src/Mercury/Network/Bugsnag/DB.hs... took 0.00s
# Parse of src/Mercury/Network/Bugsnag/Handler.hs... took 0.00s
# Parse of src/Mercury/Network/VGS/Manager.hs... took 0.00s
# Parse of src/Mercury/Network/Wai/Middleware/Cors.hs... took 0.00s
# Parse of src/Mercury/Network/Wai/Middleware/HostCheck.hs... took 0.00s
# Parse of src/Mercury/Network/Wai/Middleware/Metrics.hs... took 0.00s
# Parse of src/Mercury/Network/Wai/Middleware/OriginCheck.hs... took 0.00s
# Parse of src/Mercury/Network/Wai/Middleware/SkipMiddlewareWhen.hs... took 0.00s
# Parse of src/Mercury/Onboarding/BeneficialOwnerIncremental.hs... took 0.00s
# Parse of src/Mercury/Onboarding/BusinessDetailsRequest.hs... took 0.00s
# Parse of src/Mercury/Onboarding/FileMetadata.hs... took 0.01s
# Parse of src/Mercury/Onboarding/Sql.hs... took 0.01s
src/Mercury/Onboarding/Sql.hs:185:66-100: Suggestion: Use <=<
Found:
(mkNonEmptyText =<<) . _benAddress1
Perhaps:
mkNonEmptyText Control.Monad.<=< _benAddress1
src/Mercury/Onboarding/Sql.hs:186:66-100: Suggestion: Use <=<
Found:
(mkNonEmptyText =<<) . _benAddress2
Perhaps:
mkNonEmptyText Control.Monad.<=< _benAddress2
src/Mercury/Onboarding/Sql.hs:187:62-92: Suggestion: Use <=<
Found:
(mkNonEmptyText =<<) . _benCity
Perhaps:
mkNonEmptyText Control.Monad.<=< _benCity
src/Mercury/Onboarding/Sql.hs:189:68-104: Suggestion: Use <=<
Found:
(mkNonEmptyText =<<) . _benPostalCode
Perhaps:
mkNonEmptyText Control.Monad.<=< _benPostalCode
# Parse of src/Mercury/Onboarding/BusinessDetailsRequest/Types.hs... took 0.00s
# Parse of src/Mercury/Onboarding/IdentityVerificationRequest/Sql.hs... took 0.00s
# Parse of src/Mercury/Onboarding/IdentityVerificationRequest/Types.hs... took 0.00s
# Parse of src/Mercury/Onboarding/Persona/Sql.hs... took 0.00s
# Parse of src/Mercury/PDF/AccountClosedLetter.hs... took 0.00s
# Parse of src/Mercury/PDF/BankLetter.hs... took 0.00s
# Parse of src/Mercury/PDF/Core.hs... took 0.00s
# Parse of src/Mercury/PDF/InternationalWireRecipientAgreement.hs... took 0.00s
# Parse of src/Mercury/PDF/OutgoingWireInstructions.hs... took 0.00s
# Parse of src/Mercury/PDF/Puppeteer.hs... took 0.00s
# Parse of src/Mercury/PDF/WireDetails.hs... took 0.00s
src/Mercury/PDF/WireDetails.hs:49:18-65: Suggestion: Avoid lambda using `infix`
Found:
(\ c -> CharSet.member c validFilenameCharacters)
Perhaps:
(`CharSet.member` validFilenameCharacters)
# Parse of src/Mercury/PPP/DatabaseTypes.hs... took 0.00s
# Parse of src/Mercury/PPP/Sql.hs... took 0.00s
# Parse of src/Mercury/Plaid/HistoricalBalances.hs... took 0.00s
# Parse of src/Mercury/Plaid/UpdatePlaidAccounts.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/CreatePublicToken.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/ExchangePublicToken.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/GetAllCategories.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/GetFinancialInstitutions.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/RetrieveAuth.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/RetrieveBalance.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/RetrieveIdentity.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/RetrieveItem.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/RetrieveTransactions.hs... took 0.00s
# Parse of src/Mercury/Plaid/HTTP/WebhookNotifications.hs... took 0.00s
# Parse of src/Mercury/Plaid/Types/Account.hs... took 0.00s
# Parse of src/Mercury/Plaid/Types/Core.hs... took 0.01s
# Parse of src/Mercury/Plaid/Types/Institution.hs... took 0.00s
# Parse of src/Mercury/Plaid/Types/Item.hs... took 0.00s
# Parse of src/Mercury/Plaid/Types/Transaction.hs... took 0.00s
# Parse of src/Mercury/Plaid/Utils/HTTP.hs... took 0.00s
# Parse of src/Mercury/PostOnboarding/CompletionStatus.hs... took 0.00s
# Parse of src/Mercury/PostOnboarding/Esqueleto.hs... took 0.00s
# Parse of src/Mercury/PostOnboarding/Sql.hs... took 0.00s
# Parse of src/Mercury/Purpose/DB.hs... took 0.00s
# Parse of src/Mercury/Purpose/Handler.hs... took 0.00s
# Parse of src/Mercury/Purpose/Proxy.hs... took 0.00s
# Parse of src/Mercury/Purpose/Types.hs... took 0.00s
# Parse of src/Mercury/SicknessScore/Types.hs... took 0.00s
# Parse of src/Mercury/Statement/Generate.hs... took 0.01s
src/Mercury/Statement/Generate.hs:31:18-33: Suggestion: Avoid lambda using `infix`
Found:
(\ c -> c /= ' ')
Perhaps:
(/= ' ')
# Parse of src/Mercury/Statement/GenerateMercuryBackend.hs... took 0.00s
# Parse of src/Mercury/Statement/GenerateSynapseBackend.hs... took 0.01s
# Parse of src/Mercury/Statement/Sql.hs... took 0.00s
# Parse of src/Mercury/Statement/StatementData.hs... took 0.00s
# Parse of src/Mercury/Team/Esqueleto.hs... took 0.00s
# Parse of src/Mercury/Team/Invites.hs... took 0.00s
# Parse of src/Mercury/Treasury/RebalanceWorker.hs... took 0.00s
# Parse of src/Mercury/Treasury/Rebalancer.hs... took 0.03s
# Parse of src/Mercury/Treasury/Return.hs... took 0.00s
# Parse of src/Mercury/Treasury/ReturnCalculation.hs... took 0.00s
# Parse of src/Mercury/Treasury/Sql.hs... took 0.00s
# Parse of src/Mercury/Treasury/Statements.hs... took 0.00s
# Parse of src/Mercury/Treasury/Types.hs... took 0.00s
# Parse of src/Mercury/Treasury/Yield.hs... took 0.00s
# Parse of src/Mercury/Treasury/Onboarding/FrontendTypes.hs... took 0.00s
# Parse of src/Mercury/Treasury/Onboarding/Types.hs... took 0.00s
# Parse of src/Mercury/Typescript/Orphans.hs... took 0.00s
# Parse of src/Mercury/Typescript/Generate/Core.hs... took 0.00s
# Parse of src/Mercury/Typescript/Generate/Generate.hs... took 0.03s
# Parse of src/Mercury/Warp/Bugsnag.hs... took 0.00s
# Parse of src/Mercury/Yesod/ErrorHandler.hs... took 0.00s
# Parse of src/Mercury/Yesod/Middleware/Bugsnag.hs... took 0.00s
# Parse of src/Mercury/Yesod/Middleware/Csrf.hs... took 0.00s
# Parse of src/Mercury/Yesod/Middleware/ServerSessions.hs... took 0.00s
# Parse of src/Mercury/Yesod/Middleware/UTF8Check.hs... took 0.00s
# Parse of src/Mercury/Yesod/Routes/Generator.hs... took 0.00s
# Parse of src/Mercury/Yesod/Routes/Generator/Core.hs... took 0.00s
# Parse of src/Mercury/Yesod/Routes/Generator/Typescript.hs... took 0.00s
# Parse of src/Mercury/Yesod/Routes/Metrics/Function.hs... took 0.00s
# Parse of src/Mercury/Yesod/Routes/Metrics/TH.hs... took 0.00s
# Parse of src/Model/Country.hs... took 0.01s
# Parse of src/Model/CurrencyCloud.hs... took 0.00s
# Parse of src/Model/CustomTypes.hs... took 0.03s
# Parse of src/Model/Dialpad.hs... took 0.00s
# Parse of src/Model/IOS.hs... took 0.00s
# Parse of src/Model/MFAReset.hs... took 0.00s
# Parse of src/Model/Numeric.hs... took 0.01s
# Parse of src/Model/Onboarding.hs... took 0.01s
src/Model/Onboarding.hs:73:12-67: Suggestion: Avoid lambda using `infix`
Found:
(\ c -> CharSet.member c invalidIdentificationCharacters)
Perhaps:
(`CharSet.member` invalidIdentificationCharacters)
# Parse of src/Model/Organization.hs... took 0.00s
# Parse of src/Model/PurposeCode.hs... took 0.00s
# Parse of src/Model/Security.hs... took 0.00s
# Parse of src/Model/USStates.hs... took 0.00s
# Parse of src/Model/UUID.hs... took 0.00s
# Parse of src/Model/CountrySpecific/Australia.hs... took 0.00s
# Parse of src/Model/CountrySpecific/Canada.hs... took 0.00s
# Parse of src/Model/CountrySpecific/India.hs... took 0.00s
# Parse of src/Model/CountrySpecific/Philippines.hs... took 0.00s
# Parse of src/Model/CountrySpecific/Russia.hs... took 0.00s
# Parse of src/Model/CountrySpecific/SouthAfrica.hs... took 0.00s
# Parse of src/Model/CountrySpecific/Uruguay.hs... took 0.00s
# Parse of src/Model/OAuth/V1.hs... took 0.00s
# Parse of src/PersistentModels/Brex.hs... took 0.00s
# Parse of src/PersistentModels/CurrencyCloud.hs... took 0.00s
# Parse of src/PersistentModels/Dialpad.hs... took 0.00s
# Parse of src/PersistentModels/Migrate.hs... took 0.00s
# Parse of src/PersistentModels/OAuth.hs... took 0.00s
# Parse of src/PersistentModels/Persona.hs... took 0.00s
# Parse of src/PersistentModels/Plaid.hs... took 0.00s
# Parse of src/PersistentModels/Xero.hs... took 0.00s
# Parse of src/PersistentModels/Apex/Core.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Bank.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Core.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Depository.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/IOS.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Notifications.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Onboarding.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/OnboardingRequests.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/PPP.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Security.hs... took 0.00s
# Parse of src/PersistentModels/Mercury/Treasury.hs... took 0.00s
# Parse of src/PersistentModels/Synapse/Banking.hs... took 0.00s
# Parse of src/PersistentModels/Synapse/Basic.hs... took 0.00s
# Parse of src/PersistentModels/Synapse/GeneralUser.hs... took 0.00s
# Parse of src/PersistentModels/Synapse/Onboarding.hs... took 0.00s
# Parse of src/Stubs/Http.hs... took 0.00s
# Parse of src/Stubs/Stubs.hs... took 0.00s
# Parse of src/Stubs/Types.hs... took 0.00s
# Parse of src/Stubs/Util.hs... took 0.00s
# Parse of src/Tasks/BackfillSicknessScores.hs... took 0.00s
# Parse of src/Tasks/CheckBalanceConsistency.hs... took 0.00s
# Parse of src/Tasks/CheckDatabaseAssumptions.hs... took 0.01s
src/Tasks/CheckDatabaseAssumptions.hs:313:14-132: Warning: Redundant ^.
Found:
beneficialOwner
^. OnboardingBeneficialOwnerOrganizationId !=. apexBeneficialOwner
^. ApexBeneficialOwnerOrganizationId
Perhaps:
(beneficialOwner
^.
((OnboardingBeneficialOwnerOrganizationId !=. apexBeneficialOwner)
. ApexBeneficialOwnerOrganizationId))
src/Tasks/CheckDatabaseAssumptions.hs:321:14-132: Warning: Redundant ^.
Found:
apexAuthorizedSigner
^. ApexAuthorizedSignerOrganizationId !=. apexBeneficialOwner
^. ApexBeneficialOwnerOrganizationId
Perhaps:
(apexAuthorizedSigner
^.
((ApexAuthorizedSignerOrganizationId !=. apexBeneficialOwner)
. ApexBeneficialOwnerOrganizationId))
src/Tasks/CheckDatabaseAssumptions.hs:329:14-140: Warning: Redundant ^.
Found:
apexCorporateResolution
^. ApexCorporateResolutionOrganizationId !=. apexAuthorizedSigner
^. ApexAuthorizedSignerOrganizationId
Perhaps:
(apexCorporateResolution
^.
((ApexCorporateResolutionOrganizationId !=. apexAuthorizedSigner)
. ApexAuthorizedSignerOrganizationId))
src/Tasks/CheckDatabaseAssumptions.hs:337:14-126: Warning: Redundant ^.
Found:
apexLlcAgreement
^. ApexLlcAgreementOrganizationId !=. apexAuthorizedSigner
^. ApexAuthorizedSignerOrganizationId
Perhaps:
(apexLlcAgreement
^.
((ApexLlcAgreementOrganizationId !=. apexAuthorizedSigner)
. ApexAuthorizedSignerOrganizationId))
# Parse of src/Tasks/CheckLowBalance.hs... took 0.00s
# Parse of src/Tasks/CheckStaleChecks.hs... took 0.00s
# Parse of src/Tasks/CleanTransactionHistory.hs... took 0.00s
# Parse of src/Tasks/DebitCardSpend.hs... took 0.00s
# Parse of src/Tasks/DecryptSsn.hs... took 0.00s
# Parse of src/Tasks/DeleteExpiredAdminOnboardingReservations.hs... took 0.00s
# Parse of src/Tasks/GenerateInternationalPurposeCodes.hs... took 0.00s
# Parse of src/Tasks/GenerateInvestorData.hs... took 0.00s
# Parse of src/Tasks/RequestSynapseApproval.hs... took 0.00s
# Parse of src/Tasks/SendBrexEmails.hs... took 0.00s
# Parse of src/Tasks/SendSynapseWireList.hs... took 0.00s
src/Tasks/SendSynapseWireList.hs:77:17-127: Warning: Use maybe
Found:
genericRunDB . synapseWireDataQuery . fromMaybe now
$ synapseWireEmailCreatedAt . entityVal <$> mostRecentEmail
Perhaps:
(genericRunDB . synapseWireDataQuery)
(maybe now (synapseWireEmailCreatedAt . entityVal) mostRecentEmail)
# Parse of src/Tasks/StuckSynapseCheckDeposits.hs... took 0.00s
# Parse of src/Tasks/SubscribeToDialpadWebhooks.hs... took 0.00s
# Parse of test/FakeDataSpec.hs... took 0.00s
# Parse of test/Gen.hs... took 0.01s
# Parse of test/HspecExtensions.hs... took 0.00s
# Parse of test/Main.hs... took 0.00s
# Parse of test/Spec.hs... took 0.00s
# Parse of test/TestImport.hs... took 0.04s
# Parse of test/Client/ExportSpec.hs... took 0.00s
# Parse of test/Client/Apex/AleSpec.hs... took 0.00s
# Parse of test/Client/Apex/AtlasSpec.hs... took 0.00s
# Parse of test/Client/Apex/AuthSpec.hs... took 0.00s
# Parse of test/Client/Apex/EdocsSpec.hs... took 0.02s
# Parse of test/Client/Apex/EquilibriumSpec.hs... took 0.00s
# Parse of test/Client/Apex/ExtractsSpec.hs... took 0.01s
# Parse of test/Client/Apex/SentinelSpec.hs... took 0.00s
# Parse of test/Client/Apex/SketchSpec.hs... took 0.00s
# Parse of test/Client/Apex/Atlas/FormsSpec.hs... took 0.00s
# Parse of test/Client/Apex/Atlas/Stubs.hs... took 0.00s
# Parse of test/Client/CrossPartnerSync/CoreSpec.hs... took 0.00s
# Parse of test/Client/Lob/VerifyAddressSpec.hs... took 0.00s
# Parse of test/Client/Persona/PersonaSpec.hs... took 0.00s
# Parse of test/Client/Segment/V1/GroupSpec.hs... took 0.00s
# Parse of test/Client/Segment/V1/SegmentSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/CardSpec.hs... took 0.01s
# Parse of test/Client/Synapse/V3/ConsistencySpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/NodeSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/SQLetoSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/StatementSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/UserSpec.hs... took 0.01s
# Parse of test/Client/Synapse/V3/Node/ClassSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Transaction/ClassSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Transaction/TransactionDisputeSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Types/CommonSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Webhook/NodeSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Webhook/NoteParserSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Webhook/NullSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Webhook/SubnetConsumerSpec.hs... took 0.00s
# Parse of test/Client/Synapse/V3/Webhook/TransactionConsumerSpec.hs... took 0.02s
# Parse of test/Client/Synapse/V3/Webhook/UserConsumerSpec.hs... took 0.00s
# Parse of test/Config/YamlSpec.hs... took 0.00s
# Parse of test/Consumer/PostgresqueSpec.hs... took 0.01s
# Parse of test/Consumer/Jobs/SendTransactionMoneyMonitoringSpec.hs... took 0.00s
# Parse of test/Database/AssumptionCheckerSpec.hs... took 0.00s
# Parse of test/Database/EnumsSpec.hs... took 0.00s
# Parse of test/Database/PersistentUtilsSpec.hs... took 0.00s
# Parse of test/Handler/AlphaCodeExistsSpec.hs... took 0.00s
# Parse of test/Handler/CommonSpec.hs... took 0.00s
# Parse of test/Handler/FoundationSpec.hs... took 0.00s
# Parse of test/Handler/HomeSpec.hs... took 0.00s
# Parse of test/Handler/SecuritySpec.hs... took 0.01s
# Parse of test/Handler/TOTPSignupCompleteSpec.hs... took 0.00s
# Parse of test/Handler/TOTPSignupStartSpec.hs... took 0.00s
# Parse of test/Handler/TOTPUpdateCompleteSpec.hs... took 0.00s
# Parse of test/Handler/TOTPUpdateStartSpec.hs... took 0.00s
# Parse of test/Handler/API/Finicity/LoginSpec.hs... took 0.00s
# Parse of test/Handler/API/Intuit/TransactionsSpec.hs... took 0.00s
# Parse of test/Handler/API/Mercury/AccountsSpec.hs... took 0.00s
# Parse of test/Handler/API/Mercury/ApiTokensSpec.hs... took 0.01s
# Parse of test/Handler/API/Mercury/AuthSpec.hs... took 0.00s
# Parse of test/Handler/API/Mercury/RecipientsSpec.hs... took 0.01s
# Parse of test/Handler/API/Mercury/TransactionsSpec.hs... took 0.03s
# Parse of test/Handler/API/Plaid/AuthTokenSpec.hs... took 0.00s
# Parse of test/Handler/API/Plaid/TransactionsSpec.hs... took 0.01s
# Parse of test/Handler/API/Plaid/TwoFASpec.hs... took 0.00s
# Parse of test/Handler/API/Plaid/UserSpec.hs... took 0.00s
# Parse of test/Handler/Admin/AlphaCodesSpec.hs... took 0.00s
# Parse of test/Handler/Admin/CardsSpec.hs... took 0.00s
# Parse of test/Handler/Admin/ManageSpec.hs... took 0.00s
# Parse of test/Handler/Admin/OrganizationLockdownSpec.hs... took 0.00s
# Parse of test/Handler/Admin/OrganizationSpec.hs... took 0.00s
# Parse of test/Handler/Admin/OrganizationStatusSpec.hs... took 0.00s
# Parse of test/Handler/Admin/OrganizationTransactionsSpec.hs... took 0.01s
# Parse of test/Handler/Admin/SupportSpec.hs... took 0.00s
# Parse of test/Handler/Admin/UserSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Onboarding/AboutSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Onboarding/BeneficialOwnerIdReuploadReceivedSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Onboarding/BusinessDetailsRequestSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Onboarding/FlagBeneficialOwnerForIdReuploadSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Onboarding/GetDataSpec.hs... took 0.02s
# Parse of test/Handler/Admin/Onboarding/OnboardingRequestsSpec.hs... took 0.01s
# Parse of test/Handler/Admin/Onboarding/RejectSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Onboarding/SetDataSpec.hs... took 0.00s
# Parse of test/Handler/Admin/Treasury/OnboardingSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/PermanentCookieIdentifierSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/SessionSpec.hs... took 0.01s
# Parse of test/Handler/Authentication/SignupSpec.hs... took 0.01s
# Parse of test/Handler/Authentication/UserIpAddressSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/VerifyEmailSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/MFAReset/CreateCodesSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/Password/ChangeSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/Password/ForgotSpec.hs... took 0.00s
# Parse of test/Handler/Authentication/Password/ResetSpec.hs... took 0.00s
# Parse of test/Handler/Banking/AccountGraphDataSpec.hs... took 0.00s
# Parse of test/Handler/Banking/AddRecipientSpec.hs... took 0.01s
# Parse of test/Handler/Banking/BannedSwiftCodeSpec.hs... took 0.00s
# Parse of test/Handler/Banking/CancelPaymentSpec.hs... took 0.00s
# Parse of test/Handler/Banking/CheckDepositSpec.hs... took 0.00s
# Parse of test/Handler/Banking/DebitCardsSpec.hs... took 0.01s
# Parse of test/Handler/Banking/DismissFailedTransactionSpec.hs... took 0.00s
# Parse of test/Handler/Banking/EditRecipientSpec.hs... took 0.00s
# Parse of test/Handler/Banking/GetInitialDataSpec.hs... took 0.01s
# Parse of test/Handler/Banking/MercuryAccountBalancesSpec.hs... took 0.00s
# Parse of test/Handler/Banking/OrganizationDashboardOverviewSpec.hs... took 0.00s
# Parse of test/Handler/Banking/QuickbooksExportSpec.hs... took 0.00s
# Parse of test/Handler/Banking/RoutingNumberSpec.hs... took 0.00s
# Parse of test/Handler/Banking/SearchTransactionsSpec.hs... took 0.00s
# Parse of test/Handler/Banking/SendMoneySpec.hs... took 0.04s
# Parse of test/Handler/Banking/TransferMoneySpec.hs... took 0.01s
# Parse of test/Handler/Banking/UpdateTransactionSpec.hs... took 0.00s
# Parse of test/Handler/Banking/Accounts/CloseAccountSpec.hs... took 0.00s
# Parse of test/Handler/CurrencyCloud/V2/Notification/PaymentSpec.hs... took 0.00s
# Parse of test/Handler/Dialpad/WebhookSpec.hs... took 0.00s
# Parse of test/Handler/Onboarding/BusinessDetailsRequestSpec.hs... took 0.01s
# Parse of test/Handler/Onboarding/EndToEndSpec.hs... took 0.01s
# Parse of test/Handler/Onboarding/OnboardingRequestsSpec.hs... took 0.00s
# Parse of test/Handler/Onboarding/OnboardingSpec.hs... took 0.01s
# Parse of test/Handler/Onboarding/PurgeUserSpec.hs... took 0.00s
# Parse of test/Handler/Onboarding/ShadowbanSpec.hs... took 0.00s
# Parse of test/Handler/Onboarding/SubmitSpec.hs... took 0.01s
# Parse of test/Handler/Persona/WebhookSpec.hs... took 0.01s
# Parse of test/Handler/Plaid/ExchangePublicTokenSpec.hs... took 0.00s
# Parse of test/Handler/Plaid/WebhookSpec.hs... took 0.00s
# Parse of test/Handler/PostOnboarding/AddFundsSpec.hs... took 0.00s
# Parse of test/Handler/PostOnboarding/AddressSpec.hs... took 0.00s
# Parse of test/Handler/PostOnboarding/AttemptCompletionSpec.hs... took 0.00s
# Parse of test/Handler/PostOnboarding/DebitCardsSpec.hs... took 0.00s
# Parse of test/Handler/PostOnboarding/GetPostOnboardingDataSpec.hs... took 0.00s
# Parse of test/Handler/PostOnboarding/SaveTeamSpec.hs... took 0.00s
# Parse of test/Handler/Settings/NotificationPreferencesSpec.hs... took 0.00s
# Parse of test/Handler/Team/InvitesSpec.hs... took 0.01s
# Parse of test/Handler/Team/RemoveUserSpec.hs... took 0.00s
# Parse of test/Handler/Team/UpdatePermissionsSpec.hs... took 0.00s
# Parse of test/Handler/Team/InvitedUsers/BeneficialOwnerDataSpec.hs... took 0.00s
# Parse of test/Handler/Uploads/UploadSpec.hs... took 0.00s
# Parse of test/Mailer/Banking/SendDebitCardFrozenSpec.hs... took 0.00s
# Parse of test/Mailer/Banking/SendLowBalanceSpec.hs... took 0.00s
# Parse of test/Mailer/Banking/SendTransactionFailedSpec.hs... took 0.01s
# Parse of test/Mailer/Banking/SendTransactionRequiresDetailedPurposeSpec.hs... took 0.00s
# Parse of test/Mailer/Banking/SendTransactionStaleCheckSpec.hs... took 0.00s
# Parse of test/Mailer/Banking/SendTransactionStartedSpec.hs... took 0.00s
# Parse of test/Mailer/Onboarding/DebitCardShippedSpec.hs... took 0.00s
# Parse of test/Mercury/BusinessDaysSpec.hs... took 0.00s
# Parse of test/Mercury/ICalendarSpec.hs... took 0.00s
# Parse of test/Mercury/SicknessScoreSpec.hs... took 0.02s
# Parse of test/Mercury/XmlbfUtilsSpec.hs... took 0.00s
# Parse of test/Mercury/Banking/CommonSpec.hs... took 0.00s
# Parse of test/Mercury/Banking/SqlSpec.hs... took 0.01s
# Parse of test/Mercury/Banking/Brex/AccountDataSpec.hs... took 0.00s
# Parse of test/Mercury/Database/EsqueletoUtilsSpec.hs... took 0.00s
# Parse of test/Mercury/Database/IdempotencySpec.hs... took 0.00s
# Parse of test/Mercury/Database/TransactionMetadataHistorySpec.hs... took 0.00s
# Parse of test/Mercury/Onboarding/BusinessDetailsRequestSpec.hs... took 0.00s
# Parse of test/Mercury/Onboarding/FileMetadataSpec.hs... took 0.00s
# Parse of test/Mercury/PDF/ReceiptSpec.hs... took 0.00s
# Parse of test/Mercury/PDF/StatementSpec.hs... took 0.01s
# Parse of test/Mercury/PDF/WireDetailsSpec.hs... took 0.00s
# Parse of test/Mercury/Treasury/BalanceSpec.hs... took 0.00s
# Parse of test/Mercury/Treasury/ReturnSpec.hs... took 0.00s
# Parse of test/Mercury/Treasury/TradesSpec.hs... took 0.01s
# Parse of test/Mercury/Treasury/YieldSpec.hs... took 0.00s
# Parse of test/Model/CountrySpecific/RussiaSpec.hs... took 0.00s
# Parse of test/Plaid/InsertPlaidIdentitySpec.hs... took 0.00s
# Parse of test/Plaid/TokenExchangeHandlerSpec.hs... took 0.00s
# Parse of test/Property/BankingSpec.hs... took 0.00s
# Parse of test/Property/OnboardingSpec.hs... took 0.00s
# Parse of test/Property/PlaidInstitutionsSpec.hs... took 0.00s
# Parse of test/Property/Property.hs... took 0.00s
# Parse of test/Property/TOTPSpec.hs... took 0.00s
# Parse of test/Property/Synapse/NodeSpec.hs... took 0.00s
# Parse of test/Stubs/Import.hs... took 0.00s
# Parse of test/Stubs/Lob.hs... took 0.00s
# Parse of test/Stubs/Persona.hs... took 0.00s
# Parse of test/Stubs/Synapse/Address.hs... took 0.00s
# Parse of test/Tasks/CheckStaleChecksSpec.hs... took 0.00s
# Parse of test/Tasks/DialpadSubscriptionSpec.hs... took 0.00s
# Parse of test/Tasks/LowBalanceCheckSpec.hs... took 0.00s
# Parse of test/Tasks/RequestSynapseApprovalSpec.hs... took 0.00s
# Parse of test/Tasks/SendSynapseWireEmailSpec.hs... took 0.00s
# Parse of test/Unit/BugsnagSpec.hs... took 0.00s
# Parse of test/Unit/BusinessDaysSpec.hs... took 0.00s
# Parse of test/Unit/CasingSpec.hs... took 0.00s
# Parse of test/Unit/CustomTypesSpec.hs... took 0.00s
# Parse of test/Unit/HumanFormattingSpec.hs... took 0.00s
# Parse of test/Unit/NullableGeneratedSpec.hs... took 0.00s
# Parse of test/Unit/OnboardingSpec.hs... took 0.00s
# Parse of test/Unit/TOTPSpec.hs... took 0.00s
50 hints
(1) ~/D/M/h/mercury-web-backend> hlint --version 18:33:34
HLint v3.2.1, (C) Neil Mitchell 2006-2020
~/D/M/h/mercury-web-backend> 18:34:53
If you still are interested, --timing
with the latest HLint 3.2.1 might give interesting results. That groups things by time spent in each hint as well.
49 hints
Timing Initialise
0.00s global flags
0.00s TOTAL
Timing Config
0.09s data/hlint.yaml
0.01s /Users/maximiliantagher/Documents/Mercury/hs/mercury-web-backend/.hlint.yaml
0.10s TOTAL
Timing Parse
0.06s src/Client/Apex/Types/Atlas.hs
0.05s src/Mercury/Banking/Sql.hs
0.05s src/Client/Bank/Primitive.hs
0.05s src/Client/Apex/Types/Sentinel/V2/Types.hs
0.05s src/Client/Synapse/V3/User.hs
0.04s src/Foundation.hs
0.04s test/Handler/Banking/SendMoneySpec.hs
0.03s test/TestImport.hs
0.03s src/Mercury/Banking/Common.hs
2.40s Other items (814)
2.81s TOTAL
Timing Hint
39.68s Match apply
2.90s Pattern
2.82s Bracket
2.58s List
1.65s Extensions
0.89s Lambda
0.51s ListRec
0.47s Monad
0.21s Unsafe
0.15s Other items (6)
51.86s TOTAL
Timing TOTAL
51.86s Hint
2.81s Parse
0.10s Config
0.00s Initialise
54.78s TOTAL
Took 1m02s
Thanks for the info. We know there's lots of things to optimise in Match apply, so that seems like a reasonable avenue for future work. Glad to see there's little else though - the more concentrated the easier it is to improve.
Hi, our team at work uses hlint, but it can get pretty slow on larger projects with tens of thousands of lines. We came up with this command to only run hlint on files that differ from the master branch on git. Would you want a PR that adds this tip to the README? Feels potentially out of scope, but would have helped us!
It's also helpful for refactoring: