Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Program error: typecheck" with no additional information #1410

Closed
anka-213 opened this issue Feb 20, 2021 · 8 comments
Closed

"Program error: typecheck" with no additional information #1410

anka-213 opened this issue Feb 20, 2021 · 8 comments
Labels
os: macos type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc..

Comments

@anka-213
Copy link
Contributor

Your environment

Output of haskell-language-server --probe-tools or haskell-language-server-wrapper --probe-tools:

$ '/Users/anka/Library/Application Support/Code/User/globalStorage/haskell.haskell/haskell-language-server-0.9.0-darwin-8.8.3' --probe-tools
haskell-language-server version: 0.9.0.0 (GHC: 8.8.3) (PATH: /Users/anka/Library/Application Support/Code/User/globalStorage/haskell.haskell/haskell-language-server-0.9.0-darwin-8.8.3) (GIT hash: 46d2a3dc7ef49ba57b2706022af1801149ab3f2b)
Tool versions found on the $PATH
cabal:          3.2.0.0
stack:          2.5.1
ghc:            8.8.4

Which lsp-client do you use:
VS Code

Describe your project (alternative: link to the project):
https://github.com/commercialhaskell/stack/

Contents of hie.yaml:

cradle:
  stack:

Steps to reproduce

  1. Clone https://github.com/commercialhaskell/stack/
  2. Open the directory in VS Code
  3. Open any Haskell file

Expected behaviour

Get a useful error message and/or don't crash.

Actual behaviour

At first this error is shown in the "Problems" panel:

Program error: 
ByteCodeLink.lookupCE
During interactive linking, GHCi couldn't find the following symbol:
  pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_Pantry_gpdVersion_closure
This may be due to you not asking GHCi to load extra object files,
archives or DLLs needed by your current session.  Restart GHCi, specifying
the missing library using the -L/path/to/object/dir and -lmissinglibname
flags, or simply by naming the relevant files on the GHCi command line.
Alternatively, this link failure might indicate a bug in GHCi.
If you suspect the latter, please send a bug report to:
  glasgow-haskell-bugs@haskell.org

but as soon as I interact with anything, that message disappears and is replaced with just

Program error: typecheck

Include debug information

Execute in the root of your project the command haskell-language-server --debug . and paste the logs here:

Debug output:
$ '/Users/anka/Library/Application Support/Code/User/globalStorage/haskell.haskell/haskell-language-server-0.9.0-darwin-8.8.3' --debug src/Stack/Storage/Project.hs
haskell-language-server version: 0.9.0.0 (GHC: 8.8.3) (PATH: /Users/anka/Library/Application Support/Code/User/globalStorage/haskell.haskell/haskell-language-server-0.9.0-darwin-8.8.3) (GIT hash: 46d2a3dc7ef49ba57b2706022af1801149ab3f2b)
(haskell-language-server)Ghcide setup tester in /Users/anka/projekt/not-mine/haskell/stack.
Report bugs at https://github.com/haskell/haskell-language-server/issues

Tool versions found on the $PATH
cabal:          3.2.0.0
stack:          2.5.1
ghc:            8.8.4


Step 1/4: Finding files to test in /Users/anka/projekt/not-mine/haskell/stack
Found 1 files

Step 2/4: Looking for hie.yaml files that control setup
Found 1 cradle

Step 3/4: Initializing the IDE

Step 4/4: Type checking the files
[INFO] Consulting the cradle for "src/Stack/Storage/Project.hs"
Output from setting up the cradle Cradle {cradleRootDir = "/Users/anka/projekt/not-mine/haskell/stack", cradleOptsProg = CradleAction: Stack}
> Using main module: 1. Package `stack' component stack:exe:stack with main-is file: /Users/anka/projekt/not-mine/haskell/stack/src/main/Main.hs
> The following GHC options are incompatible with GHCi and have not been passed to it: -threaded
> Configuring GHCi with the following packages: stack
> 
> * * * * * * * *
> 
> Warning: Multiple files use the same module name:
>          * Paths_stack found at the following paths
>            * /Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/autogen/Paths_stack.hs (stack:lib)
>            * /Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/stack/autogen/Paths_stack.hs (stack:exe:stack)
> * * * * * * * *
> 
> /Users/anka/projekt/not-mine/haskell/stack/.stack-work/install/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/pkgdb:/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/pkgdb:/nix/store/1k2ad0g7xvqslljgnq3sdc60fa1x915b-ghc-8.8.3/lib/ghc-8.8.3/package.conf.d
[INFO] Using interface files cache dir: ghcide
[INFO] Making new HscEnv[main]
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/hackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV/libHShackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV.a: unknown symbol `___dso_handle'
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/hackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV/libHShackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV.a: unknown symbol `_hackagezmsecurityzm0zi6zi0zi0zm3qwAbc12aKeeCQ4xJQ0vV_HackageziSecurityziTrusted_zdfVerifyRoleRootzuzdcverifyRole_closure'
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/pantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD/libHSpantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD.a: unknown symbol `_hackagezmsecurityzm0zi6zi0zi0zm3qwAbc12aKeeCQ4xJQ0vV_HackageziSecurityziClient_uncheckClientErrors2_closure'
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/pantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD/libHSpantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD.a: unknown symbol `_pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_PantryziHackage_getHackageTarball_info'
haskell-language-server-0.9.0-darwin-8.8.3: ^^ Could not load '_pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_Pantry_gpdVersion_closure', dependency unresolved. See top entry above.

File:     /Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/Project.hs
Hidden:   no
Range:    1:1-2:1
Source:   typecheck
Severity: DsError
Message: 
  Program error:
  ByteCodeLink.lookupCE
  During interactive linking, GHCi couldn't find the following symbol:
  pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_Pantry_gpdVersion_closure
  This may be due to you not asking GHCi to load extra object files,
  archives or DLLs needed by your current session. Restart GHCi, specifying
  the missing library using the -L/path/to/object/dir and -lmissinglibname
  flags, or simply by naming the relevant files on the GHCi command line.
  Alternatively, this link failure might indicate a bug in GHCi.
  If you suspect the latter, please send a bug report to:
  glasgow-haskell-bugs@haskell.org
Files that failed:
[INFO] finish: User TypeCheck (took 6.57s) * /Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/Project.hs


Completed (0 files worked, 1 file failed)

Paste the logs from the lsp-client, e.g. for VS Code

LSP logs:
2021-02-20 10:54:13.523134 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":68,"method":"shutdown","params":null}
2021-02-20 10:54:13.523358 [ThreadId 7] - <--2--{"result":null,"jsonrpc":"2.0","id":68}
2021-02-20 10:54:13.525918 [ThreadId 5] - ---> {"jsonrpc":"2.0","method":"exit","params":null}
haskell-language-server version: 0.9.0.0 (GHC: 8.8.3) (PATH: /Users/anka/Library/Application Support/Code/User/globalStorage/haskell.haskell/haskell-language-server-0.9.0-darwin-8.8.3) (GIT hash: 46d2a3dc7ef49ba57b2706022af1801149ab3f2b)
Starting (haskell-language-server)LSP server...
  with arguments: LspArguments {argLSP = True, argsCwd = Nothing, argFiles = [], argsShakeProfiling = Nothing, argsTesting = False, argsExamplePlugin = False, argsDebugOn = True, argsLogFile = Nothing, argsThreads = 0, argsProjectGhcVersion = False}
  with plugins: [PluginId "brittany",PluginId "class",PluginId "eval",PluginId "floskell",PluginId "fourmolu",PluginId "ghcide-code-actions",PluginId "ghcide-completions",PluginId "ghcide-hover-and-symbols",PluginId "ghcide-type-lenses",PluginId "haddockComments",PluginId "hlint",PluginId "importLens",PluginId "moduleName",PluginId "ormolu",PluginId "pragmas",PluginId "retrie",PluginId "splice",PluginId "stylish-haskell",PluginId "tactic"]
  in directory: /Users/anka/projekt/not-mine/haskell/stack
If you are seeing this in a terminal, you probably should have run ghcide WITHOUT the --lsp option!
 2021-02-20 10:54:13.612132 [ThreadId 5] - 




haskell-lsp:Starting up server ...
2021-02-20 10:54:13.614315 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":46745,"clientInfo":{"name":"vscode","version":"1.53.2"},"rootPath":"/Users/anka/projekt/not-mine/haskell/stack","rootUri":"file:///Users/anka/projekt/not-mine/haskell/stack","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional"},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]}},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}},"contextSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"hierarchicalDocumentSymbolSupport":true},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["comment","keyword","number","regexp","operator","namespace","type","struct","class","interface","enum","typeParameter","function","member","macro","variable","parameter","property","label"],"tokenModifiers":["declaration","documentation","static","abstract","deprecated","async","readonly"]}},"window":{"workDoneProgress":true}},"trace":"off","workspaceFolders":[{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack","name":"stack"}]}}
2021-02-20 10:54:13.629955 [ThreadId 5] - haskell-lsp:initializeRequestHandler: setting current dir to project root:/Users/anka/projekt/not-mine/haskell/stack
Started LSP server in 0.02s
2021-02-20 10:54:14.253579 [ThreadId 29] - Registering ide configuration: IdeConfiguration {workspaceFolders = fromList [NormalizedUri 2786743572838205549 "file:///Users/anka/projekt/not-mine/haskell/stack"], clientSettings = hashed Nothing}
2021-02-20 10:54:14.254013 [ThreadId 7] - <--2--{"result":{"capabilities":{"typeDefinitionProvider":true,"foldingRangeProvider":false,"textDocumentSync":{"openClose":true,"change":2,"save":{}},"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":true}},"implementationProvider":true,"documentRangeFormattingProvider":true,"documentHighlightProvider":true,"executeCommandProvider":{"commands":["47586:class:addMinimalMethodPlaceholders","47586:eval:evalCommand","47586:ghcide-type-lenses:typesignature.add","47586:hlint:applyOne","47586:hlint:applyAll","47586:importLens:ImportLensCommand","47586:moduleName:edit","47586:retrie:retrieCommand","47586:splice:expandTHSpliceInplace","47586:tactic:tacticsAutoCommand","47586:tactic:tacticsIntrosCommand","47586:tactic:tacticsDestructCommand","47586:tactic:tacticsHomomorphismCommand","47586:tactic:tacticsDestructLambdaCaseCommand","47586:tactic:tacticsHomomorphismLambdaCaseCommand"]},"renameProvider":false,"colorProvider":false,"definitionProvider":true,"hoverProvider":true,"codeActionProvider":true,"completionProvider":{"triggerCharacters":["."],"resolveProvider":false},"codeLensProvider":{},"documentSymbolProvider":true,"documentFormattingProvider":true}},"jsonrpc":"2.0","id":0}
2021-02-20 10:54:14.255053 [ThreadId 5] - ---> {"jsonrpc":"2.0","method":"initialized","params":{}}
2021-02-20 10:54:14.255275 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"registrations":[{"registerOptions":{"watchers":[{"kind":5,"globPattern":"**/*.hs"},{"kind":5,"globPattern":"**/*.hs-boot"},{"kind":5,"globPattern":"**/*.lhs"},{"kind":5,"globPattern":"**/*.lhs-boot"}]},"method":"workspace/didChangeWatchedFiles","id":"globalFileWatches"}]},"method":"client/registerCapability","id":0}
2021-02-20 10:54:14.256336 [ThreadId 5] - ---> {"jsonrpc":"2.0","method":"workspace/didChangeConfiguration","params":{"settings":{"haskell":{"hlintOn":true,"maxNumberOfProblems":100,"diagnosticsOnChange":false,"liquidOn":false,"completionSnippetsOn":true,"formatOnImportOn":true,"formattingProvider":"ormolu","trace":{"server":"messages"},"logFile":"","languageServerVariant":"haskell-language-server","serverExecutablePath":"","updateBehavior":"keep-up-to-date","hlint":{"executablePath":"hlint","run":"never","hints":[],"ignore":[],"logLevel":"error"},"indentationRules":{"enabled":true}}}}}
2021-02-20 10:54:14.256554 [ThreadId 29] - Configuration changed: Object (fromList [("haskell",Object (fromList [("hlint",Object (fromList [("logLevel",String "error"),("executablePath",String "hlint"),("hints",Array []),("ignore",Array []),("run",String "never")])),("logFile",String ""),("updateBehavior",String "keep-up-to-date"),("hlintOn",Bool True),("formatOnImportOn",Bool True),("indentationRules",Object (fromList [("enabled",Bool True)])),("liquidOn",Bool False),("languageServerVariant",String "haskell-language-server"),("serverExecutablePath",String ""),("diagnosticsOnChange",Bool False),("completionSnippetsOn",Bool True),("maxNumberOfProblems",Number 100.0),("formattingProvider",String "ormolu"),("trace",Object (fromList [("server",String "messages")]))]))])
2021-02-20 10:54:14.256837 [ThreadId 28] - Finishing build session(exception: AsyncCancelled)
2021-02-20 10:54:14.257042 [ThreadId 29] - Restarting build session (aborting the previous one took 0.00s)
2021-02-20 10:54:14.266001 [ThreadId 5] - ---> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs","languageId":"haskell","version":1,"text":"{-# LANGUAGE ConstraintKinds #-}\n{-# LANGUAGE DataKinds #-}\n{-# LANGUAGE DefaultSignatures #-}\n{-# LANGUAGE DeriveDataTypeable #-}\n{-# LANGUAGE DeriveGeneric #-}\n{-# LANGUAGE FlexibleContexts #-}\n{-# LANGUAGE FlexibleInstances #-}\n{-# LANGUAGE GADTs #-}\n{-# LANGUAGE MultiParamTypeClasses #-}\n{-# LANGUAGE MultiWayIf #-}\n{-# LANGUAGE NoImplicitPrelude #-}\n{-# LANGUAGE OverloadedStrings #-}\n{-# LANGUAGE RecordWildCards #-}\n{-# LANGUAGE ScopedTypeVariables #-}\n{-# LANGUAGE TypeFamilies #-}\n{-# LANGUAGE ViewPatterns #-}\n\n-- | The Config type.\n\nmodule Stack.Types.Config\n  (\n  -- * Main configuration types and classes\n  -- ** HasPlatform & HasStackRoot\n   HasPlatform(..)\n  ,PlatformVariant(..)\n  -- ** Runner\n  ,HasRunner(..)\n  ,Runner(..)\n  ,ColorWhen(..)\n  ,terminalL\n  ,reExecL\n  -- ** Config & HasConfig\n  ,Config(..)\n  ,HasConfig(..)\n  ,askLatestSnapshotUrl\n  ,configProjectRoot\n  -- ** BuildConfig & HasBuildConfig\n  ,BuildConfig(..)\n  ,ProjectPackage(..)\n  ,DepPackage(..)\n  ,ppRoot\n  ,ppVersion\n  ,ppComponents\n  ,ppGPD\n  ,stackYamlL\n  ,projectRootL\n  ,HasBuildConfig(..)\n  -- ** Storage databases\n  ,UserStorage(..)\n  ,ProjectStorage(..)\n  -- ** GHCVariant & HasGHCVariant\n  ,GHCVariant(..)\n  ,ghcVariantName\n  ,ghcVariantSuffix\n  ,parseGHCVariant\n  ,HasGHCVariant(..)\n  ,snapshotsDir\n  -- ** EnvConfig & HasEnvConfig\n  ,EnvConfig(..)\n  ,HasSourceMap(..)\n  ,HasEnvConfig(..)\n  ,getCompilerPath\n  -- * Details\n  -- ** ApplyGhcOptions\n  ,ApplyGhcOptions(..)\n  -- ** CabalConfigKey\n  ,CabalConfigKey(..)\n  -- ** ConfigException\n  ,HpackExecutable(..)\n  ,ConfigException(..)\n  -- ** ConfigMonoid\n  ,ConfigMonoid(..)\n  ,configMonoidInstallGHCName\n  ,configMonoidSystemGHCName\n  ,parseConfigMonoid\n  -- ** DumpLogs\n  ,DumpLogs(..)\n  -- ** EnvSettings\n  ,EnvSettings(..)\n  ,minimalEnvSettings\n  ,defaultEnvSettings\n  ,plainEnvSettings\n  -- ** GlobalOpts & GlobalOptsMonoid\n  ,GlobalOpts(..)\n  ,GlobalOptsMonoid(..)\n  ,StackYamlLoc(..)\n  ,stackYamlLocL\n  ,LockFileBehavior(..)\n  ,readLockFileBehavior\n  ,lockFileBehaviorL\n  ,defaultLogLevel\n  -- ** Project & ProjectAndConfigMonoid\n  ,Project(..)\n  ,ProjectConfig(..)\n  ,Curator(..)\n  ,ProjectAndConfigMonoid(..)\n  ,parseProjectAndConfigMonoid\n  -- ** PvpBounds\n  ,PvpBounds(..)\n  ,PvpBoundsType(..)\n  ,parsePvpBounds\n  -- ** ColorWhen\n  ,readColorWhen\n  -- ** Styles\n  ,readStyles\n  -- ** SCM\n  ,SCM(..)\n  -- * Paths\n  ,bindirSuffix\n  ,GlobalInfoSource(..)\n  ,getProjectWorkDir\n  ,docDirSuffix\n  ,extraBinDirs\n  ,hpcReportDir\n  ,installationRootDeps\n  ,installationRootLocal\n  ,bindirCompilerTools\n  ,hoogleRoot\n  ,hoogleDatabasePath\n  ,packageDatabaseDeps\n  ,packageDatabaseExtra\n  ,packageDatabaseLocal\n  ,platformOnlyRelDir\n  ,platformGhcRelDir\n  ,platformGhcVerOnlyRelDir\n  ,useShaPathOnWindows\n  ,shaPath\n  ,shaPathForBytes\n  ,workDirL\n  -- * Command-specific types\n  -- ** Eval\n  ,EvalOpts(..)\n  -- ** Exec\n  ,ExecOpts(..)\n  ,SpecialExecCmd(..)\n  ,ExecOptsExtra(..)\n  -- ** Setup\n  ,DownloadInfo(..)\n  ,VersionedDownloadInfo(..)\n  ,GHCDownloadInfo(..)\n  ,SetupInfo(..)\n  -- ** Docker entrypoint\n  ,DockerEntrypoint(..)\n  ,DockerUser(..)\n  ,module X\n  -- * Lens helpers\n  ,wantedCompilerVersionL\n  ,actualCompilerVersionL\n  ,HasCompiler(..)\n  ,DumpPackage(..)\n  ,CompilerPaths(..)\n  ,GhcPkgExe(..)\n  ,getGhcPkgExe\n  ,cpWhich\n  ,ExtraDirs(..)\n  ,buildOptsL\n  ,globalOptsL\n  ,buildOptsInstallExesL\n  ,buildOptsMonoidHaddockL\n  ,buildOptsMonoidTestsL\n  ,buildOptsMonoidBenchmarksL\n  ,buildOptsMonoidInstallExesL\n  ,buildOptsHaddockL\n  ,globalOptsBuildOptsMonoidL\n  ,stackRootL\n  ,cabalVersionL\n  ,whichCompilerL\n  ,envOverrideSettingsL\n  ,shouldForceGhcColorFlag\n  ,appropriateGhcColorFlag\n  -- * Helper logging functions\n  ,prettyStackDevL\n  -- * Lens reexport\n  ,view\n  ,to\n  ) where\n\nimport           Control.Monad.Writer (tell)\nimport           Crypto.Hash (hashWith, SHA1(..))\nimport           Stack.Prelude\nimport           Pantry.Internal.AesonExtended\n                 (ToJSON, toJSON, FromJSON, FromJSONKey (..), parseJSON, withText, object,\n                  (.=), (..:), (...:), (..:?), (..!=), Value(Bool),\n                  withObjectWarnings, WarningParser, Object, jsonSubWarnings,\n                  jsonSubWarningsT, jsonSubWarningsTT, WithJSONWarnings(..),\n                  FromJSONKeyFunction (FromJSONKeyTextParser))\nimport           Data.Attoparsec.Args (parseArgs, EscapingMode (Escaping))\nimport qualified Data.ByteArray.Encoding as Mem (convertToBase, Base(Base16))\nimport qualified Data.ByteString.Char8 as S8\nimport           Data.Coerce (coerce)\nimport           Data.List (stripPrefix)\nimport qualified Data.List.NonEmpty as NonEmpty\nimport qualified Data.Map as Map\nimport qualified Data.Map.Strict as M\nimport qualified Data.Monoid as Monoid\nimport           Data.Monoid.Map (MonoidMap(..))\nimport qualified Data.Set as Set\nimport qualified Data.Text as T\nimport           Data.Yaml (ParseException)\nimport qualified Data.Yaml as Yaml\nimport qualified Distribution.License as C\nimport           Distribution.ModuleName (ModuleName)\nimport           Distribution.PackageDescription (GenericPackageDescription)\nimport qualified Distribution.PackageDescription as C\nimport           Distribution.System (Platform, Arch)\nimport qualified Distribution.Text\nimport qualified Distribution.Types.UnqualComponentName as C\nimport           Distribution.Version (anyVersion, mkVersion', mkVersion)\nimport           Generics.Deriving.Monoid (memptydefault, mappenddefault)\nimport           Lens.Micro\nimport           Options.Applicative (ReadM)\nimport qualified Options.Applicative as OA\nimport qualified Options.Applicative.Types as OA\nimport           Pantry.Internal (Storage)\nimport           Path\nimport qualified Paths_stack as Meta\nimport qualified RIO.List as List\nimport           RIO.PrettyPrint (HasTerm (..), StyleDoc, prettyWarnL, prettyDebugL)\nimport           RIO.PrettyPrint.StylesUpdate (StylesUpdate,\n                     parseStylesUpdateFromString, HasStylesUpdate (..))\nimport           Stack.Constants\nimport           Stack.Types.Compiler\nimport           Stack.Types.CompilerBuild\nimport           Stack.Types.Docker\nimport           Stack.Types.GhcPkgId\nimport           Stack.Types.NamedComponent\nimport           Stack.Types.Nix\nimport           Stack.Types.Resolver\nimport           Stack.Types.SourceMap\nimport           Stack.Types.TemplateName\nimport           Stack.Types.Version\nimport qualified System.FilePath as FilePath\nimport           System.PosixCompat.Types (UserID, GroupID, FileMode)\nimport           RIO.Process (ProcessContext, HasProcessContext (..))\nimport           Casa.Client (CasaRepoPrefix)\n\n-- Re-exports\nimport           Stack.Types.Config.Build as X\n\n-- | The base environment that almost everything in Stack runs in,\n-- based off of parsing command line options in 'GlobalOpts'. Provides\n-- logging and process execution.\ndata Runner = Runner\n  { runnerGlobalOpts :: !GlobalOpts\n  , runnerUseColor   :: !Bool\n  , runnerLogFunc    :: !LogFunc\n  , runnerTermWidth  :: !Int\n  , runnerProcessContext :: !ProcessContext\n  }\n\ndata ColorWhen = ColorNever | ColorAlways | ColorAuto\n    deriving (Eq, Show, Generic)\n\ninstance FromJSON ColorWhen where\n    parseJSON v = do\n        s <- parseJSON v\n        case s of\n            \"never\"  -> return ColorNever\n            \"always\" -> return ColorAlways\n            \"auto\"   -> return ColorAuto\n            _ -> fail (\"Unknown color use: \" <> s <> \". Expected values of \" <>\n                       \"option are 'never', 'always', or 'auto'.\")\n\n-- | The top-level Stackage configuration.\ndata Config =\n  Config {configWorkDir             :: !(Path Rel Dir)\n         -- ^ this allows to override .stack-work directory\n         ,configUserConfigPath      :: !(Path Abs File)\n         -- ^ Path to user configuration file (usually ~/.stack/config.yaml)\n         ,configBuild               :: !BuildOpts\n         -- ^ Build configuration\n         ,configDocker              :: !DockerOpts\n         -- ^ Docker configuration\n         ,configNix                 :: !NixOpts\n         -- ^ Execution environment (e.g nix-shell) configuration\n         ,configProcessContextSettings :: !(EnvSettings -> IO ProcessContext)\n         -- ^ Environment variables to be passed to external tools\n         ,configLocalProgramsBase   :: !(Path Abs Dir)\n         -- ^ Non-platform-specific path containing local installations\n         ,configLocalPrograms       :: !(Path Abs Dir)\n         -- ^ Path containing local installations (mainly GHC)\n         ,configHideTHLoading       :: !Bool\n         -- ^ Hide the Template Haskell \"Loading package ...\" messages from the\n         -- console\n         ,configPrefixTimestamps    :: !Bool\n         -- ^ Prefix build output with timestamps for each line.\n         ,configPlatform            :: !Platform\n         -- ^ The platform we're building for, used in many directory names\n         ,configPlatformVariant     :: !PlatformVariant\n         -- ^ Variant of the platform, also used in directory names\n         ,configGHCVariant          :: !(Maybe GHCVariant)\n         -- ^ The variant of GHC requested by the user.\n         ,configGHCBuild            :: !(Maybe CompilerBuild)\n         -- ^ Override build of the compiler distribution (e.g. standard, gmp4, tinfo6)\n         ,configLatestSnapshot      :: !Text\n         -- ^ URL of a JSON file providing the latest LTS and Nightly snapshots.\n         ,configSystemGHC           :: !Bool\n         -- ^ Should we use the system-installed GHC (on the PATH) if\n         -- available? Can be overridden by command line options.\n         ,configInstallGHC          :: !Bool\n         -- ^ Should we automatically install GHC if missing or the wrong\n         -- version is available? Can be overridden by command line options.\n         ,configSkipGHCCheck        :: !Bool\n         -- ^ Don't bother checking the GHC version or architecture.\n         ,configSkipMsys            :: !Bool\n         -- ^ On Windows: don't use a sandboxed MSYS\n         ,configCompilerCheck       :: !VersionCheck\n         -- ^ Specifies which versions of the compiler are acceptable.\n         ,configCompilerRepository  :: !CompilerRepository\n         -- ^ Specifies the repository containing the compiler sources\n         ,configLocalBin            :: !(Path Abs Dir)\n         -- ^ Directory we should install executables into\n         ,configRequireStackVersion :: !VersionRange\n         -- ^ Require a version of stack within this range.\n         ,configJobs                :: !Int\n         -- ^ How many concurrent jobs to run, defaults to number of capabilities\n         ,configOverrideGccPath     :: !(Maybe (Path Abs File))\n         -- ^ Optional gcc override path\n         ,configExtraIncludeDirs    :: ![FilePath]\n         -- ^ --extra-include-dirs arguments\n         ,configExtraLibDirs        :: ![FilePath]\n         -- ^ --extra-lib-dirs arguments\n         ,configConcurrentTests     :: !Bool\n         -- ^ Run test suites concurrently\n         ,configTemplateParams      :: !(Map Text Text)\n         -- ^ Parameters for templates.\n         ,configScmInit             :: !(Maybe SCM)\n         -- ^ Initialize SCM (e.g. git) when creating new projects.\n         ,configGhcOptionsByName    :: !(Map PackageName [Text])\n         -- ^ Additional GHC options to apply to specific packages.\n         ,configGhcOptionsByCat     :: !(Map ApplyGhcOptions [Text])\n         -- ^ Additional GHC options to apply to categories of packages\n         ,configCabalConfigOpts     :: !(Map CabalConfigKey [Text])\n         -- ^ Additional options to be passed to ./Setup.hs configure\n         ,configSetupInfoLocations  :: ![String]\n         -- ^ URLs or paths to stack-setup.yaml files, for finding tools.\n         -- If none present, the default setup-info is used.\n         ,configSetupInfoInline     :: !SetupInfo\n         -- ^ Additional SetupInfo to use to find tools.\n         ,configPvpBounds           :: !PvpBounds\n         -- ^ How PVP upper bounds should be added to packages\n         ,configModifyCodePage      :: !Bool\n         -- ^ Force the code page to UTF-8 on Windows\n         ,configRebuildGhcOptions   :: !Bool\n         -- ^ Rebuild on GHC options changes\n         ,configApplyGhcOptions     :: !ApplyGhcOptions\n         -- ^ Which packages to ghc-options on the command line apply to?\n         ,configAllowNewer          :: !Bool\n         -- ^ Ignore version ranges in .cabal files. Funny naming chosen to\n         -- match cabal.\n         ,configDefaultTemplate     :: !(Maybe TemplateName)\n         -- ^ The default template to use when none is specified.\n         -- (If Nothing, the default default is used.)\n         ,configAllowDifferentUser  :: !Bool\n         -- ^ Allow users other than the stack root owner to use the stack\n         -- installation.\n         ,configDumpLogs            :: !DumpLogs\n         -- ^ Dump logs of local non-dependencies when doing a build.\n         ,configProject             :: !(ProjectConfig (Project, Path Abs File))\n         -- ^ Project information and stack.yaml file location\n         ,configAllowLocals         :: !Bool\n         -- ^ Are we allowed to build local packages? The script\n         -- command disallows this.\n         ,configSaveHackageCreds    :: !Bool\n         -- ^ Should we save Hackage credentials to a file?\n         ,configHackageBaseUrl      :: !Text\n         -- ^ Hackage base URL used when uploading packages\n         ,configRunner              :: !Runner\n         ,configPantryConfig        :: !PantryConfig\n         ,configStackRoot           :: !(Path Abs Dir)\n         ,configResolver            :: !(Maybe AbstractResolver)\n         -- ^ Any resolver override from the command line\n         ,configUserStorage         :: !UserStorage\n         -- ^ Database connection pool for user Stack database\n         ,configHideSourcePaths     :: !Bool\n         -- ^ Enable GHC hiding source paths?\n         ,configRecommendUpgrade    :: !Bool\n         -- ^ Recommend a Stack upgrade?\n         ,configStackDeveloperMode  :: !Bool\n         -- ^ Turn on Stack developer mode for additional messages?\n         }\n\n-- | A bit of type safety to ensure we're talking to the right database.\nnewtype UserStorage = UserStorage\n  { unUserStorage :: Storage\n  }\n\n-- | A bit of type safety to ensure we're talking to the right database.\nnewtype ProjectStorage = ProjectStorage\n  { unProjectStorage :: Storage\n  }\n\n-- | The project root directory, if in a project.\nconfigProjectRoot :: Config -> Maybe (Path Abs Dir)\nconfigProjectRoot c =\n  case configProject c of\n    PCProject (_, fp) -> Just $ parent fp\n    PCGlobalProject -> Nothing\n    PCNoProject _deps -> Nothing\n\n-- | Which packages do configure opts apply to?\ndata CabalConfigKey\n  = CCKTargets -- ^ See AGOTargets\n  | CCKLocals -- ^ See AGOLocals\n  | CCKEverything -- ^ See AGOEverything\n  | CCKPackage !PackageName -- ^ A specific package\n  deriving (Show, Read, Eq, Ord)\ninstance FromJSON CabalConfigKey where\n  parseJSON = withText \"CabalConfigKey\" parseCabalConfigKey\ninstance FromJSONKey CabalConfigKey where\n  fromJSONKey = FromJSONKeyTextParser parseCabalConfigKey\n\nparseCabalConfigKey :: (Monad m, MonadFail m) => Text -> m CabalConfigKey\nparseCabalConfigKey \"$targets\" = pure CCKTargets\nparseCabalConfigKey \"$locals\" = pure CCKLocals\nparseCabalConfigKey \"$everything\" = pure CCKEverything\nparseCabalConfigKey name =\n  case parsePackageName $ T.unpack name of\n    Nothing -> fail $ \"Invalid CabalConfigKey: \" ++ show name\n    Just x -> pure $ CCKPackage x\n\n-- | Which packages do ghc-options on the command line apply to?\ndata ApplyGhcOptions = AGOTargets -- ^ all local targets\n                     | AGOLocals -- ^ all local packages, even non-targets\n                     | AGOEverything -- ^ every package\n  deriving (Show, Read, Eq, Ord, Enum, Bounded)\n\ninstance FromJSON ApplyGhcOptions where\n    parseJSON = withText \"ApplyGhcOptions\" $ \\t ->\n        case t of\n            \"targets\" -> return AGOTargets\n            \"locals\" -> return AGOLocals\n            \"everything\" -> return AGOEverything\n            _ -> fail $ \"Invalid ApplyGhcOptions: \" ++ show t\n\n-- | Which build log files to dump\ndata DumpLogs\n  = DumpNoLogs -- ^ don't dump any logfiles\n  | DumpWarningLogs -- ^ dump logfiles containing warnings\n  | DumpAllLogs -- ^ dump all logfiles\n  deriving (Show, Read, Eq, Ord, Enum, Bounded)\n\ninstance FromJSON DumpLogs where\n  parseJSON (Bool True) = return DumpAllLogs\n  parseJSON (Bool False) = return DumpNoLogs\n  parseJSON v =\n    withText\n      \"DumpLogs\"\n      (\\t ->\n          if | t == \"none\" -> return DumpNoLogs\n             | t == \"warning\" -> return DumpWarningLogs\n             | t == \"all\" -> return DumpAllLogs\n             | otherwise -> fail (\"Invalid DumpLogs: \" ++ show t))\n      v\n\n-- | Controls which version of the environment is used\ndata EnvSettings = EnvSettings\n    { esIncludeLocals :: !Bool\n    -- ^ include local project bin directory, GHC_PACKAGE_PATH, etc\n    , esIncludeGhcPackagePath :: !Bool\n    -- ^ include the GHC_PACKAGE_PATH variable\n    , esStackExe :: !Bool\n    -- ^ set the STACK_EXE variable to the current executable name\n    , esLocaleUtf8 :: !Bool\n    -- ^ set the locale to C.UTF-8\n    , esKeepGhcRts :: !Bool\n    -- ^ if True, keep GHCRTS variable in environment\n    }\n    deriving (Show, Eq, Ord)\n\ndata ExecOpts = ExecOpts\n    { eoCmd :: !SpecialExecCmd\n    , eoArgs :: ![String]\n    , eoExtra :: !ExecOptsExtra\n    } deriving (Show)\n\ndata SpecialExecCmd\n    = ExecCmd String\n    | ExecRun\n    | ExecGhc\n    | ExecRunGhc\n    deriving (Show, Eq)\n\ndata ExecOptsExtra = ExecOptsExtra\n  { eoEnvSettings :: !EnvSettings\n  , eoPackages :: ![String]\n  , eoRtsOptions :: ![String]\n  , eoCwd :: !(Maybe FilePath)\n  }\n  deriving (Show)\n\ndata EvalOpts = EvalOpts\n    { evalArg :: !String\n    , evalExtra :: !ExecOptsExtra\n    } deriving (Show)\n\n-- | Parsed global command-line options.\ndata GlobalOpts = GlobalOpts\n    { globalReExecVersion :: !(Maybe String) -- ^ Expected re-exec in container version\n    , globalDockerEntrypoint :: !(Maybe DockerEntrypoint)\n      -- ^ Data used when stack is acting as a Docker entrypoint (internal use only)\n    , globalLogLevel     :: !LogLevel -- ^ Log level\n    , globalTimeInLog    :: !Bool -- ^ Whether to include timings in logs.\n    , globalConfigMonoid :: !ConfigMonoid -- ^ Config monoid, for passing into 'loadConfig'\n    , globalResolver     :: !(Maybe AbstractResolver) -- ^ Resolver override\n    , globalCompiler     :: !(Maybe WantedCompiler) -- ^ Compiler override\n    , globalTerminal     :: !Bool -- ^ We're in a terminal?\n    , globalStylesUpdate :: !StylesUpdate -- ^ SGR (Ansi) codes for styles\n    , globalTermWidth    :: !(Maybe Int) -- ^ Terminal width override\n    , globalStackYaml    :: !StackYamlLoc -- ^ Override project stack.yaml\n    , globalLockFileBehavior :: !LockFileBehavior\n    } deriving (Show)\n\n-- | Location for the project's stack.yaml file.\ndata StackYamlLoc\n    = SYLDefault\n    -- ^ Use the standard parent-directory-checking logic\n    | SYLOverride !(Path Abs File)\n    -- ^ Use a specific stack.yaml file provided\n    | SYLNoProject ![PackageIdentifierRevision]\n    -- ^ Do not load up a project, just user configuration. Include\n    -- the given extra dependencies with the resolver.\n    | SYLGlobalProject\n    -- ^ Do not look for a project configuration, and use the implicit global.\n    deriving Show\n\nstackYamlLocL :: HasRunner env => Lens' env StackYamlLoc\nstackYamlLocL = globalOptsL.lens globalStackYaml (\\x y -> x { globalStackYaml = y })\n\n-- | How to interact with lock files\ndata LockFileBehavior\n  = LFBReadWrite\n  -- ^ Read and write lock files\n  | LFBReadOnly\n  -- ^ Read lock files, but do not write them\n  | LFBIgnore\n  -- ^ Entirely ignore lock files\n  | LFBErrorOnWrite\n  -- ^ Error out on trying to write a lock file. This can be used to\n  -- ensure that lock files in a repository already ensure\n  -- reproducible builds.\n  deriving (Show, Enum, Bounded)\n\nlockFileBehaviorL :: HasRunner env => SimpleGetter env LockFileBehavior\nlockFileBehaviorL = globalOptsL.to globalLockFileBehavior\n\n-- | Parser for 'LockFileBehavior'\nreadLockFileBehavior :: ReadM LockFileBehavior\nreadLockFileBehavior = do\n  s <- OA.readerAsk\n  case Map.lookup s m of\n    Just x -> pure x\n    Nothing -> OA.readerError $ \"Invalid lock file behavior, valid options: \" ++\n                                List.intercalate \", \" (Map.keys m)\n  where\n    m = Map.fromList $ map (\\x -> (render x, x)) [minBound..maxBound]\n    render LFBReadWrite = \"read-write\"\n    render LFBReadOnly = \"read-only\"\n    render LFBIgnore = \"ignore\"\n    render LFBErrorOnWrite = \"error-on-write\"\n\n-- | Project configuration information. Not every run of Stack has a\n-- true local project; see constructors below.\ndata ProjectConfig a\n    = PCProject a\n    -- ^ Normal run: we want a project, and have one. This comes from\n    -- either 'SYLDefault' or 'SYLOverride'.\n    | PCGlobalProject\n    -- ^ No project was found when using 'SYLDefault'. Instead, use\n    -- the implicit global.\n    | PCNoProject ![PackageIdentifierRevision]\n    -- ^ Use a no project run. This comes from 'SYLNoProject'.\n\n-- | Parsed global command-line options monoid.\ndata GlobalOptsMonoid = GlobalOptsMonoid\n    { globalMonoidReExecVersion :: !(First String) -- ^ Expected re-exec in container version\n    , globalMonoidDockerEntrypoint :: !(First DockerEntrypoint)\n      -- ^ Data used when stack is acting as a Docker entrypoint (internal use only)\n    , globalMonoidLogLevel     :: !(First LogLevel) -- ^ Log level\n    , globalMonoidTimeInLog    :: !FirstTrue -- ^ Whether to include timings in logs.\n    , globalMonoidConfigMonoid :: !ConfigMonoid -- ^ Config monoid, for passing into 'loadConfig'\n    , globalMonoidResolver     :: !(First (Unresolved AbstractResolver)) -- ^ Resolver override\n    , globalMonoidResolverRoot :: !(First FilePath) -- ^ root directory for resolver relative path\n    , globalMonoidCompiler     :: !(First WantedCompiler) -- ^ Compiler override\n    , globalMonoidTerminal     :: !(First Bool) -- ^ We're in a terminal?\n    , globalMonoidStyles       :: !StylesUpdate -- ^ Stack's output styles\n    , globalMonoidTermWidth    :: !(First Int) -- ^ Terminal width override\n    , globalMonoidStackYaml    :: !(First FilePath) -- ^ Override project stack.yaml\n    , globalMonoidLockFileBehavior :: !(First LockFileBehavior) -- ^ See 'globalLockFileBehavior'\n    } deriving Generic\n\ninstance Semigroup GlobalOptsMonoid where\n    (<>) = mappenddefault\n\ninstance Monoid GlobalOptsMonoid where\n    mempty = memptydefault\n    mappend = (<>)\n\n-- | Default logging level should be something useful but not crazy.\ndefaultLogLevel :: LogLevel\ndefaultLogLevel = LevelInfo\n\nreadColorWhen :: ReadM ColorWhen\nreadColorWhen = do\n    s <- OA.readerAsk\n    case s of\n        \"never\" -> return ColorNever\n        \"always\" -> return ColorAlways\n        \"auto\" -> return ColorAuto\n        _ -> OA.readerError \"Expected values of color option are 'never', 'always', or 'auto'.\"\n\nreadStyles :: ReadM StylesUpdate\nreadStyles = parseStylesUpdateFromString <$> OA.readerAsk\n\n-- | A superset of 'Config' adding information on how to build code. The reason\n-- for this breakdown is because we will need some of the information from\n-- 'Config' in order to determine the values here.\n--\n-- These are the components which know nothing about local configuration.\ndata BuildConfig = BuildConfig\n    { bcConfig     :: !Config\n    , bcSMWanted :: !SMWanted\n    , bcExtraPackageDBs :: ![Path Abs Dir]\n      -- ^ Extra package databases\n    , bcStackYaml  :: !(Path Abs File)\n      -- ^ Location of the stack.yaml file.\n      --\n      -- Note: if the STACK_YAML environment variable is used, this may be\n      -- different from projectRootL </> \"stack.yaml\" if a different file\n      -- name is used.\n    , bcProjectStorage :: !ProjectStorage\n    -- ^ Database connection pool for project Stack database\n    , bcCurator :: !(Maybe Curator)\n    }\n\nstackYamlL :: HasBuildConfig env => Lens' env (Path Abs File)\nstackYamlL = buildConfigL.lens bcStackYaml (\\x y -> x { bcStackYaml = y })\n\n-- | Directory containing the project's stack.yaml file\nprojectRootL :: HasBuildConfig env => Getting r env (Path Abs Dir)\nprojectRootL = stackYamlL.to parent\n\n-- | Configuration after the environment has been setup.\ndata EnvConfig = EnvConfig\n    {envConfigBuildConfig :: !BuildConfig\n    ,envConfigBuildOptsCLI :: !BuildOptsCLI\n    ,envConfigSourceMap :: !SourceMap\n    ,envConfigSourceMapHash :: !SourceMapHash\n    ,envConfigCompilerPaths :: !CompilerPaths\n    }\n\nppGPD :: MonadIO m => ProjectPackage -> m GenericPackageDescription\nppGPD = liftIO . cpGPD . ppCommon\n\n-- | Root directory for the given 'ProjectPackage'\nppRoot :: ProjectPackage -> Path Abs Dir\nppRoot = parent . ppCabalFP\n\n-- | All components available in the given 'ProjectPackage'\nppComponents :: MonadIO m => ProjectPackage -> m (Set NamedComponent)\nppComponents pp = do\n  gpd <- ppGPD pp\n  pure $ Set.fromList $ concat\n    [ maybe []  (const [CLib]) (C.condLibrary gpd)\n    , go CExe   (fst <$> C.condExecutables gpd)\n    , go CTest  (fst <$> C.condTestSuites gpd)\n    , go CBench (fst <$> C.condBenchmarks gpd)\n    ]\n  where\n    go :: (T.Text -> NamedComponent)\n       -> [C.UnqualComponentName]\n       -> [NamedComponent]\n    go wrapper = map (wrapper . T.pack . C.unUnqualComponentName)\n\n-- | Version for the given 'ProjectPackage\nppVersion :: MonadIO m => ProjectPackage -> m Version\nppVersion = fmap gpdVersion . ppGPD\n\n-- | A project is a collection of packages. We can have multiple stack.yaml\n-- files, but only one of them may contain project information.\ndata Project = Project\n    { projectUserMsg :: !(Maybe String)\n    -- ^ A warning message to display to the user when the auto generated\n    -- config may have issues.\n    , projectPackages :: ![RelFilePath]\n    -- ^ Packages which are actually part of the project (as opposed\n    -- to dependencies).\n    , projectDependencies :: ![RawPackageLocation]\n    -- ^ Dependencies defined within the stack.yaml file, to be\n    -- applied on top of the snapshot.\n    , projectFlags :: !(Map PackageName (Map FlagName Bool))\n    -- ^ Flags to be applied on top of the snapshot flags.\n    , projectResolver :: !RawSnapshotLocation\n    -- ^ How we resolve which @Snapshot@ to use\n    , projectCompiler :: !(Maybe WantedCompiler)\n    -- ^ Override the compiler in 'projectResolver'\n    , projectExtraPackageDBs :: ![FilePath]\n    , projectCurator :: !(Maybe Curator)\n    -- ^ Extra configuration intended exclusively for usage by the\n    -- curator tool. In other words, this is /not/ part of the\n    -- documented and exposed Stack API. SUBJECT TO CHANGE.\n    , projectDropPackages :: !(Set PackageName)\n    -- ^ Packages to drop from the 'projectResolver'.\n    }\n  deriving Show\n\ninstance ToJSON Project where\n    -- Expanding the constructor fully to ensure we don't miss any fields.\n    toJSON (Project userMsg packages extraDeps flags resolver mcompiler extraPackageDBs mcurator drops) = object $ concat\n      [ maybe [] (\\cv -> [\"compiler\" .= cv]) mcompiler\n      , maybe [] (\\msg -> [\"user-message\" .= msg]) userMsg\n      , if null extraPackageDBs then [] else [\"extra-package-dbs\" .= extraPackageDBs]\n      , if null extraDeps then [] else [\"extra-deps\" .= extraDeps]\n      , if Map.null flags then [] else [\"flags\" .= fmap toCabalStringMap (toCabalStringMap flags)]\n      , [\"packages\" .= packages]\n      , [\"resolver\" .= resolver]\n      , maybe [] (\\c -> [\"curator\" .= c]) mcurator\n      , if Set.null drops then [] else [\"drop-packages\" .= Set.map CabalString drops]\n      ]\n\n-- | Extra configuration intended exclusively for usage by the\n-- curator tool. In other words, this is /not/ part of the\n-- documented and exposed Stack API. SUBJECT TO CHANGE.\ndata Curator = Curator\n  { curatorSkipTest :: !(Set PackageName)\n  , curatorExpectTestFailure :: !(Set PackageName)\n  , curatorSkipBenchmark :: !(Set PackageName)\n  , curatorExpectBenchmarkFailure :: !(Set PackageName)\n  , curatorSkipHaddock :: !(Set PackageName)\n  , curatorExpectHaddockFailure :: !(Set PackageName)\n  }\n  deriving Show\ninstance ToJSON Curator where\n  toJSON c = object\n    [ \"skip-test\" .= Set.map CabalString (curatorSkipTest c)\n    , \"expect-test-failure\" .= Set.map CabalString (curatorExpectTestFailure c)\n    , \"skip-bench\" .= Set.map CabalString (curatorSkipBenchmark c)\n    , \"expect-benchmark-failure\" .= Set.map CabalString (curatorExpectTestFailure c)\n    , \"skip-haddock\" .= Set.map CabalString (curatorSkipHaddock c)\n    , \"expect-test-failure\" .= Set.map CabalString (curatorExpectHaddockFailure c)\n    ]\ninstance FromJSON (WithJSONWarnings Curator) where\n  parseJSON = withObjectWarnings \"Curator\" $ \\o -> Curator\n    <$> fmap (Set.map unCabalString) (o ..:? \"skip-test\" ..!= mempty)\n    <*> fmap (Set.map unCabalString) (o ..:? \"expect-test-failure\" ..!= mempty)\n    <*> fmap (Set.map unCabalString) (o ..:? \"skip-bench\" ..!= mempty)\n    <*> fmap (Set.map unCabalString) (o ..:? \"expect-benchmark-failure\" ..!= mempty)\n    <*> fmap (Set.map unCabalString) (o ..:? \"skip-haddock\" ..!= mempty)\n    <*> fmap (Set.map unCabalString) (o ..:? \"expect-haddock-failure\" ..!= mempty)\n\n-- An uninterpreted representation of configuration options.\n-- Configurations may be \"cascaded\" using mappend (left-biased).\ndata ConfigMonoid =\n  ConfigMonoid\n    { configMonoidStackRoot          :: !(First (Path Abs Dir))\n    -- ^ See: 'clStackRoot'\n    , configMonoidWorkDir            :: !(First (Path Rel Dir))\n    -- ^ See: 'configWorkDir'.\n    , configMonoidBuildOpts          :: !BuildOptsMonoid\n    -- ^ build options.\n    , configMonoidDockerOpts         :: !DockerOptsMonoid\n    -- ^ Docker options.\n    , configMonoidNixOpts            :: !NixOptsMonoid\n    -- ^ Options for the execution environment (nix-shell or container)\n    , configMonoidConnectionCount    :: !(First Int)\n    -- ^ See: 'configConnectionCount'\n    , configMonoidHideTHLoading      :: !FirstTrue\n    -- ^ See: 'configHideTHLoading'\n    , configMonoidPrefixTimestamps   :: !(First Bool)\n    -- ^ See: 'configPrefixTimestamps'\n    , configMonoidLatestSnapshot     :: !(First Text)\n    -- ^ See: 'configLatestSnapshot'\n    , configMonoidPackageIndices     :: !(First [HackageSecurityConfig])\n    -- ^ See: @picIndices@\n    , configMonoidSystemGHC          :: !(First Bool)\n    -- ^ See: 'configSystemGHC'\n    ,configMonoidInstallGHC          :: !FirstTrue\n    -- ^ See: 'configInstallGHC'\n    ,configMonoidSkipGHCCheck        :: !FirstFalse\n    -- ^ See: 'configSkipGHCCheck'\n    ,configMonoidSkipMsys            :: !FirstFalse\n    -- ^ See: 'configSkipMsys'\n    ,configMonoidCompilerCheck       :: !(First VersionCheck)\n    -- ^ See: 'configCompilerCheck'\n    ,configMonoidCompilerRepository  :: !(First CompilerRepository)\n    -- ^ See: 'configCompilerRepository'\n    ,configMonoidRequireStackVersion :: !IntersectingVersionRange\n    -- ^ See: 'configRequireStackVersion'\n    ,configMonoidArch                :: !(First String)\n    -- ^ Used for overriding the platform\n    ,configMonoidGHCVariant          :: !(First GHCVariant)\n    -- ^ Used for overriding the platform\n    ,configMonoidGHCBuild            :: !(First CompilerBuild)\n    -- ^ Used for overriding the GHC build\n    ,configMonoidJobs                :: !(First Int)\n    -- ^ See: 'configJobs'\n    ,configMonoidExtraIncludeDirs    :: ![FilePath]\n    -- ^ See: 'configExtraIncludeDirs'\n    ,configMonoidExtraLibDirs        :: ![FilePath]\n    -- ^ See: 'configExtraLibDirs'\n    ,configMonoidCustomPreprocessors :: ![FilePath]\n    -- ^ See: 'configCustomPReprocessors'\n    , configMonoidOverrideGccPath    :: !(First (Path Abs File))\n    -- ^ Allow users to override the path to gcc\n    ,configMonoidOverrideHpack       :: !(First FilePath)\n    -- ^ Use Hpack executable (overrides bundled Hpack)\n    ,configMonoidConcurrentTests     :: !(First Bool)\n    -- ^ See: 'configConcurrentTests'\n    ,configMonoidLocalBinPath        :: !(First FilePath)\n    -- ^ Used to override the binary installation dir\n    ,configMonoidTemplateParameters  :: !(Map Text Text)\n    -- ^ Template parameters.\n    ,configMonoidScmInit             :: !(First SCM)\n    -- ^ Initialize SCM (e.g. git init) when making new projects?\n    ,configMonoidGhcOptionsByName    :: !(MonoidMap PackageName (Monoid.Dual [Text]))\n    -- ^ See 'configGhcOptionsByName'. Uses 'Monoid.Dual' so that\n    -- options from the configs on the right come first, so that they\n    -- can be overridden.\n    ,configMonoidGhcOptionsByCat     :: !(MonoidMap ApplyGhcOptions (Monoid.Dual [Text]))\n    -- ^ See 'configGhcOptionsAll'. Uses 'Monoid.Dual' so that options\n    -- from the configs on the right come first, so that they can be\n    -- overridden.\n    ,configMonoidCabalConfigOpts     :: !(MonoidMap CabalConfigKey (Monoid.Dual [Text]))\n    -- ^ See 'configCabalConfigOpts'.\n    ,configMonoidExtraPath           :: ![Path Abs Dir]\n    -- ^ Additional paths to search for executables in\n    ,configMonoidSetupInfoLocations  :: ![String]\n    -- ^ See 'configSetupInfoLocations'\n    ,configMonoidSetupInfoInline     :: !SetupInfo\n    -- ^ See 'configSetupInfoInline'\n    ,configMonoidLocalProgramsBase   :: !(First (Path Abs Dir))\n    -- ^ Override the default local programs dir, where e.g. GHC is installed.\n    ,configMonoidPvpBounds           :: !(First PvpBounds)\n    -- ^ See 'configPvpBounds'\n    ,configMonoidModifyCodePage      :: !FirstTrue\n    -- ^ See 'configModifyCodePage'\n    ,configMonoidRebuildGhcOptions   :: !FirstFalse\n    -- ^ See 'configMonoidRebuildGhcOptions'\n    ,configMonoidApplyGhcOptions     :: !(First ApplyGhcOptions)\n    -- ^ See 'configApplyGhcOptions'\n    ,configMonoidAllowNewer          :: !(First Bool)\n    -- ^ See 'configMonoidAllowNewer'\n    ,configMonoidDefaultTemplate     :: !(First TemplateName)\n    -- ^ The default template to use when none is specified.\n    -- (If Nothing, the default default is used.)\n    , configMonoidAllowDifferentUser :: !(First Bool)\n    -- ^ Allow users other than the stack root owner to use the stack\n    -- installation.\n    , configMonoidDumpLogs           :: !(First DumpLogs)\n    -- ^ See 'configDumpLogs'\n    , configMonoidSaveHackageCreds   :: !(First Bool)\n    -- ^ See 'configSaveHackageCreds'\n    , configMonoidHackageBaseUrl     :: !(First Text)\n    -- ^ See 'configHackageBaseUrl'\n    , configMonoidColorWhen          :: !(First ColorWhen)\n    -- ^ When to use 'ANSI' colors\n    , configMonoidStyles             :: !StylesUpdate\n    , configMonoidHideSourcePaths    :: !FirstTrue\n    -- ^ See 'configHideSourcePaths'\n    , configMonoidRecommendUpgrade   :: !FirstTrue\n    -- ^ See 'configRecommendUpgrade'\n    , configMonoidCasaRepoPrefix     :: !(First CasaRepoPrefix)\n    , configMonoidSnapshotLocation :: !(First Text)\n    -- ^ Custom location of LTS/Nightly snapshots\n    , configMonoidStackDeveloperMode :: !(First Bool)\n    -- ^ See 'configStackDeveloperMode'\n    }\n  deriving (Show, Generic)\n\ninstance Semigroup ConfigMonoid where\n    (<>) = mappenddefault\n\ninstance Monoid ConfigMonoid where\n    mempty = memptydefault\n    mappend = (<>)\n\nparseConfigMonoid :: Path Abs Dir -> Value -> Yaml.Parser (WithJSONWarnings ConfigMonoid)\nparseConfigMonoid = withObjectWarnings \"ConfigMonoid\" . parseConfigMonoidObject\n\n-- | Parse a partial configuration.  Used both to parse both a standalone config\n-- file and a project file, so that a sub-parser is not required, which would interfere with\n-- warnings for missing fields.\nparseConfigMonoidObject :: Path Abs Dir -> Object -> WarningParser ConfigMonoid\nparseConfigMonoidObject rootDir obj = do\n    -- Parsing 'stackRoot' from 'stackRoot'/config.yaml would be nonsensical\n    let configMonoidStackRoot = First Nothing\n    configMonoidWorkDir <- First <$> obj ..:? configMonoidWorkDirName\n    configMonoidBuildOpts <- jsonSubWarnings (obj ..:? configMonoidBuildOptsName ..!= mempty)\n    configMonoidDockerOpts <- jsonSubWarnings (obj ..:? configMonoidDockerOptsName ..!= mempty)\n    configMonoidNixOpts <- jsonSubWarnings (obj ..:? configMonoidNixOptsName ..!= mempty)\n    configMonoidConnectionCount <- First <$> obj ..:? configMonoidConnectionCountName\n    configMonoidHideTHLoading <- FirstTrue <$> obj ..:? configMonoidHideTHLoadingName\n    configMonoidPrefixTimestamps <- First <$> obj ..:? configMonoidPrefixTimestampsName\n\n    murls :: Maybe Value <- obj ..:? configMonoidUrlsName\n    configMonoidLatestSnapshot <-\n      case murls of\n        Nothing -> pure $ First Nothing\n        Just urls -> jsonSubWarnings $ lift $ withObjectWarnings\n          \"urls\"\n          (\\o -> First <$> o ..:? \"latest-snapshot\" :: WarningParser (First Text))\n          urls\n\n    configMonoidPackageIndices <- First <$> jsonSubWarningsTT (obj ..:?  configMonoidPackageIndicesName)\n    configMonoidSystemGHC <- First <$> obj ..:? configMonoidSystemGHCName\n    configMonoidInstallGHC <- FirstTrue <$> obj ..:? configMonoidInstallGHCName\n    configMonoidSkipGHCCheck <- FirstFalse <$> obj ..:? configMonoidSkipGHCCheckName\n    configMonoidSkipMsys <- FirstFalse <$> obj ..:? configMonoidSkipMsysName\n    configMonoidRequireStackVersion <- IntersectingVersionRange . unVersionRangeJSON <$> (\n                                       obj ..:? configMonoidRequireStackVersionName\n                                           ..!= VersionRangeJSON anyVersion)\n    configMonoidArch <- First <$> obj ..:? configMonoidArchName\n    configMonoidGHCVariant <- First <$> obj ..:? configMonoidGHCVariantName\n    configMonoidGHCBuild <- First <$> obj ..:? configMonoidGHCBuildName\n    configMonoidJobs <- First <$> obj ..:? configMonoidJobsName\n    configMonoidExtraIncludeDirs <- map (toFilePath rootDir FilePath.</>) <$>\n        obj ..:?  configMonoidExtraIncludeDirsName ..!= []\n    configMonoidExtraLibDirs <- map (toFilePath rootDir FilePath.</>) <$>\n        obj ..:?  configMonoidExtraLibDirsName ..!= []\n    configMonoidCustomPreprocessors <- map (toFilePath rootDir FilePath.</>) <$>\n        obj ..:?  configMonoidCustomPreprocessorsName ..!= []\n    configMonoidOverrideGccPath <- First <$> obj ..:? configMonoidOverrideGccPathName\n    configMonoidOverrideHpack <- First <$> obj ..:? configMonoidOverrideHpackName\n    configMonoidConcurrentTests <- First <$> obj ..:? configMonoidConcurrentTestsName\n    configMonoidLocalBinPath <- First <$> obj ..:? configMonoidLocalBinPathName\n    templates <- obj ..:? \"templates\"\n    (configMonoidScmInit,configMonoidTemplateParameters) <-\n      case templates of\n        Nothing -> return (First Nothing,M.empty)\n        Just tobj -> do\n          scmInit <- tobj ..:? configMonoidScmInitName\n          params <- tobj ..:? configMonoidTemplateParametersName\n          return (First scmInit,fromMaybe M.empty params)\n    configMonoidCompilerCheck <- First <$> obj ..:? configMonoidCompilerCheckName\n    configMonoidCompilerRepository <- First <$> (obj ..:? configMonoidCompilerRepositoryName)\n\n    options <- Map.map unGhcOptions <$> obj ..:? configMonoidGhcOptionsName ..!= mempty\n\n    optionsEverything <-\n      case (Map.lookup GOKOldEverything options, Map.lookup GOKEverything options) of\n        (Just _, Just _) -> fail \"Cannot specify both `*` and `$everything` GHC options\"\n        (Nothing, Just x) -> return x\n        (Just x, Nothing) -> do\n          tell \"The `*` ghc-options key is not recommended. Consider using $locals, or if really needed, $everything\"\n          return x\n        (Nothing, Nothing) -> return []\n\n    let configMonoidGhcOptionsByCat = coerce $ Map.fromList\n          [ (AGOEverything, optionsEverything)\n          , (AGOLocals, Map.findWithDefault [] GOKLocals options)\n          , (AGOTargets, Map.findWithDefault [] GOKTargets options)\n          ]\n\n        configMonoidGhcOptionsByName = coerce $ Map.fromList\n            [(name, opts) | (GOKPackage name, opts) <- Map.toList options]\n\n    configMonoidCabalConfigOpts' <- obj ..:? \"configure-options\" ..!= mempty\n    let configMonoidCabalConfigOpts = coerce (configMonoidCabalConfigOpts' :: Map CabalConfigKey [Text])\n\n    configMonoidExtraPath <- obj ..:? configMonoidExtraPathName ..!= []\n    configMonoidSetupInfoLocations <- obj ..:? configMonoidSetupInfoLocationsName ..!= []\n    configMonoidSetupInfoInline <- jsonSubWarningsT (obj ..:? configMonoidSetupInfoInlineName) ..!= mempty\n    configMonoidLocalProgramsBase <- First <$> obj ..:? configMonoidLocalProgramsBaseName\n    configMonoidPvpBounds <- First <$> obj ..:? configMonoidPvpBoundsName\n    configMonoidModifyCodePage <- FirstTrue <$> obj ..:? configMonoidModifyCodePageName\n    configMonoidRebuildGhcOptions <- FirstFalse <$> obj ..:? configMonoidRebuildGhcOptionsName\n    configMonoidApplyGhcOptions <- First <$> obj ..:? configMonoidApplyGhcOptionsName\n    configMonoidAllowNewer <- First <$> obj ..:? configMonoidAllowNewerName\n    configMonoidDefaultTemplate <- First <$> obj ..:? configMonoidDefaultTemplateName\n    configMonoidAllowDifferentUser <- First <$> obj ..:? configMonoidAllowDifferentUserName\n    configMonoidDumpLogs <- First <$> obj ..:? configMonoidDumpLogsName\n    configMonoidSaveHackageCreds <- First <$> obj ..:? configMonoidSaveHackageCredsName\n    configMonoidHackageBaseUrl <- First <$> obj ..:? configMonoidHackageBaseUrlName\n\n    configMonoidColorWhenUS <- obj ..:? configMonoidColorWhenUSName\n    configMonoidColorWhenGB <- obj ..:? configMonoidColorWhenGBName\n    let configMonoidColorWhen =  First $   configMonoidColorWhenUS\n                                       <|> configMonoidColorWhenGB\n\n    configMonoidStylesUS <- obj ..:? configMonoidStylesUSName\n    configMonoidStylesGB <- obj ..:? configMonoidStylesGBName\n    let configMonoidStyles = fromMaybe mempty $   configMonoidStylesUS\n                                              <|> configMonoidStylesGB\n\n    configMonoidHideSourcePaths <- FirstTrue <$> obj ..:? configMonoidHideSourcePathsName\n    configMonoidRecommendUpgrade <- FirstTrue <$> obj ..:? configMonoidRecommendUpgradeName\n\n    configMonoidCasaRepoPrefix <- First <$> obj ..:? configMonoidCasaRepoPrefixName\n    configMonoidSnapshotLocation <- First <$> obj ..:? configMonoidSnapshotLocationName\n\n    configMonoidStackDeveloperMode <- First <$> obj ..:? configMonoidStackDeveloperModeName\n\n    return ConfigMonoid {..}\n\nconfigMonoidWorkDirName :: Text\nconfigMonoidWorkDirName = \"work-dir\"\n\nconfigMonoidBuildOptsName :: Text\nconfigMonoidBuildOptsName = \"build\"\n\nconfigMonoidDockerOptsName :: Text\nconfigMonoidDockerOptsName = \"docker\"\n\nconfigMonoidNixOptsName :: Text\nconfigMonoidNixOptsName = \"nix\"\n\nconfigMonoidConnectionCountName :: Text\nconfigMonoidConnectionCountName = \"connection-count\"\n\nconfigMonoidHideTHLoadingName :: Text\nconfigMonoidHideTHLoadingName = \"hide-th-loading\"\n\nconfigMonoidPrefixTimestampsName :: Text\nconfigMonoidPrefixTimestampsName = \"build-output-timestamps\"\n\nconfigMonoidUrlsName :: Text\nconfigMonoidUrlsName = \"urls\"\n\nconfigMonoidPackageIndicesName :: Text\nconfigMonoidPackageIndicesName = \"package-indices\"\n\nconfigMonoidSystemGHCName :: Text\nconfigMonoidSystemGHCName = \"system-ghc\"\n\nconfigMonoidInstallGHCName :: Text\nconfigMonoidInstallGHCName = \"install-ghc\"\n\nconfigMonoidSkipGHCCheckName :: Text\nconfigMonoidSkipGHCCheckName = \"skip-ghc-check\"\n\nconfigMonoidSkipMsysName :: Text\nconfigMonoidSkipMsysName = \"skip-msys\"\n\nconfigMonoidRequireStackVersionName :: Text\nconfigMonoidRequireStackVersionName = \"require-stack-version\"\n\nconfigMonoidArchName :: Text\nconfigMonoidArchName = \"arch\"\n\nconfigMonoidGHCVariantName :: Text\nconfigMonoidGHCVariantName = \"ghc-variant\"\n\nconfigMonoidGHCBuildName :: Text\nconfigMonoidGHCBuildName = \"ghc-build\"\n\nconfigMonoidJobsName :: Text\nconfigMonoidJobsName = \"jobs\"\n\nconfigMonoidExtraIncludeDirsName :: Text\nconfigMonoidExtraIncludeDirsName = \"extra-include-dirs\"\n\nconfigMonoidExtraLibDirsName :: Text\nconfigMonoidExtraLibDirsName = \"extra-lib-dirs\"\n\nconfigMonoidCustomPreprocessorsName  :: Text\nconfigMonoidCustomPreprocessorsName  = \"custom-preprocessors\"\n\nconfigMonoidOverrideGccPathName :: Text\nconfigMonoidOverrideGccPathName = \"with-gcc\"\n\nconfigMonoidOverrideHpackName :: Text\nconfigMonoidOverrideHpackName = \"with-hpack\"\n\nconfigMonoidConcurrentTestsName :: Text\nconfigMonoidConcurrentTestsName = \"concurrent-tests\"\n\nconfigMonoidLocalBinPathName :: Text\nconfigMonoidLocalBinPathName = \"local-bin-path\"\n\nconfigMonoidScmInitName :: Text\nconfigMonoidScmInitName = \"scm-init\"\n\nconfigMonoidTemplateParametersName :: Text\nconfigMonoidTemplateParametersName = \"params\"\n\nconfigMonoidCompilerCheckName :: Text\nconfigMonoidCompilerCheckName = \"compiler-check\"\n\nconfigMonoidCompilerRepositoryName :: Text\nconfigMonoidCompilerRepositoryName = \"compiler-repository\"\n\nconfigMonoidGhcOptionsName :: Text\nconfigMonoidGhcOptionsName = \"ghc-options\"\n\nconfigMonoidExtraPathName :: Text\nconfigMonoidExtraPathName = \"extra-path\"\n\nconfigMonoidSetupInfoLocationsName :: Text\nconfigMonoidSetupInfoLocationsName = \"setup-info-locations\"\n\nconfigMonoidSetupInfoInlineName :: Text\nconfigMonoidSetupInfoInlineName = \"setup-info\"\n\nconfigMonoidLocalProgramsBaseName :: Text\nconfigMonoidLocalProgramsBaseName = \"local-programs-path\"\n\nconfigMonoidPvpBoundsName :: Text\nconfigMonoidPvpBoundsName = \"pvp-bounds\"\n\nconfigMonoidModifyCodePageName :: Text\nconfigMonoidModifyCodePageName = \"modify-code-page\"\n\nconfigMonoidRebuildGhcOptionsName :: Text\nconfigMonoidRebuildGhcOptionsName = \"rebuild-ghc-options\"\n\nconfigMonoidApplyGhcOptionsName :: Text\nconfigMonoidApplyGhcOptionsName = \"apply-ghc-options\"\n\nconfigMonoidAllowNewerName :: Text\nconfigMonoidAllowNewerName = \"allow-newer\"\n\nconfigMonoidDefaultTemplateName :: Text\nconfigMonoidDefaultTemplateName = \"default-template\"\n\nconfigMonoidAllowDifferentUserName :: Text\nconfigMonoidAllowDifferentUserName = \"allow-different-user\"\n\nconfigMonoidDumpLogsName :: Text\nconfigMonoidDumpLogsName = \"dump-logs\"\n\nconfigMonoidSaveHackageCredsName :: Text\nconfigMonoidSaveHackageCredsName = \"save-hackage-creds\"\n\nconfigMonoidHackageBaseUrlName :: Text\nconfigMonoidHackageBaseUrlName = \"hackage-base-url\"\n\nconfigMonoidColorWhenUSName :: Text\nconfigMonoidColorWhenUSName = \"color\"\n\nconfigMonoidColorWhenGBName :: Text\nconfigMonoidColorWhenGBName = \"colour\"\n\nconfigMonoidStylesUSName :: Text\nconfigMonoidStylesUSName = \"stack-colors\"\n\nconfigMonoidStylesGBName :: Text\nconfigMonoidStylesGBName = \"stack-colours\"\n\nconfigMonoidHideSourcePathsName :: Text\nconfigMonoidHideSourcePathsName = \"hide-source-paths\"\n\nconfigMonoidRecommendUpgradeName :: Text\nconfigMonoidRecommendUpgradeName = \"recommend-stack-upgrade\"\n\nconfigMonoidCasaRepoPrefixName :: Text\nconfigMonoidCasaRepoPrefixName = \"casa-repo-prefix\"\n\nconfigMonoidSnapshotLocationName :: Text\nconfigMonoidSnapshotLocationName = \"snapshot-location-base\"\n\nconfigMonoidStackDeveloperModeName :: Text\nconfigMonoidStackDeveloperModeName = \"stack-developer-mode\"\n\ndata ConfigException\n  = ParseConfigFileException (Path Abs File) ParseException\n  | ParseCustomSnapshotException Text ParseException\n  | NoProjectConfigFound (Path Abs Dir) (Maybe Text)\n  | UnexpectedArchiveContents [Path Abs Dir] [Path Abs File]\n  | UnableToExtractArchive Text (Path Abs File)\n  | BadStackVersionException VersionRange\n  | NoMatchingSnapshot (NonEmpty SnapName)\n  | ResolverMismatch !RawSnapshotLocation String\n  | ResolverPartial !RawSnapshotLocation String\n  | NoSuchDirectory FilePath\n  | ParseGHCVariantException String\n  | BadStackRoot (Path Abs Dir)\n  | Won'tCreateStackRootInDirectoryOwnedByDifferentUser (Path Abs Dir) (Path Abs Dir) -- ^ @$STACK_ROOT@, parent dir\n  | UserDoesn'tOwnDirectory (Path Abs Dir)\n  | ManualGHCVariantSettingsAreIncompatibleWithSystemGHC\n  | NixRequiresSystemGhc\n  | NoResolverWhenUsingNoProject\n  | DuplicateLocalPackageNames ![(PackageName, [PackageLocation])]\n  deriving Typeable\ninstance Show ConfigException where\n    show (ParseConfigFileException configFile exception) = concat\n        [ \"Could not parse '\"\n        , toFilePath configFile\n        , \"':\\n\"\n        , Yaml.prettyPrintParseException exception\n        , \"\\nSee http://docs.haskellstack.org/en/stable/yaml_configuration/\"\n        ]\n    show (ParseCustomSnapshotException url exception) = concat\n        [ \"Could not parse '\"\n        , T.unpack url\n        , \"':\\n\"\n        , Yaml.prettyPrintParseException exception\n        , \"\\nSee https://docs.haskellstack.org/en/stable/custom_snapshot/\"\n        ]\n    show (NoProjectConfigFound dir mcmd) = concat\n        [ \"Unable to find a stack.yaml file in the current directory (\"\n        , toFilePath dir\n        , \") or its ancestors\"\n        , case mcmd of\n            Nothing -> \"\"\n            Just cmd -> \"\\nRecommended action: stack \" ++ T.unpack cmd\n        ]\n    show (UnexpectedArchiveContents dirs files) = concat\n        [ \"When unpacking an archive specified in your stack.yaml file, \"\n        , \"did not find expected contents. Expected: a single directory. Found: \"\n        , show ( map (toFilePath . dirname) dirs\n               , map (toFilePath . filename) files\n               )\n        ]\n    show (UnableToExtractArchive url file) = concat\n        [ \"Archive extraction failed. Tarballs and zip archives are supported, couldn't handle the following URL, \"\n        , T.unpack url, \" downloaded to the file \", toFilePath $ filename file\n        ]\n    show (BadStackVersionException requiredRange) = concat\n        [ \"The version of stack you are using (\"\n        , show (mkVersion' Meta.version)\n        , \") is outside the required\\n\"\n        ,\"version range specified in stack.yaml (\"\n        , T.unpack (versionRangeText requiredRange)\n        , \").\" ]\n    show (NoMatchingSnapshot names) = concat\n        [ \"None of the following snapshots provides a compiler matching \"\n        , \"your package(s):\\n\"\n        , unlines $ map (\\name -> \"    - \" <> show name)\n                        (NonEmpty.toList names)\n        , resolveOptions\n        ]\n    show (ResolverMismatch resolver errDesc) = concat\n        [ \"Resolver '\"\n        , T.unpack $ utf8BuilderToText $ display resolver\n        , \"' does not have a matching compiler to build some or all of your \"\n        , \"package(s).\\n\"\n        , errDesc\n        , resolveOptions\n        ]\n    show (ResolverPartial resolver errDesc) = concat\n        [ \"Resolver '\"\n        , T.unpack $ utf8BuilderToText $ display resolver\n        , \"' does not have all the packages to match your requirements.\\n\"\n        , unlines $ fmap (\"    \" <>) (lines errDesc)\n        , resolveOptions\n        ]\n    show (NoSuchDirectory dir) =\n        \"No directory could be located matching the supplied path: \" ++ dir\n    show (ParseGHCVariantException v) =\n        \"Invalid ghc-variant value: \" ++ v\n    show (BadStackRoot stackRoot) = concat\n        [ \"Invalid stack root: '\"\n        , toFilePath stackRoot\n        , \"'. Please provide a valid absolute path.\"\n        ]\n    show (Won'tCreateStackRootInDirectoryOwnedByDifferentUser envStackRoot parentDir) = concat\n        [ \"Preventing creation of stack root '\"\n        , toFilePath envStackRoot\n        , \"'. Parent directory '\"\n        , toFilePath parentDir\n        , \"' is owned by someone else.\"\n        ]\n    show (UserDoesn'tOwnDirectory dir) = concat\n        [ \"You are not the owner of '\"\n        , toFilePath dir\n        , \"'. Aborting to protect file permissions.\"\n        , \"\\nRetry with '--\"\n        , T.unpack configMonoidAllowDifferentUserName\n        , \"' to disable this precaution.\"\n        ]\n    show ManualGHCVariantSettingsAreIncompatibleWithSystemGHC = T.unpack $ T.concat\n        [ \"stack can only control the \"\n        , configMonoidGHCVariantName\n        , \" of its own GHC installations. Please use '--no-\"\n        , configMonoidSystemGHCName\n        , \"'.\"\n        ]\n    show NixRequiresSystemGhc = T.unpack $ T.concat\n        [ \"stack's Nix integration is incompatible with '--no-system-ghc'. \"\n        , \"Please use '--\"\n        , configMonoidSystemGHCName\n        , \"' or disable the Nix integration.\"\n        ]\n    show NoResolverWhenUsingNoProject = \"When using the script command, you must provide a resolver argument\"\n    show (DuplicateLocalPackageNames pairs) = concat\n        $ \"The same package name is used in multiple local packages\\n\"\n        : map go pairs\n      where\n        go (name, dirs) = unlines\n            $ \"\"\n            : (packageNameString name ++ \" used in:\")\n            : map goLoc dirs\n        goLoc loc = \"- \" ++ show loc\ninstance Exception ConfigException\n\nresolveOptions :: String\nresolveOptions =\n  unlines [ \"\\nThis may be resolved by:\"\n          , \"    - Using '--omit-packages' to exclude mismatching package(s).\"\n          , \"    - Using '--resolver' to specify a matching snapshot/resolver\"\n          ]\n\n-- | Get the URL to request the information on the latest snapshots\naskLatestSnapshotUrl :: (MonadReader env m, HasConfig env) => m Text\naskLatestSnapshotUrl = view $ configL.to configLatestSnapshot\n\n-- | @\".stack-work\"@\nworkDirL :: HasConfig env => Lens' env (Path Rel Dir)\nworkDirL = configL.lens configWorkDir (\\x y -> x { configWorkDir = y })\n\n-- | Per-project work dir\ngetProjectWorkDir :: (HasBuildConfig env, MonadReader env m) => m (Path Abs Dir)\ngetProjectWorkDir = do\n    root    <- view projectRootL\n    workDir <- view workDirL\n    return (root </> workDir)\n\n-- | Relative directory for the platform identifier\nplatformOnlyRelDir\n    :: (MonadReader env m, HasPlatform env, MonadThrow m)\n    => m (Path Rel Dir)\nplatformOnlyRelDir = do\n    platform <- view platformL\n    platformVariant <- view platformVariantL\n    parseRelDir (Distribution.Text.display platform ++ platformVariantSuffix platformVariant)\n\n-- | Directory containing snapshots\nsnapshotsDir :: (MonadReader env m, HasEnvConfig env, MonadThrow m) => m (Path Abs Dir)\nsnapshotsDir = do\n    root <- view stackRootL\n    platform <- platformGhcRelDir\n    return $ root </> relDirSnapshots </> platform\n\n-- | Installation root for dependencies\ninstallationRootDeps :: (HasEnvConfig env) => RIO env (Path Abs Dir)\ninstallationRootDeps = do\n    root <- view stackRootL\n    -- TODO: also useShaPathOnWindows here, once #1173 is resolved.\n    psc <- platformSnapAndCompilerRel\n    return $ root </> relDirSnapshots </> psc\n\n-- | Installation root for locals\ninstallationRootLocal :: (HasEnvConfig env) => RIO env (Path Abs Dir)\ninstallationRootLocal = do\n    workDir <- getProjectWorkDir\n    psc <- useShaPathOnWindows =<< platformSnapAndCompilerRel\n    return $ workDir </> relDirInstall </> psc\n\n-- | Installation root for compiler tools\nbindirCompilerTools :: (MonadThrow m, MonadReader env m, HasEnvConfig env) => m (Path Abs Dir)\nbindirCompilerTools = do\n    config <- view configL\n    platform <- platformGhcRelDir\n    compilerVersion <- view actualCompilerVersionL\n    compiler <- parseRelDir $ compilerVersionString compilerVersion\n    return $\n        view stackRootL config </>\n        relDirCompilerTools </>\n        platform </>\n        compiler </>\n        bindirSuffix\n\n-- | Hoogle directory.\nhoogleRoot :: (HasEnvConfig env) => RIO env (Path Abs Dir)\nhoogleRoot = do\n    workDir <- getProjectWorkDir\n    psc <- useShaPathOnWindows =<< platformSnapAndCompilerRel\n    return $ workDir </> relDirHoogle </> psc\n\n-- | Get the hoogle database path.\nhoogleDatabasePath :: (HasEnvConfig env) => RIO env (Path Abs File)\nhoogleDatabasePath = do\n    dir <- hoogleRoot\n    return (dir </> relFileDatabaseHoo)\n\n-- | Path for platform followed by snapshot name followed by compiler\n-- name.\nplatformSnapAndCompilerRel\n    :: (HasEnvConfig env)\n    => RIO env (Path Rel Dir)\nplatformSnapAndCompilerRel = do\n    platform <- platformGhcRelDir\n    smh <- view $ envConfigL.to envConfigSourceMapHash\n    name <- smRelDir smh\n    ghc <- compilerVersionDir\n    useShaPathOnWindows (platform </> name </> ghc)\n\n-- | Relative directory for the platform and GHC identifier\nplatformGhcRelDir\n    :: (MonadReader env m, HasEnvConfig env, MonadThrow m)\n    => m (Path Rel Dir)\nplatformGhcRelDir = do\n    cp <- view compilerPathsL\n    let cbSuffix = compilerBuildSuffix $ cpBuild cp\n    verOnly <- platformGhcVerOnlyRelDirStr\n    parseRelDir (mconcat [ verOnly, cbSuffix ])\n\n-- | Relative directory for the platform and GHC identifier without GHC bindist build\nplatformGhcVerOnlyRelDir\n    :: (MonadReader env m, HasPlatform env, HasGHCVariant env, MonadThrow m)\n    => m (Path Rel Dir)\nplatformGhcVerOnlyRelDir =\n    parseRelDir =<< platformGhcVerOnlyRelDirStr\n\n-- | Relative directory for the platform and GHC identifier without GHC bindist build\n-- (before parsing into a Path)\nplatformGhcVerOnlyRelDirStr\n    :: (MonadReader env m, HasPlatform env, HasGHCVariant env)\n    => m FilePath\nplatformGhcVerOnlyRelDirStr = do\n    platform <- view platformL\n    platformVariant <- view platformVariantL\n    ghcVariant <- view ghcVariantL\n    return $ mconcat [ Distribution.Text.display platform\n                     , platformVariantSuffix platformVariant\n                     , ghcVariantSuffix ghcVariant ]\n\n-- | This is an attempt to shorten stack paths on Windows to decrease our\n-- chances of hitting 260 symbol path limit. The idea is to calculate\n-- SHA1 hash of the path used on other architectures, encode with base\n-- 16 and take first 8 symbols of it.\nuseShaPathOnWindows :: MonadThrow m => Path Rel Dir -> m (Path Rel Dir)\nuseShaPathOnWindows\n  | osIsWindows = shaPath\n  | otherwise = pure\n\nshaPath :: (IsPath Rel t, MonadThrow m) => Path Rel t -> m (Path Rel t)\nshaPath = shaPathForBytes . encodeUtf8 . T.pack . toFilePath\n\nshaPathForBytes :: (IsPath Rel t, MonadThrow m) => ByteString -> m (Path Rel t)\nshaPathForBytes\n    = parsePath . S8.unpack . S8.take 8\n    . Mem.convertToBase Mem.Base16 . hashWith SHA1\n\n-- TODO: Move something like this into the path package. Consider\n-- subsuming path-io's 'AnyPath'?\nclass IsPath b t where\n  parsePath :: MonadThrow m => FilePath -> m (Path b t)\n\ninstance IsPath Abs Dir where parsePath = parseAbsDir\ninstance IsPath Rel Dir where parsePath = parseRelDir\ninstance IsPath Abs File where parsePath = parseAbsFile\ninstance IsPath Rel File where parsePath = parseRelFile\n\ncompilerVersionDir :: (MonadThrow m, MonadReader env m, HasEnvConfig env) => m (Path Rel Dir)\ncompilerVersionDir = do\n    compilerVersion <- view actualCompilerVersionL\n    parseRelDir $ case compilerVersion of\n        ACGhc version -> versionString version\n        ACGhcGit {} -> compilerVersionString compilerVersion\n\n-- | Package database for installing dependencies into\npackageDatabaseDeps :: (HasEnvConfig env) => RIO env (Path Abs Dir)\npackageDatabaseDeps = do\n    root <- installationRootDeps\n    return $ root </> relDirPkgdb\n\n-- | Package database for installing local packages into\npackageDatabaseLocal :: (HasEnvConfig env) => RIO env (Path Abs Dir)\npackageDatabaseLocal = do\n    root <- installationRootLocal\n    return $ root </> relDirPkgdb\n\n-- | Extra package databases\npackageDatabaseExtra :: (MonadReader env m, HasEnvConfig env) => m [Path Abs Dir]\npackageDatabaseExtra = view $ buildConfigL.to bcExtraPackageDBs\n\n-- | Where do we get information on global packages for loading up a\n-- 'LoadedSnapshot'?\ndata GlobalInfoSource\n  = GISSnapshotHints\n  -- ^ Accept the hints in the snapshot definition\n  | GISCompiler ActualCompiler\n  -- ^ Look up the actual information in the installed compiler\n\n-- | Where HPC reports and tix files get stored.\nhpcReportDir :: (HasEnvConfig env)\n             => RIO env (Path Abs Dir)\nhpcReportDir = do\n   root <- installationRootLocal\n   return $ root </> relDirHpc\n\n-- | Get the extra bin directories (for the PATH). Puts more local first\n--\n-- Bool indicates whether or not to include the locals\nextraBinDirs :: (HasEnvConfig env)\n             => RIO env (Bool -> [Path Abs Dir])\nextraBinDirs = do\n    deps <- installationRootDeps\n    local' <- installationRootLocal\n    tools <- bindirCompilerTools\n    return $ \\locals -> if locals\n        then [local' </> bindirSuffix, deps </> bindirSuffix, tools]\n        else [deps </> bindirSuffix, tools]\n\nminimalEnvSettings :: EnvSettings\nminimalEnvSettings =\n    EnvSettings\n    { esIncludeLocals = False\n    , esIncludeGhcPackagePath = False\n    , esStackExe = False\n    , esLocaleUtf8 = False\n    , esKeepGhcRts = False\n    }\n\n-- | Default @EnvSettings@ which includes locals and GHC_PACKAGE_PATH.\n--\n-- Note that this also passes through the GHCRTS environment variable.\n-- See https://github.com/commercialhaskell/stack/issues/3444\ndefaultEnvSettings :: EnvSettings\ndefaultEnvSettings = EnvSettings\n    { esIncludeLocals = True\n    , esIncludeGhcPackagePath = True\n    , esStackExe = True\n    , esLocaleUtf8 = False\n    , esKeepGhcRts = True\n    }\n\n-- | Environment settings which do not embellish the environment\n--\n-- Note that this also passes through the GHCRTS environment variable.\n-- See https://github.com/commercialhaskell/stack/issues/3444\nplainEnvSettings :: EnvSettings\nplainEnvSettings = EnvSettings\n    { esIncludeLocals = False\n    , esIncludeGhcPackagePath = False\n    , esStackExe = False\n    , esLocaleUtf8 = False\n    , esKeepGhcRts = True\n    }\n\n-- | Get the path for the given compiler ignoring any local binaries.\n--\n-- https://github.com/commercialhaskell/stack/issues/1052\ngetCompilerPath :: HasCompiler env => RIO env (Path Abs File)\ngetCompilerPath = view $ compilerPathsL.to cpCompiler\n\ndata ProjectAndConfigMonoid\n  = ProjectAndConfigMonoid !Project !ConfigMonoid\n\nparseProjectAndConfigMonoid :: Path Abs Dir -> Value -> Yaml.Parser (WithJSONWarnings (IO ProjectAndConfigMonoid))\nparseProjectAndConfigMonoid rootDir =\n    withObjectWarnings \"ProjectAndConfigMonoid\" $ \\o -> do\n        packages <- o ..:? \"packages\" ..!= [RelFilePath \".\"]\n        deps <- jsonSubWarningsTT (o ..:? \"extra-deps\") ..!= []\n        flags' <- o ..:? \"flags\" ..!= mempty\n        let flags = unCabalStringMap <$> unCabalStringMap\n                    (flags' :: Map (CabalString PackageName) (Map (CabalString FlagName) Bool))\n\n        resolver <- jsonSubWarnings $ o ...: [\"snapshot\", \"resolver\"]\n        mcompiler <- o ..:? \"compiler\"\n        msg <- o ..:? \"user-message\"\n        config <- parseConfigMonoidObject rootDir o\n        extraPackageDBs <- o ..:? \"extra-package-dbs\" ..!= []\n        mcurator <- jsonSubWarningsT (o ..:? \"curator\")\n        drops <- o ..:? \"drop-packages\" ..!= mempty\n        return $ do\n          deps' <- mapM (resolvePaths (Just rootDir)) deps\n          resolver' <- resolvePaths (Just rootDir) resolver\n          let project = Project\n                  { projectUserMsg = msg\n                  , projectResolver = resolver'\n                  , projectCompiler = mcompiler -- FIXME make sure resolver' isn't SLCompiler\n                  , projectExtraPackageDBs = extraPackageDBs\n                  , projectPackages = packages\n                  , projectDependencies = concatMap toList (deps' :: [NonEmpty RawPackageLocation])\n                  , projectFlags = flags\n                  , projectCurator = mcurator\n                  , projectDropPackages = Set.map unCabalString drops\n                  }\n          pure $ ProjectAndConfigMonoid project config\n\n-- | A software control system.\ndata SCM = Git\n  deriving (Show)\n\ninstance FromJSON SCM where\n    parseJSON v = do\n        s <- parseJSON v\n        case s of\n            \"git\" -> return Git\n            _ -> fail (\"Unknown or unsupported SCM: \" <> s)\n\ninstance ToJSON SCM where\n    toJSON Git = toJSON (\"git\" :: Text)\n\n-- | A variant of the platform, used to differentiate Docker builds from host\ndata PlatformVariant = PlatformVariantNone\n                     | PlatformVariant String\n\n-- | Render a platform variant to a String suffix.\nplatformVariantSuffix :: PlatformVariant -> String\nplatformVariantSuffix PlatformVariantNone = \"\"\nplatformVariantSuffix (PlatformVariant v) = \"-\" ++ v\n\n-- | Specialized bariant of GHC (e.g. libgmp4 or integer-simple)\ndata GHCVariant\n    = GHCStandard -- ^ Standard bindist\n    | GHCIntegerSimple -- ^ Bindist that uses integer-simple\n    | GHCCustom String -- ^ Other bindists\n    deriving (Show)\n\ninstance FromJSON GHCVariant where\n    -- Strange structuring is to give consistent error messages\n    parseJSON =\n        withText\n            \"GHCVariant\"\n            (either (fail . show) return . parseGHCVariant . T.unpack)\n\n-- | Render a GHC variant to a String.\nghcVariantName :: GHCVariant -> String\nghcVariantName GHCStandard = \"standard\"\nghcVariantName GHCIntegerSimple = \"integersimple\"\nghcVariantName (GHCCustom name) = \"custom-\" ++ name\n\n-- | Render a GHC variant to a String suffix.\nghcVariantSuffix :: GHCVariant -> String\nghcVariantSuffix GHCStandard = \"\"\nghcVariantSuffix v = \"-\" ++ ghcVariantName v\n\n-- | Parse GHC variant from a String.\nparseGHCVariant :: (MonadThrow m) => String -> m GHCVariant\nparseGHCVariant s =\n    case stripPrefix \"custom-\" s of\n        Just name -> return (GHCCustom name)\n        Nothing\n          | s == \"\" -> return GHCStandard\n          | s == \"standard\" -> return GHCStandard\n          | s == \"integersimple\" -> return GHCIntegerSimple\n          | otherwise -> return (GHCCustom s)\n\n-- | Build of the compiler distribution (e.g. standard, gmp4, tinfo6)\n-- | Information for a file to download.\ndata DownloadInfo = DownloadInfo\n    { downloadInfoUrl :: Text\n      -- ^ URL or absolute file path\n    , downloadInfoContentLength :: Maybe Int\n    , downloadInfoSha1 :: Maybe ByteString\n    , downloadInfoSha256 :: Maybe ByteString\n    } deriving (Show)\n\ninstance FromJSON (WithJSONWarnings DownloadInfo) where\n    parseJSON = withObjectWarnings \"DownloadInfo\" parseDownloadInfoFromObject\n\n-- | Parse JSON in existing object for 'DownloadInfo'\nparseDownloadInfoFromObject :: Object -> WarningParser DownloadInfo\nparseDownloadInfoFromObject o = do\n    url <- o ..: \"url\"\n    contentLength <- o ..:? \"content-length\"\n    sha1TextMay <- o ..:? \"sha1\"\n    sha256TextMay <- o ..:? \"sha256\"\n    return\n        DownloadInfo\n        { downloadInfoUrl = url\n        , downloadInfoContentLength = contentLength\n        , downloadInfoSha1 = fmap encodeUtf8 sha1TextMay\n        , downloadInfoSha256 = fmap encodeUtf8 sha256TextMay\n        }\n\ndata VersionedDownloadInfo = VersionedDownloadInfo\n    { vdiVersion :: Version\n    , vdiDownloadInfo :: DownloadInfo\n    }\n    deriving Show\n\ninstance FromJSON (WithJSONWarnings VersionedDownloadInfo) where\n    parseJSON = withObjectWarnings \"VersionedDownloadInfo\" $ \\o -> do\n        CabalString version <- o ..: \"version\"\n        downloadInfo <- parseDownloadInfoFromObject o\n        return VersionedDownloadInfo\n            { vdiVersion = version\n            , vdiDownloadInfo = downloadInfo\n            }\n\ndata GHCDownloadInfo = GHCDownloadInfo\n    { gdiConfigureOpts :: [Text]\n    , gdiConfigureEnv :: Map Text Text\n    , gdiDownloadInfo :: DownloadInfo\n    }\n    deriving Show\n\ninstance FromJSON (WithJSONWarnings GHCDownloadInfo) where\n    parseJSON = withObjectWarnings \"GHCDownloadInfo\" $ \\o -> do\n        configureOpts <- o ..:? \"configure-opts\" ..!= mempty\n        configureEnv <- o ..:? \"configure-env\" ..!= mempty\n        downloadInfo <- parseDownloadInfoFromObject o\n        return GHCDownloadInfo\n            { gdiConfigureOpts = configureOpts\n            , gdiConfigureEnv = configureEnv\n            , gdiDownloadInfo = downloadInfo\n            }\n\ndata SetupInfo = SetupInfo\n    { siSevenzExe :: Maybe DownloadInfo\n    , siSevenzDll :: Maybe DownloadInfo\n    , siMsys2 :: Map Text VersionedDownloadInfo\n    , siGHCs :: Map Text (Map Version GHCDownloadInfo)\n    , siStack :: Map Text (Map Version DownloadInfo)\n    }\n    deriving Show\n\ninstance FromJSON (WithJSONWarnings SetupInfo) where\n    parseJSON = withObjectWarnings \"SetupInfo\" $ \\o -> do\n        siSevenzExe <- jsonSubWarningsT (o ..:? \"sevenzexe-info\")\n        siSevenzDll <- jsonSubWarningsT (o ..:? \"sevenzdll-info\")\n        siMsys2 <- jsonSubWarningsT (o ..:? \"msys2\" ..!= mempty)\n        (fmap unCabalStringMap -> siGHCs) <- jsonSubWarningsTT (o ..:? \"ghc\" ..!= mempty)\n        (fmap unCabalStringMap -> siStack) <- jsonSubWarningsTT (o ..:? \"stack\" ..!= mempty)\n        return SetupInfo {..}\n\n-- | For the @siGHCs@ field maps are deeply merged.\n-- For all fields the values from the first @SetupInfo@ win.\ninstance Semigroup SetupInfo where\n    l <> r =\n        SetupInfo\n        { siSevenzExe = siSevenzExe l <|> siSevenzExe r\n        , siSevenzDll = siSevenzDll l <|> siSevenzDll r\n        , siMsys2 = siMsys2 l <> siMsys2 r\n        , siGHCs = Map.unionWith (<>) (siGHCs l) (siGHCs r)\n        , siStack = Map.unionWith (<>) (siStack l) (siStack r) }\n\ninstance Monoid SetupInfo where\n    mempty =\n        SetupInfo\n        { siSevenzExe = Nothing\n        , siSevenzDll = Nothing\n        , siMsys2 = Map.empty\n        , siGHCs = Map.empty\n        , siStack = Map.empty\n        }\n    mappend = (<>)\n\n-- | How PVP bounds should be added to .cabal files\ndata PvpBoundsType\n  = PvpBoundsNone\n  | PvpBoundsUpper\n  | PvpBoundsLower\n  | PvpBoundsBoth\n  deriving (Show, Read, Eq, Typeable, Ord, Enum, Bounded)\n\ndata PvpBounds = PvpBounds\n  { pbType :: !PvpBoundsType\n  , pbAsRevision :: !Bool\n  }\n  deriving (Show, Read, Eq, Typeable, Ord)\n\npvpBoundsText :: PvpBoundsType -> Text\npvpBoundsText PvpBoundsNone = \"none\"\npvpBoundsText PvpBoundsUpper = \"upper\"\npvpBoundsText PvpBoundsLower = \"lower\"\npvpBoundsText PvpBoundsBoth = \"both\"\n\nparsePvpBounds :: Text -> Either String PvpBounds\nparsePvpBounds t = maybe err Right $ do\n    (t', asRevision) <-\n      case T.break (== '-') t of\n        (x, \"\") -> Just (x, False)\n        (x, \"-revision\") -> Just (x, True)\n        _ -> Nothing\n    x <- Map.lookup t' m\n    Just PvpBounds\n      { pbType = x\n      , pbAsRevision = asRevision\n      }\n  where\n    m = Map.fromList $ map (pvpBoundsText &&& id) [minBound..maxBound]\n    err = Left $ \"Invalid PVP bounds: \" ++ T.unpack t\n\ninstance ToJSON PvpBounds where\n  toJSON (PvpBounds typ asRevision) =\n    toJSON (pvpBoundsText typ <> (if asRevision then \"-revision\" else \"\"))\ninstance FromJSON PvpBounds where\n  parseJSON = withText \"PvpBounds\" (either fail return . parsePvpBounds)\n\n-- | Data passed into Docker container for the Docker entrypoint's use\nnewtype DockerEntrypoint = DockerEntrypoint\n    { deUser :: Maybe DockerUser\n      -- ^ UID/GID/etc of host user, if we wish to perform UID/GID switch in container\n    } deriving (Read,Show)\n\n-- | Docker host user info\ndata DockerUser = DockerUser\n    { duUid :: UserID -- ^ uid\n    , duGid :: GroupID -- ^ gid\n    , duGroups :: [GroupID] -- ^ Supplemantal groups\n    , duUmask :: FileMode -- ^ File creation mask }\n    } deriving (Read,Show)\n\ndata GhcOptionKey\n  = GOKOldEverything\n  | GOKEverything\n  | GOKLocals\n  | GOKTargets\n  | GOKPackage !PackageName\n  deriving (Eq, Ord)\n\ninstance FromJSONKey GhcOptionKey where\n  fromJSONKey = FromJSONKeyTextParser $ \\t ->\n    case t of\n      \"*\" -> return GOKOldEverything\n      \"$everything\" -> return GOKEverything\n      \"$locals\" -> return GOKLocals\n      \"$targets\" -> return GOKTargets\n      _ ->\n        case parsePackageName $ T.unpack t of\n          Nothing -> fail $ \"Invalid package name: \" ++ show t\n          Just x -> return $ GOKPackage x\n  fromJSONKeyList = FromJSONKeyTextParser $ \\_ -> fail \"GhcOptionKey.fromJSONKeyList\"\n\nnewtype GhcOptions = GhcOptions { unGhcOptions :: [Text] }\n\ninstance FromJSON GhcOptions where\n  parseJSON = withText \"GhcOptions\" $ \\t ->\n    case parseArgs Escaping t of\n      Left e -> fail e\n      Right opts -> return $ GhcOptions $ map T.pack opts\n\n-----------------------------------\n-- Lens classes\n-----------------------------------\n\n-- | Class for environment values which have a Platform\nclass HasPlatform env where\n    platformL :: Lens' env Platform\n    default platformL :: HasConfig env => Lens' env Platform\n    platformL = configL.platformL\n    {-# INLINE platformL #-}\n    platformVariantL :: Lens' env PlatformVariant\n    default platformVariantL :: HasConfig env => Lens' env PlatformVariant\n    platformVariantL = configL.platformVariantL\n    {-# INLINE platformVariantL #-}\n\n-- | Class for environment values which have a GHCVariant\nclass HasGHCVariant env where\n    ghcVariantL :: SimpleGetter env GHCVariant\n    default ghcVariantL :: HasConfig env => SimpleGetter env GHCVariant\n    ghcVariantL = configL.ghcVariantL\n    {-# INLINE ghcVariantL #-}\n\n-- | Class for environment values which have a 'Runner'.\nclass (HasProcessContext env, HasLogFunc env) => HasRunner env where\n  runnerL :: Lens' env Runner\ninstance HasLogFunc Runner where\n  logFuncL = lens runnerLogFunc (\\x y -> x { runnerLogFunc = y })\ninstance HasProcessContext Runner where\n  processContextL = lens runnerProcessContext (\\x y -> x { runnerProcessContext = y })\ninstance HasRunner Runner where\n  runnerL = id\ninstance HasStylesUpdate Runner where\n  stylesUpdateL = globalOptsL.\n                  lens globalStylesUpdate (\\x y -> x { globalStylesUpdate = y })\ninstance HasTerm Runner where\n  useColorL = lens runnerUseColor (\\x y -> x { runnerUseColor = y })\n  termWidthL = lens runnerTermWidth (\\x y -> x { runnerTermWidth = y })\n\nglobalOptsL :: HasRunner env => Lens' env GlobalOpts\nglobalOptsL = runnerL.lens runnerGlobalOpts (\\x y -> x { runnerGlobalOpts = y })\n\n-- | Class for environment values that can provide a 'Config'.\nclass (HasPlatform env, HasGHCVariant env, HasProcessContext env, HasPantryConfig env, HasTerm env, HasRunner env) => HasConfig env where\n    configL :: Lens' env Config\n    default configL :: HasBuildConfig env => Lens' env Config\n    configL = buildConfigL.lens bcConfig (\\x y -> x { bcConfig = y })\n    {-# INLINE configL #-}\n\nclass HasConfig env => HasBuildConfig env where\n    buildConfigL :: Lens' env BuildConfig\n    default buildConfigL :: HasEnvConfig env => Lens' env BuildConfig\n    buildConfigL = envConfigL.lens\n        envConfigBuildConfig\n        (\\x y -> x { envConfigBuildConfig = y })\n\nclass (HasBuildConfig env, HasSourceMap env, HasCompiler env) => HasEnvConfig env where\n    envConfigL :: Lens' env EnvConfig\n\n-----------------------------------\n-- Lens instances\n-----------------------------------\n\ninstance HasPlatform (Platform,PlatformVariant) where\n    platformL = _1\n    platformVariantL = _2\ninstance HasPlatform Config where\n    platformL = lens configPlatform (\\x y -> x { configPlatform = y })\n    platformVariantL = lens configPlatformVariant (\\x y -> x { configPlatformVariant = y })\ninstance HasPlatform BuildConfig\ninstance HasPlatform EnvConfig\n\ninstance HasGHCVariant GHCVariant where\n    ghcVariantL = id\n    {-# INLINE ghcVariantL #-}\ninstance HasGHCVariant Config where\n    ghcVariantL = to $ fromMaybe GHCStandard . configGHCVariant\ninstance HasGHCVariant BuildConfig\ninstance HasGHCVariant EnvConfig\n\ninstance HasProcessContext Config where\n    processContextL = runnerL.processContextL\ninstance HasProcessContext BuildConfig where\n    processContextL = configL.processContextL\ninstance HasProcessContext EnvConfig where\n    processContextL = configL.processContextL\n\ninstance HasPantryConfig Config where\n    pantryConfigL = lens configPantryConfig (\\x y -> x { configPantryConfig = y })\ninstance HasPantryConfig BuildConfig where\n    pantryConfigL = configL.pantryConfigL\ninstance HasPantryConfig EnvConfig where\n    pantryConfigL = configL.pantryConfigL\n\ninstance HasConfig Config where\n    configL = id\n    {-# INLINE configL #-}\ninstance HasConfig BuildConfig where\n    configL = lens bcConfig (\\x y -> x { bcConfig = y })\ninstance HasConfig EnvConfig\n\ninstance HasBuildConfig BuildConfig where\n    buildConfigL = id\n    {-# INLINE buildConfigL #-}\ninstance HasBuildConfig EnvConfig\n\ninstance HasCompiler EnvConfig where\n    compilerPathsL = to envConfigCompilerPaths\ninstance HasEnvConfig EnvConfig where\n    envConfigL = id\n    {-# INLINE envConfigL #-}\n\ninstance HasRunner Config where\n  runnerL = lens configRunner (\\x y -> x { configRunner = y })\ninstance HasRunner BuildConfig where\n  runnerL = configL.runnerL\ninstance HasRunner EnvConfig where\n  runnerL = configL.runnerL\n\ninstance HasLogFunc Config where\n  logFuncL = runnerL.logFuncL\ninstance HasLogFunc BuildConfig where\n  logFuncL = runnerL.logFuncL\ninstance HasLogFunc EnvConfig where\n  logFuncL = runnerL.logFuncL\n\ninstance HasStylesUpdate Config where\n  stylesUpdateL = runnerL.stylesUpdateL\ninstance HasStylesUpdate BuildConfig where\n  stylesUpdateL = runnerL.stylesUpdateL\ninstance HasStylesUpdate EnvConfig where\n  stylesUpdateL = runnerL.stylesUpdateL\n\ninstance HasTerm Config where\n  useColorL = runnerL.useColorL\n  termWidthL = runnerL.termWidthL\ninstance HasTerm BuildConfig where\n  useColorL = runnerL.useColorL\n  termWidthL = runnerL.termWidthL\ninstance HasTerm EnvConfig where\n  useColorL = runnerL.useColorL\n  termWidthL = runnerL.termWidthL\n\n-----------------------------------\n-- Helper lenses\n-----------------------------------\n\nstackRootL :: HasConfig s => Lens' s (Path Abs Dir)\nstackRootL = configL.lens configStackRoot (\\x y -> x { configStackRoot = y })\n\n-- | The compiler specified by the @SnapshotDef@. This may be\n-- different from the actual compiler used!\nwantedCompilerVersionL :: HasBuildConfig s => Getting r s WantedCompiler\nwantedCompilerVersionL = buildConfigL.to (smwCompiler . bcSMWanted)\n\n-- | Location of the ghc-pkg executable\nnewtype GhcPkgExe = GhcPkgExe (Path Abs File)\n  deriving Show\n\n-- | Get the 'GhcPkgExe' from a 'HasCompiler' environment\ngetGhcPkgExe :: HasCompiler env => RIO env GhcPkgExe\ngetGhcPkgExe = view $ compilerPathsL.to cpPkg\n\n-- | Dump information for a single package\ndata DumpPackage = DumpPackage\n    { dpGhcPkgId :: !GhcPkgId\n    , dpPackageIdent :: !PackageIdentifier\n    , dpParentLibIdent :: !(Maybe PackageIdentifier)\n    , dpLicense :: !(Maybe C.License)\n    , dpLibDirs :: ![FilePath]\n    , dpLibraries :: ![Text]\n    , dpHasExposedModules :: !Bool\n    , dpExposedModules :: !(Set ModuleName)\n    , dpDepends :: ![GhcPkgId]\n    , dpHaddockInterfaces :: ![FilePath]\n    , dpHaddockHtml :: !(Maybe FilePath)\n    , dpIsExposed :: !Bool\n    }\n    deriving (Show, Read, Eq)\n\n-- | Paths on the filesystem for the compiler we're using\ndata CompilerPaths = CompilerPaths\n  { cpCompilerVersion :: !ActualCompiler\n  , cpArch :: !Arch\n  , cpBuild :: !CompilerBuild\n  , cpCompiler :: !(Path Abs File)\n  -- | ghc-pkg or equivalent\n  , cpPkg :: !GhcPkgExe\n  -- | runghc\n  , cpInterpreter :: !(Path Abs File)\n  -- | haddock, in 'IO' to allow deferring the lookup\n  , cpHaddock :: !(Path Abs File)\n  -- | Is this a Stack-sandboxed installation?\n  , cpSandboxed :: !Bool\n  , cpCabalVersion :: !Version\n  -- ^ This is the version of Cabal that stack will use to compile Setup.hs files\n  -- in the build process.\n  --\n  -- Note that this is not necessarily the same version as the one that stack\n  -- depends on as a library and which is displayed when running\n  -- @stack ls dependencies | grep Cabal@ in the stack project.\n  , cpGlobalDB :: !(Path Abs Dir)\n  -- ^ Global package database\n  , cpGhcInfo :: !ByteString\n  -- ^ Output of @ghc --info@\n  , cpGlobalDump :: !(Map PackageName DumpPackage)\n  }\n  deriving Show\n\ncpWhich :: (MonadReader env m, HasCompiler env) => m WhichCompiler\ncpWhich = view $ compilerPathsL.to (whichCompiler.cpCompilerVersion)\n\ndata ExtraDirs = ExtraDirs\n    { edBins :: ![Path Abs Dir]\n    , edInclude :: ![Path Abs Dir]\n    , edLib :: ![Path Abs Dir]\n    } deriving (Show, Generic)\ninstance Semigroup ExtraDirs where\n    (<>) = mappenddefault\ninstance Monoid ExtraDirs where\n    mempty = memptydefault\n    mappend = (<>)\n\n-- | An environment which ensures that the given compiler is available\n-- on the PATH\nclass HasCompiler env where\n  compilerPathsL :: SimpleGetter env CompilerPaths\ninstance HasCompiler CompilerPaths where\n  compilerPathsL = id\n\nclass HasSourceMap env where\n  sourceMapL :: Lens' env SourceMap\ninstance HasSourceMap EnvConfig where\n  sourceMapL = lens envConfigSourceMap (\\x y -> x { envConfigSourceMap = y })\n\n-- | The version of the compiler which will actually be used. May be\n-- different than that specified in the 'SnapshotDef' and returned\n-- by 'wantedCompilerVersionL'.\nactualCompilerVersionL :: HasSourceMap env => SimpleGetter env ActualCompiler\nactualCompilerVersionL = sourceMapL.to smCompiler\n\nbuildOptsL :: HasConfig s => Lens' s BuildOpts\nbuildOptsL = configL.lens\n    configBuild\n    (\\x y -> x { configBuild = y })\n\nbuildOptsMonoidHaddockL :: Lens' BuildOptsMonoid (Maybe Bool)\nbuildOptsMonoidHaddockL = lens (getFirstFalse . buildMonoidHaddock)\n                            (\\buildMonoid t -> buildMonoid {buildMonoidHaddock = FirstFalse t})\n\nbuildOptsMonoidTestsL :: Lens' BuildOptsMonoid (Maybe Bool)\nbuildOptsMonoidTestsL = lens (getFirstFalse . buildMonoidTests)\n                            (\\buildMonoid t -> buildMonoid {buildMonoidTests = FirstFalse t})\n\nbuildOptsMonoidBenchmarksL :: Lens' BuildOptsMonoid (Maybe Bool)\nbuildOptsMonoidBenchmarksL = lens (getFirstFalse . buildMonoidBenchmarks)\n                            (\\buildMonoid t -> buildMonoid {buildMonoidBenchmarks = FirstFalse t})\n\nbuildOptsMonoidInstallExesL :: Lens' BuildOptsMonoid (Maybe Bool)\nbuildOptsMonoidInstallExesL =\n  lens (getFirstFalse . buildMonoidInstallExes)\n       (\\buildMonoid t -> buildMonoid {buildMonoidInstallExes = FirstFalse t})\n\nbuildOptsInstallExesL :: Lens' BuildOpts Bool\nbuildOptsInstallExesL =\n  lens boptsInstallExes\n       (\\bopts t -> bopts {boptsInstallExes = t})\n\nbuildOptsHaddockL :: Lens' BuildOpts Bool\nbuildOptsHaddockL =\n  lens boptsHaddock\n       (\\bopts t -> bopts {boptsHaddock = t})\n\nglobalOptsBuildOptsMonoidL :: Lens' GlobalOpts BuildOptsMonoid\nglobalOptsBuildOptsMonoidL =\n  lens\n    globalConfigMonoid\n    (\\x y -> x { globalConfigMonoid = y })\n  .\n  lens\n    configMonoidBuildOpts\n    (\\x y -> x { configMonoidBuildOpts = y })\n\ncabalVersionL :: HasCompiler env => SimpleGetter env Version\ncabalVersionL = compilerPathsL.to cpCabalVersion\n\nwhichCompilerL :: Getting r ActualCompiler WhichCompiler\nwhichCompilerL = to whichCompiler\n\nenvOverrideSettingsL :: HasConfig env => Lens' env (EnvSettings -> IO ProcessContext)\nenvOverrideSettingsL = configL.lens\n    configProcessContextSettings\n    (\\x y -> x { configProcessContextSettings = y })\n\nshouldForceGhcColorFlag :: (HasRunner env, HasEnvConfig env)\n                        => RIO env Bool\nshouldForceGhcColorFlag = do\n    canDoColor <- (>= mkVersion [8, 2, 1]) . getGhcVersion\n              <$> view actualCompilerVersionL\n    shouldDoColor <- view useColorL\n    return $ canDoColor && shouldDoColor\n\nappropriateGhcColorFlag :: (HasRunner env, HasEnvConfig env)\n                        => RIO env (Maybe String)\nappropriateGhcColorFlag = f <$> shouldForceGhcColorFlag\n  where f True = Just ghcColorForceFlag\n        f False = Nothing\n\n-- | See 'globalTerminal'\nterminalL :: HasRunner env => Lens' env Bool\nterminalL = globalOptsL.lens globalTerminal (\\x y -> x { globalTerminal = y })\n\n-- | See 'globalReExecVersion'\nreExecL :: HasRunner env => SimpleGetter env Bool\nreExecL = globalOptsL.to (isJust . globalReExecVersion)\n\n-- | In dev mode, print as a warning, otherwise as debug\nprettyStackDevL :: HasConfig env => [StyleDoc] -> RIO env ()\nprettyStackDevL docs = do\n  config <- view configL\n  if configStackDeveloperMode config\n    then prettyWarnL docs\n    else prettyDebugL docs\n"}}}
2021-02-20 10:54:14.278041 [ThreadId 29] - Set files of interest to: [(NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs",Modified)]
2021-02-20 10:54:14.278254 [ThreadId 5] - ---> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs","languageId":"haskell","version":1,"text":"{-# LANGUAGE NoImplicitPrelude #-}\n{-# LANGUAGE ConstraintKinds #-}\n{-# LANGUAGE ScopedTypeVariables #-}\n{-# LANGUAGE DeriveDataTypeable #-}\n{-# LANGUAGE FlexibleContexts #-}\n{-# LANGUAGE OverloadedStrings #-}\n\n-- | Create new a new project directory populated with a basic working\n-- project.\n\nmodule Stack.New\n    ( new\n    , NewOpts(..)\n    , TemplateName\n    , templatesHelp\n    ) where\n\nimport           Stack.Prelude\nimport           Control.Monad.Trans.Writer.Strict\nimport           Data.Aeson as A\nimport qualified Data.ByteString.Base64 as B64\nimport           Data.ByteString.Builder (lazyByteString)\nimport qualified Data.ByteString.Lazy as LB\nimport           Data.Conduit\nimport           Data.List\nimport qualified Data.Map.Strict as M\nimport qualified Data.Set as S\nimport qualified Data.Text as T\nimport qualified Data.Text.Lazy as TL\nimport qualified Data.Text.Encoding as T\nimport qualified Data.Text.Lazy.Encoding as TLE\nimport           Data.Time.Calendar\nimport           Data.Time.Clock\nimport           Network.HTTP.StackClient (VerifiedDownloadException (..), Request, HttpException,\n                                           getResponseBody, httpLbs, mkDownloadRequest, parseRequest, parseUrlThrow,\n                                           setForceDownload, setGithubHeaders, setRequestCheckStatus, verifiedDownloadWithProgress)\nimport           Path\nimport           Path.IO\nimport           Stack.Constants\nimport           Stack.Constants.Config\nimport           Stack.Types.Config\nimport           Stack.Types.TemplateName\nimport qualified RIO.HashMap as HM\nimport           RIO.Process\nimport qualified Text.Mustache as Mustache\nimport qualified Text.Mustache.Render as Mustache\nimport           Text.ProjectTemplate\n\n--------------------------------------------------------------------------------\n-- Main project creation\n\n-- | Options for creating a new project.\ndata NewOpts = NewOpts\n    { newOptsProjectName  :: PackageName\n    -- ^ Name of the project to create.\n    , newOptsCreateBare   :: Bool\n    -- ^ Whether to create the project without a directory.\n    , newOptsTemplate     :: Maybe TemplateName\n    -- ^ Name of the template to use.\n    , newOptsNonceParams  :: Map Text Text\n    -- ^ Nonce parameters specified just for this invocation.\n    }\n\n-- | Create a new project with the given options.\nnew :: HasConfig env => NewOpts -> Bool -> RIO env (Path Abs Dir)\nnew opts forceOverwrite = do\n    when (newOptsProjectName opts `elem` wiredInPackages) $\n      throwM $ Can'tUseWiredInName (newOptsProjectName opts)\n    pwd <- getCurrentDir\n    absDir <- if bare then return pwd\n                      else do relDir <- parseRelDir (packageNameString project)\n                              liftM (pwd </>) (return relDir)\n    exists <- doesDirExist absDir\n    configTemplate <- view $ configL.to configDefaultTemplate\n    let template = fromMaybe defaultTemplateName $ asum [ cliOptionTemplate\n                                                        , configTemplate\n                                                        ]\n    if exists && not bare\n        then throwM (AlreadyExists absDir)\n        else do\n            templateText <- loadTemplate template (logUsing absDir template)\n            files <-\n                applyTemplate\n                    project\n                    template\n                    (newOptsNonceParams opts)\n                    absDir\n                    templateText\n            when (not forceOverwrite && bare) $ checkForOverwrite (M.keys files)\n            writeTemplateFiles files\n            runTemplateInits absDir\n            return absDir\n  where\n    cliOptionTemplate = newOptsTemplate opts\n    project = newOptsProjectName opts\n    bare = newOptsCreateBare opts\n    logUsing absDir template templateFrom =\n        let loading = case templateFrom of\n                          LocalTemp -> \"Loading local\"\n                          RemoteTemp -> \"Downloading\"\n         in\n        logInfo\n            (loading <> \" template \\\"\" <> display (templateName template) <>\n             \"\\\" to create project \\\"\" <>\n             fromString (packageNameString project) <>\n             \"\\\" in \" <>\n             if bare then \"the current directory\"\n                     else fromString (toFilePath (dirname absDir)) <>\n             \" ...\")\n\ndata TemplateFrom = LocalTemp | RemoteTemp\n\n-- | Download and read in a template's text content.\nloadTemplate\n    :: forall env. HasConfig env\n    => TemplateName\n    -> (TemplateFrom -> RIO env ())\n    -> RIO env Text\nloadTemplate name logIt = do\n    templateDir <- view $ configL.to templatesDir\n    case templatePath name of\n        AbsPath absFile -> logIt LocalTemp >> loadLocalFile absFile eitherByteStringToText\n        UrlPath s -> do\n            let settings = asIsFromUrl s\n            downloadFromUrl settings templateDir\n        RelPath rawParam relFile ->\n            catch\n                (do f <- loadLocalFile relFile eitherByteStringToText\n                    logIt LocalTemp\n                    return f)\n                (\\(e :: NewException) -> do\n                      case relSettings rawParam of\n                        Just settings -> do\n                          req <- parseRequest (tplDownloadUrl settings)\n                          let extract = tplExtract settings\n                          downloadTemplate req extract (templateDir </> relFile)\n                        Nothing -> throwM e\n                )\n        RepoPath rtp -> do\n            let settings = settingsFromRepoTemplatePath rtp\n            downloadFromUrl settings templateDir\n\n  where\n    loadLocalFile :: Path b File -> (ByteString -> Either String Text) -> RIO env Text\n    loadLocalFile path extract = do\n        logDebug (\"Opening local template: \\\"\" <> fromString (toFilePath path)\n                                                <> \"\\\"\")\n        exists <- doesFileExist path\n        if exists\n            then do\n                bs <- readFileBinary (toFilePath path) --readFileUtf8 (toFilePath path)\n                case extract bs of\n                    Left err -> do\n                        logWarn $ \"Template extraction error: \" <> display (T.pack err)\n                        throwM (FailedToLoadTemplate name (toFilePath path))\n                    Right template ->\n                        pure template\n            else throwM (FailedToLoadTemplate name (toFilePath path))\n    relSettings :: String -> Maybe TemplateDownloadSettings\n    relSettings req = do\n        rtp <- parseRepoPathWithService defaultRepoService (T.pack req)\n        pure (settingsFromRepoTemplatePath rtp)\n    downloadFromUrl :: TemplateDownloadSettings -> Path Abs Dir -> RIO env Text\n    downloadFromUrl settings templateDir = do\n        let url = tplDownloadUrl settings\n        req <- parseRequest url\n        let rel = fromMaybe backupUrlRelPath (parseRelFile url)\n        downloadTemplate req (tplExtract settings) (templateDir </> rel)\n    downloadTemplate :: Request -> (ByteString -> Either String Text) -> Path Abs File -> RIO env Text\n    downloadTemplate req extract path = do\n        let dReq = setForceDownload True $ mkDownloadRequest (setRequestCheckStatus req)\n        logIt RemoteTemp\n        catch\n          (void $ do\n            verifiedDownloadWithProgress dReq path (T.pack $ toFilePath path) Nothing\n          )\n          (useCachedVersionOrThrow path)\n\n        loadLocalFile path extract\n    useCachedVersionOrThrow :: Path Abs File -> VerifiedDownloadException -> RIO env ()\n    useCachedVersionOrThrow path exception = do\n      exists <- doesFileExist path\n\n      if exists\n        then do logWarn \"Tried to download the template but an error was found.\"\n                logWarn \"Using cached local version. It may not be the most recent version though.\"\n        else throwM (FailedToDownloadTemplate name exception)\n\ndata TemplateDownloadSettings = TemplateDownloadSettings\n  { tplDownloadUrl :: String\n  , tplExtract :: ByteString -> Either String Text\n  }\n\neitherByteStringToText :: ByteString -> Either String Text\neitherByteStringToText = mapLeft show . decodeUtf8'\n\nasIsFromUrl :: String -> TemplateDownloadSettings\nasIsFromUrl url = TemplateDownloadSettings\n  { tplDownloadUrl = url\n  , tplExtract = eitherByteStringToText\n  }\n\n-- | Construct a URL for downloading from a repo.\nsettingsFromRepoTemplatePath :: RepoTemplatePath -> TemplateDownloadSettings\nsettingsFromRepoTemplatePath (RepoTemplatePath Github user name) =\n    -- T.concat [\"https://raw.githubusercontent.com\", \"/\", user, \"/stack-templates/master/\", name]\n    TemplateDownloadSettings\n    { tplDownloadUrl = concat [\"https://api.github.com/repos/\", T.unpack user, \"/stack-templates/contents/\", T.unpack name]\n    , tplExtract = \\bs -> do\n        decodedJson <- eitherDecode (LB.fromStrict bs)\n        case decodedJson of\n          Object o | Just (String content) <- HM.lookup \"content\" o -> do\n                       let noNewlines = T.filter (/= '\\n')\n                       bsContent <- B64.decode $ T.encodeUtf8 (noNewlines content)\n                       mapLeft show $ decodeUtf8' bsContent\n          _ ->\n            Left \"Couldn't parse GitHub response as a JSON object with a \\\"content\\\" field\"\n    }\n\nsettingsFromRepoTemplatePath (RepoTemplatePath Gitlab user name) =\n    asIsFromUrl $ concat [\"https://gitlab.com\",                \"/\", T.unpack user, \"/stack-templates/raw/master/\", T.unpack name]\nsettingsFromRepoTemplatePath (RepoTemplatePath Bitbucket user name) =\n    asIsFromUrl $ concat [\"https://bitbucket.org\",             \"/\", T.unpack user, \"/stack-templates/raw/master/\", T.unpack name]\n\n-- | Apply and unpack a template into a directory.\napplyTemplate\n    :: HasConfig env\n    => PackageName\n    -> TemplateName\n    -> Map Text Text\n    -> Path Abs Dir\n    -> Text\n    -> RIO env  (Map (Path Abs File) LB.ByteString)\napplyTemplate project template nonceParams dir templateText = do\n    config <- view configL\n    currentYear <- do\n      now <- liftIO getCurrentTime\n      let (year, _, _) = toGregorian (utctDay now)\n      return $ T.pack . show $ year\n    let context = M.unions [nonceParams, nameParams, configParams, yearParam]\n          where\n            nameAsVarId = T.replace \"-\" \"_\" $ T.pack $ packageNameString project\n            nameAsModule = T.filter (/= ' ') $ T.toTitle $ T.replace \"-\" \" \" $ T.pack $ packageNameString project\n            nameParams = M.fromList [ (\"name\", T.pack $ packageNameString project)\n                                    , (\"name-as-varid\", nameAsVarId)\n                                    , (\"name-as-module\", nameAsModule) ]\n            configParams = configTemplateParams config\n            yearParam = M.singleton \"year\" currentYear\n    files :: Map FilePath LB.ByteString <-\n        catch (execWriterT $ runConduit $\n               yield (T.encodeUtf8 templateText) .|\n               unpackTemplate receiveMem id\n              )\n              (\\(e :: ProjectTemplateException) ->\n                   throwM (InvalidTemplate template (show e)))\n    when (M.null files) $\n         throwM (InvalidTemplate template \"Template does not contain any files\")\n\n    let isPkgSpec f = \".cabal\" `isSuffixOf` f || f == \"package.yaml\"\n    unless (any isPkgSpec . M.keys $ files) $\n         throwM (InvalidTemplate template \"Template does not contain a .cabal \\\n                                          \\or package.yaml file\")\n\n    -- Apply Mustache templating to a single file within the project\n    -- template.\n    let applyMustache bytes\n          -- Workaround for performance problems with mustache and\n          -- large files, applies to Yesod templates with large\n          -- bootstrap CSS files. See\n          -- https://github.com/commercialhaskell/stack/issues/4133.\n          | LB.length bytes < 50000\n          , Right text <- TLE.decodeUtf8' bytes = do\n              let etemplateCompiled = Mustache.compileTemplate (T.unpack (templateName template)) $ TL.toStrict text\n              templateCompiled <- case etemplateCompiled of\n                Left e -> throwM $ InvalidTemplate template (show e)\n                Right t -> return t\n              let (substitutionErrors, applied) = Mustache.checkedSubstitute templateCompiled context\n                  missingKeys = S.fromList $ concatMap onlyMissingKeys substitutionErrors\n              unless (S.null missingKeys)\n                (logInfo (\"\\n\" <> displayShow (MissingParameters project template missingKeys (configUserConfigPath config)) <> \"\\n\"))\n              pure $ LB.fromStrict $ encodeUtf8 applied\n\n          -- Too large or too binary\n          | otherwise = pure bytes\n\n    liftM\n        M.fromList\n        (mapM\n             (\\(fpOrig,bytes) ->\n                   do -- Apply the mustache template to the filenames\n                      -- as well, so that we can have file names\n                      -- depend on the project name.\n                      fp <- applyMustache $ TLE.encodeUtf8 $ TL.pack fpOrig\n                      path <- parseRelFile $ TL.unpack $ TLE.decodeUtf8 fp\n                      bytes' <- applyMustache bytes\n                      return (dir </> path, bytes'))\n             (M.toList files))\n  where\n    onlyMissingKeys (Mustache.VariableNotFound ks) = map T.unpack ks\n    onlyMissingKeys _ = []\n\n-- | Check if we're going to overwrite any existing files.\ncheckForOverwrite :: (MonadIO m, MonadThrow m) => [Path Abs File] -> m ()\ncheckForOverwrite files = do\n    overwrites <- filterM doesFileExist files\n    unless (null overwrites) $ throwM (AttemptedOverwrites overwrites)\n\n-- | Write files to the new project directory.\nwriteTemplateFiles\n    :: MonadIO m\n    => Map (Path Abs File) LB.ByteString -> m ()\nwriteTemplateFiles files =\n    liftIO $\n    forM_\n        (M.toList files)\n        (\\(fp,bytes) ->\n              do ensureDir (parent fp)\n                 writeBinaryFileAtomic fp $ lazyByteString bytes)\n\n-- | Run any initialization functions, such as Git.\nrunTemplateInits\n    :: HasConfig env\n    => Path Abs Dir\n    -> RIO env ()\nrunTemplateInits dir = do\n    config <- view configL\n    case configScmInit config of\n        Nothing -> return ()\n        Just Git ->\n            withWorkingDir (toFilePath dir) $\n            catchAny (proc \"git\" [\"init\"] runProcess_)\n                  (\\_ -> logInfo \"git init failed to run, ignoring ...\")\n\n-- | Display help for the templates command.\ntemplatesHelp :: HasLogFunc env => RIO env ()\ntemplatesHelp = do\n  let url = defaultTemplatesHelpUrl\n  req <- liftM setGithubHeaders (parseUrlThrow url)\n  resp <- httpLbs req `catch` (throwM . FailedToDownloadTemplatesHelp)\n  case decodeUtf8' $ LB.toStrict $ getResponseBody resp of\n    Left err -> throwM $ BadTemplatesHelpEncoding url err\n    Right txt -> logInfo $ display txt\n\n--------------------------------------------------------------------------------\n-- Defaults\n\n-- | The default service to use to download templates.\ndefaultRepoService :: RepoService\ndefaultRepoService = Github\n\n-- | Default web URL to get the `stack templates` help output.\ndefaultTemplatesHelpUrl :: String\ndefaultTemplatesHelpUrl =\n    \"https://raw.githubusercontent.com/commercialhaskell/stack-templates/master/STACK_HELP.md\"\n\n--------------------------------------------------------------------------------\n-- Exceptions\n\n-- | Exception that might occur when making a new project.\ndata NewException\n    = FailedToLoadTemplate !TemplateName\n                           !FilePath\n    | FailedToDownloadTemplate !TemplateName\n                               !VerifiedDownloadException\n    | AlreadyExists !(Path Abs Dir)\n    | MissingParameters !PackageName !TemplateName !(Set String) !(Path Abs File)\n    | InvalidTemplate !TemplateName !String\n    | AttemptedOverwrites [Path Abs File]\n    | FailedToDownloadTemplatesHelp !HttpException\n    | BadTemplatesHelpEncoding\n        !String -- URL it's downloaded from\n        !UnicodeException\n    | Can'tUseWiredInName !PackageName\n    deriving (Typeable)\n\ninstance Exception NewException\n\ninstance Show NewException where\n    show (FailedToLoadTemplate name path) =\n        \"Failed to load download template \" <> T.unpack (templateName name) <>\n        \" from \" <>\n        path\n    show (FailedToDownloadTemplate name (DownloadHttpError httpError)) =\n          \"There was an unexpected HTTP error while downloading template \" <>\n          T.unpack (templateName name) <> \": \" <> show httpError\n    show (FailedToDownloadTemplate name _) =\n        \"Failed to download template \" <> T.unpack (templateName name) <>\n        \": unknown reason\"\n\n    show (AlreadyExists path) =\n        \"Directory \" <> toFilePath path <> \" already exists. Aborting.\"\n    show (MissingParameters name template missingKeys userConfigPath) =\n        intercalate\n            \"\\n\"\n            [ \"The following parameters were needed by the template but not provided: \" <>\n              intercalate \", \" (S.toList missingKeys)\n            , \"You can provide them in \" <>\n              toFilePath userConfigPath <>\n              \", like this:\"\n            , \"templates:\"\n            , \"  params:\"\n            , intercalate\n                  \"\\n\"\n                  (map\n                       (\\key ->\n                             \"    \" <> key <> \": value\")\n                       (S.toList missingKeys))\n            , \"Or you can pass each one as parameters like this:\"\n            , \"stack new \" <> packageNameString name <> \" \" <>\n              T.unpack (templateName template) <>\n              \" \" <>\n              unwords\n                  (map\n                       (\\key ->\n                             \"-p \\\"\" <> key <> \":value\\\"\")\n                       (S.toList missingKeys))]\n    show (InvalidTemplate name why) =\n        \"The template \\\"\" <> T.unpack (templateName name) <>\n        \"\\\" is invalid and could not be used. \" <>\n        \"The error was: \" <> why\n    show (AttemptedOverwrites fps) =\n        \"The template would create the following files, but they already exist:\\n\" <>\n        unlines (map ((\"  \" ++) . toFilePath) fps) <>\n        \"Use --force to ignore this, and overwite these files.\"\n    show (FailedToDownloadTemplatesHelp ex) =\n        \"Failed to download `stack templates` help. The HTTP error was: \" <> show ex\n    show (BadTemplatesHelpEncoding url err) =\n        \"UTF-8 decoding error on template info from\\n    \" <> url <> \"\\n\\n\" <> show err\n    show (Can'tUseWiredInName name) =\n        \"The name \\\"\" <> packageNameString name <> \"\\\" is used by GHC wired-in packages, and so shouldn't be used as a package name\"\n"}}}
2021-02-20 10:54:14.280689 [ThreadId 5] - ---> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs","languageId":"haskell","version":1,"text":"{-# LANGUAGE CPP #-}\n{-# LANGUAGE NoImplicitPrelude #-}\n{-# LANGUAGE OverloadedStrings #-}\n\n#ifdef USE_GIT_INFO\n{-# LANGUAGE TemplateHaskell #-}\n#endif\n\n-- Extracted from Main so that the Main module does not use CPP or TH,\n-- and therefore doesn't need to be recompiled as often.\nmodule BuildInfo\n  ( versionString'\n  , maybeGitHash\n  , hpackVersion\n  ) where\n\nimport Stack.Prelude\nimport qualified Paths_stack as Meta\nimport qualified Distribution.Text as Cabal (display)\nimport           Distribution.System (buildArch)\n\n#ifndef HIDE_DEP_VERSIONS\nimport qualified Build_stack\n#endif\n\n#ifdef USE_GIT_INFO\nimport           GitHash (giCommitCount, giHash, tGitInfoCwdTry)\n#endif\n\n#ifdef USE_GIT_INFO\nimport           Options.Applicative.Simple (simpleVersion)\n#endif\n\n#ifdef USE_GIT_INFO\nimport           Data.Version (versionBranch)\n#else\nimport           Data.Version (showVersion, versionBranch)\n#endif\n\nversionString' :: String\n#ifdef USE_GIT_INFO\nversionString' = concat $ concat\n    [ [$(simpleVersion Meta.version)]\n      -- Leave out number of commits for --depth=1 clone\n      -- See https://github.com/commercialhaskell/stack/issues/792\n    , case giCommitCount <$> $$tGitInfoCwdTry of\n        Left _ -> []\n        Right 1 -> []\n        Right count -> [\" (\", show count, \" commits)\"]\n    , [afterVersion]\n    ]\n#else\nversionString' = showVersion Meta.version ++ afterVersion\n#endif\n  where\n    afterVersion = concat\n      [ preReleaseString\n      , ' ' : Cabal.display buildArch\n      , depsString\n      , warningString\n      ]\n    preReleaseString =\n      case versionBranch Meta.version of\n        (_:y:_) | even y -> \" PRE-RELEASE\"\n        (_:_:z:_) | even z -> \" RELEASE-CANDIDATE\"\n        _ -> \"\"\n#ifdef HIDE_DEP_VERSIONS\n    depsString = \" hpack-\" ++ VERSION_hpack\n#else\n    depsString = \"\\nCompiled with:\\n\" ++ unlines (map (\"- \" ++) Build_stack.deps)\n#endif\n#ifdef SUPPORTED_BUILD\n    warningString = \"\"\n#else\n    warningString = unlines\n      [ \"\"\n      , \"Warning: this is an unsupported build that may use different versions of\"\n      , \"dependencies and GHC than the officially released binaries, and therefore may\"\n      , \"not behave identically.  If you encounter problems, please try the latest\"\n      , \"official build by running 'stack upgrade --force-download'.\"\n      ]\n#endif\n\n-- | If USE_GIT_INFO is enabled, the Git hash in the build directory, otherwise Nothing.\nmaybeGitHash :: Maybe String\nmaybeGitHash =\n#ifdef USE_GIT_INFO\n        (either (const Nothing) (Just . giHash) $$tGitInfoCwdTry)\n#else\n        Nothing\n#endif\n\n-- | Hpack version we're compiled against\nhpackVersion :: String\nhpackVersion = VERSION_hpack\n"}}}
2021-02-20 10:54:14.280934 [ThreadId 48] - Finishing build session(exception: AsyncCancelled)
2021-02-20 10:54:14.281379 [ThreadId 29] - Restarting build session (aborting the previous one took 0.00s)
2021-02-20 10:54:14.296288 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":0,"result":null}
2021-02-20 10:54:14.297206 [ThreadId 29] - Opened text document: file:///Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs
2021-02-20 10:54:14.297885 [ThreadId 5] - haskell-lsp:Got reply message:"{\"jsonrpc\":\"2.0\",\"id\":0,\"result\":null}"
2021-02-20 10:54:14.297997 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":1,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"}}}
2021-02-20 10:54:14.298021 [ThreadId 29] - Set files of interest to: [(NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs",Modified),(NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs",Modified)]
2021-02-20 10:54:14.298192 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"},"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"context":{"diagnostics":[]}}}
2021-02-20 10:54:14.298503 [ThreadId 81] - Finishing build session(exception: AsyncCancelled)
2021-02-20 10:54:14.298694 [ThreadId 29] - Restarting build session (aborting the previous one took 0.00s)
2021-02-20 10:54:14.29979 [ThreadId 29] - Opened text document: file:///Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs
2021-02-20 10:54:14.300176 [ThreadId 29] - Set files of interest to: [(NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs",Modified),(NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs",Modified),(NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs",Modified)]
2021-02-20 10:54:14.300638 [ThreadId 109] - Finishing build session(exception: AsyncCancelled)
2021-02-20 10:54:14.300766 [ThreadId 29] - Restarting build session (aborting the previous one took 0.00s)
2021-02-20 10:54:14.302221 [ThreadId 29] - Opened text document: file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs
2021-02-20 10:54:14.30593 [ThreadId 237] - hlint:getIdeas:file:NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs"
2021-02-20 10:54:14.305946 [ThreadId 236] - hlint:getIdeas:file:NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"
2021-02-20 10:54:14.305954 [ThreadId 238] - hlint:getIdeas:file:NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs"
2021-02-20 10:54:14.306407 [ThreadId 234] - Consulting the cradle for "src/main/BuildInfo.hs"
Output from setting up the cradle Cradle {cradleRootDir = "/Users/anka/projekt/not-mine/haskell/stack", cradleOptsProg = CradleAction: Stack}
2021-02-20 10:54:14.307067 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"token":0},"method":"window/workDoneProgress/create","id":1}
2021-02-20 10:54:14.307204 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"begin","cancellable":false,"title":"Setting up stack (for src/main/BuildInfo.hs)"},"token":0},"method":"$/progress"}
2021-02-20 10:54:14.307904 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":1,"result":null}
2021-02-20 10:54:14.307994 [ThreadId 5] - haskell-lsp:Got reply message:"{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":null}"
2021-02-20 10:54:14.407821 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"token":"67"},"method":"window/workDoneProgress/create","id":2}
2021-02-20 10:54:14.407994 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"begin","title":"Processing"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:14.408254 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":2,"result":null}
2021-02-20 10:54:14.408386 [ThreadId 5] - haskell-lsp:Got reply message:"{\"jsonrpc\":\"2.0\",\"id\":2,\"result\":null}"
2021-02-20 10:54:14.508039 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"1/4"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:14.521067 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":3,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"}}}
2021-02-20 10:54:14.521303 [ThreadId 258] - Plugin.makeCodeLens (ideLogger)
2021-02-20 10:54:14.52156 [ThreadId 259] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "fp" "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"
2021-02-20 10:54:14.525471 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":4,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"}}}
2021-02-20 10:54:14.525641 [ThreadId 278] - Plugin.makeCodeLens (ideLogger)
2021-02-20 10:54:14.5258 [ThreadId 279] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "fp" "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"
2021-02-20 10:54:14.527503 [ThreadId 5] - ---> {"jsonrpc":"2.0","id":5,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"}}}
2021-02-20 10:54:14.527636 [ThreadId 297] - Plugin.makeCodeLens (ideLogger)
2021-02-20 10:54:14.527779 [ThreadId 298] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "fp" "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"
> Using main module: 1. Package `stack' component stack:exe:stack with main-is file: /Users/anka/projekt/not-mine/haskell/stack/src/main/Main.hs
> The following GHC options are incompatible with GHCi and have not been passed to it: -threaded
> Configuring GHCi with the following packages: stack
> 
> * * * * * * * *
> 
> Warning: Multiple files use the same module name:
>          * Paths_stack found at the following paths
>            * /Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/autogen/Paths_stack.hs (stack:lib)
>            * /Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/stack/autogen/Paths_stack.hs (stack:exe:stack)
> * * * * * * * *
> 
> /Users/anka/projekt/not-mine/haskell/stack/.stack-work/install/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/pkgdb:/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/pkgdb:/nix/store/1k2ad0g7xvqslljgnq3sdc60fa1x915b-ghc-8.8.3/lib/ghc-8.8.3/package.conf.d
2021-02-20 10:54:30.449689 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"end"},"token":0},"method":"$/progress"}
2021-02-20 10:54:30.44957 [ThreadId 234] - Session loading result: Right (ComponentOptions {componentOptions = ["-i","-odir=/Users/anka/projekt/not-mine/haskell/stack/.stack-work/odir","-hidir=/Users/anka/projekt/not-mine/haskell/stack/.stack-work/odir","-hide-all-packages","-i/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build","-i/Users/anka/projekt/not-mine/haskell/stack/src","-i/Users/anka/projekt/not-mine/haskell/stack/src/unix","-i/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/autogen","-i/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/global-autogen","-stubdir=/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build","-I/nix/store/mq1wvlj2gnvzld0nng6fh92pyrfip2l3-zlib-1.2.11-dev/include","-I/nix/store/sa6dn30i96d9ay3rjvrf46sy76i87r8l-unzip-6.0/include","-I/nix/store/1fzghcm5z2c6j2d7gch9shf70213rmnx-apple-framework-Cocoa/include","-I/nix/store/kwchgh2kx2d74bax255iyp3sjkdp0r93-apple-framework-CoreServices/include","-I/nix/store/1k2ad0g7xvqslljgnq3sdc60fa1x915b-ghc-8.8.3/include","-I/nix/store/abfwpnzmvkh09mvjvzyrb577g1qdixs5-git-2.29.2/include","-I/nix/store/q1jnid3md8m3z7131ab89i4byrg0lnm7-gcc-wrapper-9.3.0/include","-I/nix/store/3si7c2bqs7aahkmrghb2s7j0hmqq0113-gmp-6.2.1-dev/include","-L/nix/store/0waniihvgxx30gwyafxj6fnsb7iidg68-zlib-1.2.11/lib","-L/nix/store/sa6dn30i96d9ay3rjvrf46sy76i87r8l-unzip-6.0/lib","-L/nix/store/1fzghcm5z2c6j2d7gch9shf70213rmnx-apple-framework-Cocoa/lib","-L/nix/store/kwchgh2kx2d74bax255iyp3sjkdp0r93-apple-framework-CoreServices/lib","-L/nix/store/1k2ad0g7xvqslljgnq3sdc60fa1x915b-ghc-8.8.3/lib","-L/nix/store/abfwpnzmvkh09mvjvzyrb577g1qdixs5-git-2.29.2/lib","-L/nix/store/q1jnid3md8m3z7131ab89i4byrg0lnm7-gcc-wrapper-9.3.0/lib","-L/nix/store/kcyv9kp2xd337aa7ykx4vp1g1i1mip8f-gmp-6.2.1/lib","/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/src/unix/cbits/uname.o","-package-id=Cabal-3.0.1.0","-package-id=aeson-1.4.7.0-8bH0JxSH1sDFshoWbUOWN9","-package-id=annotated-wl-pprint-0.7.0-GnwGLTLAoUz1b9IARtaRpM","-package-id=ansi-terminal-0.10.3-9zJT3Osp5wTAaMBIHKdPu2","-package-id=array-0.5.4.0","-package-id=async-2.2.2-1Hgd7O1auE8JVtqupH0WFY","-package-id=attoparsec-0.13.2.3-5Cuxdo69E3vJQKu4RTldv0","-package-id=base-4.13.0.0","-package-id=base64-bytestring-1.0.0.3-G2dYBQRtOn8Kxdm0ndZRY","-package-id=bytestring-0.10.10.0","-package-id=casa-client-0.0.1-2p47e667J98Aa8iu1gfQFc","-package-id=casa-types-0.0.1-DXJdtojkbGBLY4778PR3eA","-package-id=colour-2.3.5-HwkwGdq0zHOAgUmo2lVa4V","-package-id=conduit-1.3.2-8sIw2hXjwJeFSOsKZW0M41","-package-id=conduit-extra-1.3.5-6LYsXJUvdQsHLSp5pFZK6d","-package-id=containers-0.6.2.1","-package-id=cryptonite-0.26-1BsgpeCLUsqwiNhmB6AoC","-package-id=cryptonite-conduit-0.2.2-31iFmXuGztn4rXBKViz4zZ","-package-id=deepseq-1.4.4.0","-package-id=directory-1.3.6.0","-package-id=echo-0.1.3-2opujDMO4Ur5cAZ0pI8LR","-package-id=exceptions-0.10.4-6ENJVzINLe28VlhOUrvEZK","-package-id=extra-1.6.21-EAREqxuPvj3IUeCVF5x2NJ","-package-id=file-embed-0.0.11.2-76jJzrpjGcdDpzOtgwH8dS","-package-id=filelock-0.1.1.5-26KKNi5ZJD2BLXs3QDaNlU","-package-id=filepath-1.4.2.1","-package-id=fsnotify-0.3.0.1-BPnYHZqgMzOFSe6FlHre6G","-package-id=generic-deriving-1.13.1-LyKPKqo8gi9EUnjxYncNUK","-package-id=hackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV","-package-id=hashable-1.3.0.0-CzctMgLWbfP4pv5F2JiKgj","-package-id=hi-file-parser-0.1.0.0-CMNPmobWBma8bVsHjdLH3w","-package-id=hpack-0.33.0-IYNU6FKd9SsCHpdmkj64tS","-package-id=hpc-0.6.0.3","-package-id=http-client-0.6.4.1-DFNp5AHBpJk5bUNWZUsKjQ","-package-id=http-client-tls-0.3.5.3-2WE2sdEQ9RJJk0PWDsk929","-package-id=http-conduit-2.3.7.3-7LnMM3bfXuK7wDsZT1t0JP","-package-id=http-download-0.2.0.0-8dScjdKlV3nBsuAR6UAl8d","-package-id=http-types-0.12.3-B9EkuT6UGia2QJglhdFRHH","-package-id=memory-0.15.0-CYsfKCB0yso2kVJfbZEzwi","-package-id=microlens-0.4.11.2-IwTHxwi8Eg8Dsmorq23zza","-package-id=mintty-0.1.2-HFO5xiIu59dIFU8o26EjqF","-package-id=mono-traversable-1.0.15.1-KeyuOuWpLKUJmWKB6WZlhB","-package-id=mtl-2.2.2","-package-id=mustache-2.3.1-IMEb8hN22Q82DbiVLD1Jfi","-package-id=neat-interpolation-0.3.2.6-C0Hcx3a9UyJDfdjUQ6zueG","-package-id=network-uri-2.6.3.0-CPjS2hnZr1IIlGhZ1dITqG","-package-id=open-browser-0.2.1.0-A3EUWgxwoew3moIr9QFjHi","-package-id=optparse-applicative-0.15.1.0-8lufb1qPLmfiWdRsJZ50S","-package-id=pantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD","-package-id=path-0.7.0-1AppMfuuyByIWi8tmcj7WL","-package-id=path-io-1.6.0-H1Kt144L2I8LLv2Ottry7R","-package-id=persistent-2.10.5.2-3Vh5RHeLky689jqtSI0kU4","-package-id=persistent-sqlite-2.10.6.2-4jCf6sQAEeUFV0006pwono","-package-id=persistent-template-2.8.2.3-90BgMRoZ4LXHCFVfhXQEWn","-package-id=pretty-1.1.3.6","-package-id=primitive-0.7.0.1-CN4ea3Jrhra6yENuqrDg51","-package-id=process-1.6.8.0","-package-id=project-template-0.2.0.1-Cy2gHRH93cx6V69eIOtqoW","-package-id=regex-applicative-text-0.1.0.1-D4wBGFYG432HgiTGrZKXHc","-package-id=retry-0.8.1.0-2KxDQ1JM2ql5WwJxBudBK7","-package-id=rio-0.1.19.0-17gfvbl82pV3iNDYoL4a8c","-package-id=rio-prettyprint-0.1.1.0-6j0ApxpqBJMKk6BuhButND","-package-id=semigroups-0.19.1-KswQSjRjA2JDrzoYmnhZUy","-package-id=split-0.2.3.4-KyPtAwfJzED2zEIheQpqQL","-package-id=stm-2.5.0.0","-package-id=streaming-commons-0.2.1.2-GkkfLkGMBa74C7ATSMJBvC","-package-id=tar-0.5.1.1-LHIxoI0s97481UO1anOn9x","-package-id=template-haskell-2.15.0.0","-package-id=temporary-1.3-8J4CbYC9Bae4gdkn7lOATi","-package-id=text-1.2.4.0","-package-id=text-metrics-0.3.0-JB3Ys8fSTEL8ePKYRzhzf3","-package-id=th-reify-many-0.1.9-8XIr8h7wq3U6ArKFrr6PL8","-package-id=time-1.9.3","-package-id=tls-1.5.4-Ire0JOIMOBEDiGniBhuPyh","-package-id=transformers-0.5.6.2","-package-id=typed-process-0.2.6.0-EoQDkOh8Yqd3rSCl0Xdj4f","-package-id=unicode-transforms-0.3.6-5Pr4EcUYMRTEkWU8iahO5l","-package-id=unix-compat-0.5.2-4xpiztFEGvZ2FOOfsaJdtF","-package-id=unliftio-0.2.12.1-4t2NPmlZ0cHF1pn5RZw1ON","-package-id=unordered-containers-0.2.10.0-KujsThAgCnwGXBG7PJnkNO","-package-id=vector-0.12.1.2-AWRYcz9jfa25Avs2q9Jg9V","-package-id=yaml-0.11.3.0-KfabpyV78N7BeYF55Zypi1","-package-id=zip-archive-0.4.1-BpAV0mS7Xjm6h9aV7D6t3C","-package-id=zlib-0.6.2.1-KKwzv9jEdPcA1wkhHMXBGy","-package-id=unix-2.7.2.2","-i/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/stack","-i/Users/anka/projekt/not-mine/haskell/stack/src/main","-i/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/stack/autogen","-i/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/stack/stack-tmp","-package-id=githash-0.1.3.3-JR5d59hIpkpIqrn7oC7z0L","-package-id=optparse-simple-0.1.1.2-HkLU0vPNet1I3Ir3FhNccH","-Wall","-fwarn-tabs","-fwarn-incomplete-uni-patterns","-fwarn-incomplete-record-updates","-optP-Wno-nonportable-include-path","-fwarn-identities","-DSTACK_DEVELOPER_MODE_DEFAULT=False","-Wall","-fwarn-tabs","-fwarn-incomplete-uni-patterns","-fwarn-incomplete-record-updates","-optP-Wno-nonportable-include-path","-rtsopts","-DSTACK_DEVELOPER_MODE_DEFAULT=False","-DUSE_GIT_INFO","-fhide-source-paths","-optP-include","-optP/Users/anka/projekt/not-mine/haskell/stack/.stack-work/ghci/55fce5e7/cabal_macros.h","-ghci-script=/private/tmp/haskell-stack-ghci/f1c3bc69/ghci-script","-package-db","/Users/anka/projekt/not-mine/haskell/stack/.stack-work/install/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/pkgdb","-package-db","/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/pkgdb","-package-db","/nix/store/1k2ad0g7xvqslljgnq3sdc60fa1x915b-ghc-8.8.3/lib/ghc-8.8.3/package.conf.d"], componentRoot = "/Users/anka/projekt/not-mine/haskell/stack", componentDependencies = ["stack.cabal","package.yaml","stack.yaml"]},"/nix/store/1k2ad0g7xvqslljgnq3sdc60fa1x915b-ghc-8.8.3/lib/ghc-8.8.3")
2021-02-20 10:54:30.579446 [ThreadId 234] - Using interface files cache dir: ghcide
2021-02-20 10:54:30.579535 [ThreadId 234] - Making new HscEnv[main]
2021-02-20 10:54:30.594979 [ThreadId 234] - New Component Cache HscEnvEq: (([],Just HscEnvEq 96),fromList [("/Users/anka/projekt/not-mine/haskell/stack/hie.yaml",Just 2021-02-20 02:41:21.714910817 UTC),("package.yaml",Just 2021-02-19 06:32:28.188010216 UTC),("stack.cabal",Just 2021-02-19 06:32:28.271870733 UTC),("stack.yaml",Just 2021-02-19 15:04:41.274181296 UTC)])
2021-02-20 10:54:31.448612 [ThreadId 234] - Known files updated: fromList [(TargetModule Stack.Config.Build,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Config/Build.hs"]),(TargetModule Stack.Options.BuildMonoidParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/BuildMonoidParser.hs"]),(TargetModule Data.Attoparsec.Combinators,["/Users/anka/projekt/not-mine/haskell/stack/src/Data/Attoparsec/Combinators.hs"]),(TargetModule Stack.Options.HaddockParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/HaddockParser.hs"]),(TargetModule Build_stack,["/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/global-autogen/Build_stack.hs"]),(TargetModule Stack.Options.Completion,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/Completion.hs"]),(TargetModule Data.Attoparsec.Args,["/Users/anka/projekt/not-mine/haskell/stack/src/Data/Attoparsec/Args.hs"]),(TargetModule Stack.Build.Haddock,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/Haddock.hs"]),(TargetModule Stack.Storage.Project,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/Project.hs"]),(TargetModule Options.Applicative.Args,["/Users/anka/projekt/not-mine/haskell/stack/src/Options/Applicative/Args.hs"]),(TargetModule Stack.Types.Docker,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Docker.hs"]),(TargetModule Path.Extra,["/Users/anka/projekt/not-mine/haskell/stack/src/Path/Extra.hs"]),(TargetModule Stack.Storage.Util,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/Util.hs"]),(TargetModule Stack.Options.GhcBuildParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/GhcBuildParser.hs"]),(TargetModule BuildInfo,["/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"]),(TargetModule Stack.Options.ConfigParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/ConfigParser.hs"]),(TargetModule Stack.Options.DotParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/DotParser.hs"]),(TargetModule Stack.Options.GhcVariantParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/GhcVariantParser.hs"]),(TargetModule Stack.Coverage,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Coverage.hs"]),(TargetModule Stack.Types.TemplateName,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/TemplateName.hs"]),(TargetModule System.Terminal,["/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/System/Terminal.hs"]),(TargetModule Stack.Types.Package,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Package.hs"]),(TargetModule Stack.Types.Compiler,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Compiler.hs"]),(TargetModule Stack.Prelude,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Prelude.hs"]),(TargetModule System.Uname,["/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/System/Uname.hs"]),(TargetFile NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs",["/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"]),(TargetModule Stack.IDE,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/IDE.hs"]),(TargetModule Stack.Types.Config.Build,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config/Build.hs"]),(TargetModule Stack.Types.Config,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs"]),(TargetModule System.Info.ShortPathName,["/Users/anka/projekt/not-mine/haskell/stack/src/unix/System/Info/ShortPathName.hs"]),(TargetModule Stack.SourceMap,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/SourceMap.hs"]),(TargetModule Stack.DefaultColorWhen,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/DefaultColorWhen.hs"]),(TargetModule Stack.SDist,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/SDist.hs"]),(TargetModule Stack.Options.BuildParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/BuildParser.hs"]),(TargetModule Stack.Runners,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Runners.hs"]),(TargetModule Stack.FileWatch,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/FileWatch.hs"]),(TargetModule Stack.Dot,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Dot.hs"]),(TargetModule Path.Find,["/Users/anka/projekt/not-mine/haskell/stack/src/Path/Find.hs"]),(TargetModule Stack.Options.LogLevelParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/LogLevelParser.hs"]),(TargetModule Stack.Config.Nix,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Config/Nix.hs"]),(TargetModule Stack.Options.SDistParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/SDistParser.hs"]),(TargetModule Data.Attoparsec.Interpreter,["/Users/anka/projekt/not-mine/haskell/stack/src/Data/Attoparsec/Interpreter.hs"]),(TargetModule Stack.Types.SourceMap,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/SourceMap.hs"]),(TargetModule Stack.Options.NixParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/NixParser.hs"]),(TargetModule Stack.PackageDump,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/PackageDump.hs"]),(TargetModule Stack.Types.VersionIntervals,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/VersionIntervals.hs"]),(TargetModule Stack.Build,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build.hs"]),(TargetModule Stack.Options.PackageParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/PackageParser.hs"]),(TargetModule Stack.Types.Cache,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Cache.hs"]),(TargetModule Options.Applicative.Complicated,["/Users/anka/projekt/not-mine/haskell/stack/src/Options/Applicative/Complicated.hs"]),(TargetModule Stack.Storage.User,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/User.hs"]),(TargetModule Stack.Options.BenchParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/BenchParser.hs"]),(TargetModule Stack.Hoogle,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Hoogle.hs"]),(TargetModule Stack.Init,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Init.hs"]),(TargetModule Stack.Options.GhciParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/GhciParser.hs"]),(TargetModule Stack.Types.CompilerBuild,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/CompilerBuild.hs"]),(TargetModule Stack.Ghci,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Ghci.hs"]),(TargetModule Stack.SetupCmd,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/SetupCmd.hs"]),(TargetModule Stack.Path,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Path.hs"]),(TargetModule System.Process.Pager,["/Users/anka/projekt/not-mine/haskell/stack/src/System/Process/Pager.hs"]),(TargetModule Stack.ConfigCmd,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/ConfigCmd.hs"]),(TargetModule Control.Concurrent.Execute,["/Users/anka/projekt/not-mine/haskell/stack/src/Control/Concurrent/Execute.hs"]),(TargetModule Stack.Ghci.Script,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Ghci/Script.hs"]),(TargetModule Stack.Upload,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Upload.hs"]),(TargetModule Stack.Options.HpcReportParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/HpcReportParser.hs"]),(TargetModule Stack.Build.Source,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/Source.hs"]),(TargetModule Stack.Build.Installed,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/Installed.hs"]),(TargetModule Stack.Constants,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Constants.hs"]),(TargetModule Stack.Types.Build,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Build.hs"]),(TargetModule Stack.Options.GlobalParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/GlobalParser.hs"]),(TargetModule Stack.Nix,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Nix.hs"]),(TargetModule Stack.GhcPkg,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/GhcPkg.hs"]),(TargetModule Stack.Types.GhcPkgId,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/GhcPkgId.hs"]),(TargetModule Stack.Options.ExecParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/ExecParser.hs"]),(TargetModule Stack.List,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/List.hs"]),(TargetModule Stack.Clean,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Clean.hs"]),(TargetModule Stack.Setup,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Setup.hs"]),(TargetModule Stack.New,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs"]),(TargetModule Stack.Types.NamedComponent,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/NamedComponent.hs"]),(TargetModule Stack.Script,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Script.hs"]),(TargetModule Stack.Options.CleanParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/CleanParser.hs"]),(TargetModule Stack.Types.Nix,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Nix.hs"]),(TargetModule Stack.Types.Resolver,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Resolver.hs"]),(TargetModule Options.Applicative.Builder.Extra,["/Users/anka/projekt/not-mine/haskell/stack/src/Options/Applicative/Builder/Extra.hs"]),(TargetModule Stack.BuildPlan,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/BuildPlan.hs"]),(TargetFile NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/main/Main.hs",["/Users/anka/projekt/not-mine/haskell/stack/src/main/Main.hs"]),(TargetModule Stack.Setup.Installed,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Setup/Installed.hs"]),(TargetModule Stack.Build.ConstructPlan,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/ConstructPlan.hs"]),(TargetModule Stack.Build.Target,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/Target.hs"]),(TargetModule Stack.Lock,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Lock.hs"]),(TargetModule Stack.Options.ResolverParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/ResolverParser.hs"]),(TargetModule Stack.Options.DockerParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/DockerParser.hs"]),(TargetModule Path.Extended,["/Users/anka/projekt/not-mine/haskell/stack/src/Path/Extended.hs"]),(TargetModule Stack.Build.Cache,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/Cache.hs"]),(TargetModule Stack.Package,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Package.hs"]),(TargetModule Stack.Upgrade,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Upgrade.hs"]),(TargetModule Stack.Options.Utils,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/Utils.hs"]),(TargetModule Stack.Config,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Config.hs"]),(TargetModule Stack.Options.ScriptParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/ScriptParser.hs"]),(TargetModule Stack.Options.NewParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/NewParser.hs"]),(TargetModule Paths_stack,["/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/autogen/Paths_stack.hs","/Users/anka/projekt/not-mine/haskell/stack/.stack-work/dist/x86_64-osx-nix/Cabal-3.0.1.0/build/Stack/autogen/Paths_stack.hs"]),(TargetModule Stack.Build.Execute,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Build/Execute.hs"]),(TargetModule Stack.Unpack,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Unpack.hs"]),(TargetModule Stack.Types.PackageName,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/PackageName.hs"]),(TargetModule Network.HTTP.StackClient,["/Users/anka/projekt/not-mine/haskell/stack/src/Network/HTTP/StackClient.hs"]),(TargetModule Stack.Options.TestParser,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Options/TestParser.hs"]),(TargetModule System.Permissions,["/Users/anka/projekt/not-mine/haskell/stack/src/unix/System/Permissions.hs"]),(TargetModule Stack.Config.Docker,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Config/Docker.hs"]),(TargetModule Path.CheckInstall,["/Users/anka/projekt/not-mine/haskell/stack/src/Path/CheckInstall.hs"]),(TargetModule Stack.Types.Version,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Version.hs"]),(TargetModule Stack.Docker,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Docker.hs"]),(TargetModule Data.Monoid.Map,["/Users/anka/projekt/not-mine/haskell/stack/src/Data/Monoid/Map.hs"]),(TargetModule Stack.Ls,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Ls.hs"]),(TargetModule Stack.Constants.Config,["/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Constants/Config.hs"])]
2021-02-20 10:54:31.450585 [ThreadId 234] - Restarting build session (aborting the previous one took 0.00s)
2021-02-20 10:54:31.450763 [ThreadId 137] - Finishing build session(exception: AsyncCancelled)
2021-02-20 10:54:31.50784 [ThreadId 391] - hlint:getIdeas:file:NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"
2021-02-20 10:54:31.507896 [ThreadId 392] - hlint:getIdeas:file:NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/New.hs"
2021-02-20 10:54:31.507934 [ThreadId 390] - hlint:getIdeas:file:NormalizedFilePath "/Users/anka/projekt/not-mine/haskell/stack/src/Stack/Types/Config.hs"
2021-02-20 10:54:31.522706 [ThreadId 560] - finish: getSession (took 0.02s)
2021-02-20 10:54:31.522772 [ThreadId 554] - finish: ModuleName.ghcSession (took 0.02s)
2021-02-20 10:54:31.522891 [ThreadId 560] - finish: ModuleName.ghcSession (took 0.02s)
2021-02-20 10:54:31.522995 [ThreadId 553] - finish: ModuleName.ghcSession (took 0.02s)
2021-02-20 10:54:31.523042 [ThreadId 554] - finish: getSession (took 0.02s)
2021-02-20 10:54:31.52306 [ThreadId 560] - finish: getSession (took 0.02s)
2021-02-20 10:54:31.532123 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"40/119"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:31.553674 [ThreadId 559] - hlint:getIdeas:setExtensions:[Cpp,OverlappingInstances,UndecidableInstances,IncoherentInstances,UndecidableSuperClasses,MonomorphismRestriction,MonoPatBinds,MonoLocalBinds,RelaxedPolyRec,ExtendedDefaultRules,ForeignFunctionInterface,UnliftedFFITypes,InterruptibleFFI,CApiFFI,GHCForeignImportPrim,JavaScriptFFI,ParallelArrays,TemplateHaskell,TemplateHaskellQuotes,ImplicitParams,ImplicitPrelude,ScopedTypeVariables,AllowAmbiguousTypes,UnliftedNewtypes,BangPatterns,TypeFamilies,TypeFamilyDependencies,TypeInType,OverloadedStrings,OverloadedLists,NumDecimals,DisambiguateRecordFields,RecordWildCards,RecordPuns,ViewPatterns,GADTs,GADTSyntax,NPlusKPatterns,DoAndIfThenElse,BlockArguments,RebindableSyntax,ConstraintKinds,PolyKinds,DataKinds,InstanceSigs,ApplicativeDo,StandaloneDeriving,DeriveDataTypeable,AutoDeriveTypeable,DeriveFunctor,DeriveTraversable,DeriveFoldable,DeriveGeneric,DefaultSignatures,DeriveAnyClass,DeriveLift,DerivingStrategies,DerivingVia,TypeSynonymInstances,FlexibleContexts,FlexibleInstances,ConstrainedClassMethods,MultiParamTypeClasses,NullaryTypeClasses,FunctionalDependencies,UnicodeSyntax,ExistentialQuantification,MagicHash,EmptyDataDecls,KindSignatures,RoleAnnotations,ParallelListComp,MonadComprehensions,GeneralizedNewtypeDeriving,PostfixOperators,TupleSections,PatternGuards,LiberalTypeSynonyms,RankNTypes,ImpredicativeTypes,TypeOperators,ExplicitNamespaces,PackageImports,ExplicitForAll,AlternativeLayoutRuleTransitional,DatatypeContexts,NondecreasingIndentation,RelaxedLayout,TraditionalRecordSyntax,LambdaCase,MultiWayIf,BinaryLiterals,HexFloatLiterals,DuplicateRecordFields,OverloadedLabels,EmptyCase,PatternSynonyms,PartialTypeSignatures,NamedWildCards,TypeApplications,Strict,StrictData,MonadFailDesugaring,EmptyDataDeriving,NumericUnderscores,QuantifiedConstraints,ImportQualifiedPost,CUSKs,StandaloneKindSignatures,StarIsType]
2021-02-20 10:54:31.691913 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"20/121"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:31.706128 [ThreadId 298] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "preprocessor" "0.18s"
2021-02-20 10:54:31.706305 [ThreadId 298] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "Tests" "0 tests in 0 sections 0 setups 0 lenses."
2021-02-20 10:54:31.707075 [ThreadId 298] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "tests" "0.00s"
2021-02-20 10:54:31.707183 [ThreadId 298] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "codeLens" "17.18s"
2021-02-20 10:54:31.707843 [ThreadId 259] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "preprocessor" "0.18s"
2021-02-20 10:54:31.708492 [ThreadId 279] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "preprocessor" "0.19s"
2021-02-20 10:54:31.70861 [ThreadId 279] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "Tests" "0 tests in 0 sections 0 setups 0 lenses."
2021-02-20 10:54:31.709332 [ThreadId 279] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "tests" "0.00s"
2021-02-20 10:54:31.709442 [ThreadId 279] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "codeLens" "17.18s"
2021-02-20 10:54:31.708013 [ThreadId 259] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "Tests" "0 tests in 0 sections 0 setups 0 lenses."
2021-02-20 10:54:31.711027 [ThreadId 259] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "tests" "0.00s"
2021-02-20 10:54:31.711667 [ThreadId 259] - src/Ide/Plugin/Eval/CodeLens.hs:239:15 "codeLens" "17.19s"
2021-02-20 10:54:31.793579 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"14/124"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:31.847047 [ThreadId 403] - finish: HaddockComments.GetAnnotatedParsedSource (took 0.34s)
2021-02-20 10:54:31.848213 [ThreadId 403] - finish: ModuleName.GetParsedModule (took 0.32s)
2021-02-20 10:54:31.848241 [ThreadId 552] - finish: addPragma (took 0.34s)
2021-02-20 10:54:31.848436 [ThreadId 403] - finish: CodeAction (took 0.34s)
2021-02-20 10:54:31.848445 [ThreadId 552] - finish: splice.codeAction.GitHieAst (took 0.34s)
2021-02-20 10:54:31.848522 [ThreadId 538] - finish: ModuleName.GetParsedModule (took 0.32s)
2021-02-20 10:54:31.848743 [ThreadId 555] - finish: Outline (took 0.34s)
2021-02-20 10:54:31.849601 [ThreadId 555] - finish: ModuleName.GetParsedModule (took 0.32s)
2021-02-20 10:54:31.849473 [ThreadId 553] - hlint:getIdeas:setExtensions:[Cpp,OverlappingInstances,UndecidableInstances,IncoherentInstances,UndecidableSuperClasses,MonomorphismRestriction,MonoPatBinds,MonoLocalBinds,RelaxedPolyRec,ExtendedDefaultRules,ForeignFunctionInterface,UnliftedFFITypes,InterruptibleFFI,CApiFFI,GHCForeignImportPrim,JavaScriptFFI,ParallelArrays,TemplateHaskell,TemplateHaskellQuotes,ImplicitParams,ImplicitPrelude,ScopedTypeVariables,AllowAmbiguousTypes,UnliftedNewtypes,BangPatterns,TypeFamilies,TypeFamilyDependencies,TypeInType,OverloadedStrings,OverloadedLists,NumDecimals,DisambiguateRecordFields,RecordWildCards,RecordPuns,ViewPatterns,GADTs,GADTSyntax,NPlusKPatterns,DoAndIfThenElse,BlockArguments,RebindableSyntax,ConstraintKinds,PolyKinds,DataKinds,InstanceSigs,ApplicativeDo,StandaloneDeriving,DeriveDataTypeable,AutoDeriveTypeable,DeriveFunctor,DeriveTraversable,DeriveFoldable,DeriveGeneric,DefaultSignatures,DeriveAnyClass,DeriveLift,DerivingStrategies,DerivingVia,TypeSynonymInstances,FlexibleContexts,FlexibleInstances,ConstrainedClassMethods,MultiParamTypeClasses,NullaryTypeClasses,FunctionalDependencies,UnicodeSyntax,ExistentialQuantification,MagicHash,EmptyDataDecls,KindSignatures,RoleAnnotations,ParallelListComp,MonadComprehensions,GeneralizedNewtypeDeriving,PostfixOperators,TupleSections,PatternGuards,LiberalTypeSynonyms,RankNTypes,ImpredicativeTypes,TypeOperators,ExplicitNamespaces,PackageImports,ExplicitForAll,AlternativeLayoutRuleTransitional,DatatypeContexts,NondecreasingIndentation,RelaxedLayout,TraditionalRecordSyntax,LambdaCase,MultiWayIf,BinaryLiterals,HexFloatLiterals,DuplicateRecordFields,OverloadedLabels,EmptyCase,PatternSynonyms,PartialTypeSignatures,NamedWildCards,TypeApplications,Strict,StrictData,MonadFailDesugaring,EmptyDataDeriving,NumericUnderscores,QuantifiedConstraints,ImportQualifiedPost,CUSKs,StandaloneKindSignatures,StarIsType]
2021-02-20 10:54:31.849969 [ThreadId 7] - <--2--{"result":[{"selectionRange":{"start":{"line":10,"character":7},"end":{"line":10,"character":16}},"kind":1,"children":[{"selectionRange":{"start":{"line":16,"character":0},"end":{"line":34,"character":45}},"kind":2,"children":[{"selectionRange":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}},"kind":2,"name":"import Stack.Prelude","range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}}},{"selectionRange":{"start":{"line":17,"character":0},"end":{"line":17,"character":36}},"kind":2,"name":"import Paths_stack","range":{"start":{"line":17,"character":0},"end":{"line":17,"character":36}},"detail":"qualified"},{"selectionRange":{"start":{"line":18,"character":0},"end":{"line":18,"character":53}},"kind":2,"name":"import Distribution.Text","range":{"start":{"line":18,"character":0},"end":{"line":18,"character":53}},"detail":"qualified"},{"selectionRange":{"start":{"line":19,"character":0},"end":{"line":19,"character":48}},"kind":2,"name":"import Distribution.System","range":{"start":{"line":19,"character":0},"end":{"line":19,"character":48}}},{"selectionRange":{"start":{"line":22,"character":0},"end":{"line":22,"character":28}},"kind":2,"name":"import Build_stack","range":{"start":{"line":22,"character":0},"end":{"line":22,"character":28}},"detail":"qualified"},{"selectionRange":{"start":{"line":26,"character":0},"end":{"line":26,"character":64}},"kind":2,"name":"import GitHash","range":{"start":{"line":26,"character":0},"end":{"line":26,"character":64}}},{"selectionRange":{"start":{"line":30,"character":0},"end":{"line":30,"character":59}},"kind":2,"name":"import Options.Applicative.Simple","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":59}}},{"selectionRange":{"start":{"line":34,"character":0},"end":{"line":34,"character":45}},"kind":2,"name":"import Data.Version","range":{"start":{"line":34,"character":0},"end":{"line":34,"character":45}}}],"name":"imports","range":{"start":{"line":16,"character":0},"end":{"line":34,"character":45}}},{"selectionRange":{"start":{"line":41,"character":0},"end":{"line":80,"character":7}},"kind":12,"name":"versionString'","range":{"start":{"line":41,"character":0},"end":{"line":80,"character":7}}},{"selectionRange":{"start":{"line":85,"character":0},"end":{"line":87,"character":65}},"kind":12,"name":"maybeGitHash","range":{"start":{"line":85,"character":0},"end":{"line":87,"character":65}}},{"selectionRange":{"start":{"line":94,"character":0},"end":{"line":94,"character":23}},"kind":12,"name":"hpackVersion","range":{"start":{"line":94,"character":0},"end":{"line":94,"character":23}}}],"name":"BuildInfo","range":{"start":{"line":0,"character":0},"end":{"line":9223372036854775807,"character":0}}}],"jsonrpc":"2.0","id":1}
2021-02-20 10:54:31.857653 [ThreadId 538] - finish: importLens (took 0.35s)
2021-02-20 10:54:31.895561 [ThreadId 556] - hlint:getIdeas:setExtensions:[Cpp,OverlappingInstances,UndecidableInstances,IncoherentInstances,UndecidableSuperClasses,MonomorphismRestriction,MonoPatBinds,MonoLocalBinds,RelaxedPolyRec,ExtendedDefaultRules,ForeignFunctionInterface,UnliftedFFITypes,InterruptibleFFI,CApiFFI,GHCForeignImportPrim,JavaScriptFFI,ParallelArrays,TemplateHaskell,TemplateHaskellQuotes,ImplicitParams,ImplicitPrelude,ScopedTypeVariables,AllowAmbiguousTypes,UnliftedNewtypes,BangPatterns,TypeFamilies,TypeFamilyDependencies,TypeInType,OverloadedStrings,OverloadedLists,NumDecimals,DisambiguateRecordFields,RecordWildCards,RecordPuns,ViewPatterns,GADTs,GADTSyntax,NPlusKPatterns,DoAndIfThenElse,BlockArguments,RebindableSyntax,ConstraintKinds,PolyKinds,DataKinds,InstanceSigs,ApplicativeDo,StandaloneDeriving,DeriveDataTypeable,AutoDeriveTypeable,DeriveFunctor,DeriveTraversable,DeriveFoldable,DeriveGeneric,DefaultSignatures,DeriveAnyClass,DeriveLift,DerivingStrategies,DerivingVia,TypeSynonymInstances,FlexibleContexts,FlexibleInstances,ConstrainedClassMethods,MultiParamTypeClasses,NullaryTypeClasses,FunctionalDependencies,UnicodeSyntax,ExistentialQuantification,MagicHash,EmptyDataDecls,KindSignatures,RoleAnnotations,ParallelListComp,MonadComprehensions,GeneralizedNewtypeDeriving,PostfixOperators,TupleSections,PatternGuards,LiberalTypeSynonyms,RankNTypes,ImpredicativeTypes,TypeOperators,ExplicitNamespaces,PackageImports,ExplicitForAll,AlternativeLayoutRuleTransitional,DatatypeContexts,NondecreasingIndentation,RelaxedLayout,TraditionalRecordSyntax,LambdaCase,MultiWayIf,BinaryLiterals,HexFloatLiterals,DuplicateRecordFields,OverloadedLabels,EmptyCase,PatternSynonyms,PartialTypeSignatures,NamedWildCards,TypeApplications,Strict,StrictData,MonadFailDesugaring,EmptyDataDeriving,NumericUnderscores,QuantifiedConstraints,ImportQualifiedPost,CUSKs,StandaloneKindSignatures,StarIsType]
2021-02-20 10:54:31.896367 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"17/129"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:31.998259 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"18/132"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:32.098946 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"17/132"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:32.503755 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"20/132"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:32.606424 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"24/132"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:32.710042 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"26/132"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:32.925642 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"56/153"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.029809 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"58/154"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.130611 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"72/158"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.232666 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"77/160"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.3338 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"84/163"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.591803 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"91/165"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.678561 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"93/165"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:33.846729 [ThreadId 3009] - finish: CodeAction:PackageExports (took 2.00s)
2021-02-20 10:54:33.879358 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"97/166"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:34.473624 [ThreadId 3038] - finish: codeLens (took 2.97s)
2021-02-20 10:54:34.473553 [ThreadId 3037] - finish: codeLens (took 2.97s)
2021-02-20 10:54:34.473519 [ThreadId 3036] - finish: codeLens (took 2.97s)
2021-02-20 10:54:34.473844 [ThreadId 3039] - finish: retrie (took 2.97s)
2021-02-20 10:54:34.473978 [ThreadId 3047] - finish:  (took 2.97s)
2021-02-20 10:54:34.473968 [ThreadId 3046] - finish:  (took 2.97s)
2021-02-20 10:54:34.473995 [ThreadId 3048] - finish:  (took 2.97s)
2021-02-20 10:54:34.474472 [ThreadId 7] - <--2--{"result":[{"command":{"command":"47586:importLens:ImportLensCommand","arguments":[{"changes":{"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}},"newText":"import Stack.Prelude\n    ( (++),\n      map,\n      ($),\n      Show(show),\n      Maybe(..),\n      Either(Right, Left),\n      String,\n      concat,\n      (.),\n      either,\n      (<$>),\n      unlines,\n      const,\n      even )"}]}}],"title":"import Stack.Prelude\n    ( (++),\n      map,\n      ($),\n      Show(show),\n      Maybe(..),\n      Either(Right, Left),\n      String,\n      concat,\n      (.),\n      either,\n      (<$>),\n      unlines,\n      const,\n      even )"},"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}}},{"command":{"command":"47586:moduleName:edit","arguments":["file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"],"title":"Set module name to main.BuildInfo"},"range":{"start":{"line":10,"character":7},"end":{"line":10,"character":16}}}],"jsonrpc":"2.0","id":4}
2021-02-20 10:54:34.474694 [ThreadId 7] - <--2--{"result":[{"command":{"command":"47586:importLens:ImportLensCommand","arguments":[{"changes":{"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}},"newText":"import Stack.Prelude\n    ( (++),\n      map,\n      ($),\n      Show(show),\n      Maybe(..),\n      Either(Right, Left),\n      String,\n      concat,\n      (.),\n      either,\n      (<$>),\n      unlines,\n      const,\n      even )"}]}}],"title":"import Stack.Prelude\n    ( (++),\n      map,\n      ($),\n      Show(show),\n      Maybe(..),\n      Either(Right, Left),\n      String,\n      concat,\n      (.),\n      either,\n      (<$>),\n      unlines,\n      const,\n      even )"},"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}}},{"command":{"command":"47586:moduleName:edit","arguments":["file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"],"title":"Set module name to main.BuildInfo"},"range":{"start":{"line":10,"character":7},"end":{"line":10,"character":16}}}],"jsonrpc":"2.0","id":3}
2021-02-20 10:54:34.47476 [ThreadId 3053] - finish: tactic (took 2.97s)
2021-02-20 10:54:34.474885 [ThreadId 7] - <--2--{"result":[{"command":{"command":"47586:importLens:ImportLensCommand","arguments":[{"changes":{"file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}},"newText":"import Stack.Prelude\n    ( (++),\n      map,\n      ($),\n      Show(show),\n      Maybe(..),\n      Either(Right, Left),\n      String,\n      concat,\n      (.),\n      either,\n      (<$>),\n      unlines,\n      const,\n      even )"}]}}],"title":"import Stack.Prelude\n    ( (++),\n      map,\n      ($),\n      Show(show),\n      Maybe(..),\n      Either(Right, Left),\n      String,\n      concat,\n      (.),\n      either,\n      (<$>),\n      unlines,\n      const,\n      even )"},"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":20}}},{"command":{"command":"47586:moduleName:edit","arguments":["file:///Users/anka/projekt/not-mine/haskell/stack/src/main/BuildInfo.hs"],"title":"Set module name to main.BuildInfo"},"range":{"start":{"line":10,"character":7},"end":{"line":10,"character":16}}}],"jsonrpc":"2.0","id":5}
2021-02-20 10:54:34.475039 [ThreadId 3058] - finish: tactic (took 0.00s)
2021-02-20 10:54:34.475228 [ThreadId 3059] - finish: tactic (took 0.00s)
2021-02-20 10:54:34.475837 [ThreadId 7] - <--2--{"result":[],"jsonrpc":"2.0","id":2}
2021-02-20 10:54:34.499802 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"100/168"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:35.227904 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"101/169"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:35.333742 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"102/169"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:37.389797 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"134/186"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:37.493189 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"report","message":"139/188"},"token":"67"},"method":"$/progress"}
2021-02-20 10:54:37.501222 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"value":{"kind":"end"},"token":"67"},"method":"$/progress"}
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/hackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV/libHShackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV.a: unknown symbol `___dso_handle'
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/hackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV/libHShackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV.a: unknown symbol `_hackagezmsecurityzm0zi6zi0zi0zm3qwAbc12aKeeCQ4xJQ0vV_HackageziSecurityziTrusted_zdfVerifyRoleRootzuzdcverifyRole_closure'
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/pantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD/libHSpantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD.a: unknown symbol `_hackagezmsecurityzm0zi6zi0zi0zm3qwAbc12aKeeCQ4xJQ0vV_HackageziSecurityziClient_uncheckClientErrors2_closure'
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/pantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD/libHSpantry-0.5.1.3-3sVQLV28LDvBxNuzKHQnVD.a: unknown symbol `_pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_PantryziHackage_getHackageTarball_info'
haskell-language-server-0.9.0-darwin-8.8.3: ^^ Could not load '_pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_Pantry_gpdVersion_closure', dependency unresolved. See top entry above.

2021-02-20 10:54:38.174455 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/Project.hs","diagnostics":[{"severity":1,"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"source":"typecheck","message":"Program error: \nByteCodeLink.lookupCE\nDuring interactive linking, GHCi couldn't find the following symbol:\n  pantryzm0zi5zi1zi3zm3sVQLV28LDvBxNuzzKHQnVD_Pantry_gpdVersion_closure\nThis may be due to you not asking GHCi to load extra object files,\narchives or DLLs needed by your current session.  Restart GHCi, specifying\nthe missing library using the -L/path/to/object/dir and -lmissinglibname\nflags, or simply by naming the relevant files on the GHCi command line.\nAlternatively, this link failure might indicate a bug in GHCi.\nIf you suspect the latter, please send a bug report to:\n  glasgow-haskell-bugs@haskell.org\n"}]},"method":"textDocument/publishDiagnostics"}
haskell-language-server-0.9.0-darwin-8.8.3: 
lookupSymbol failed in relocateSection (relocate external)
/Users/anka/.stack/snapshots/x86_64-osx-nix/6a880b8e9f0621fe8413b2f90e2ed320514d14dd7712f94a2b1ba472024440ff/8.8.3/lib/x86_64-osx-ghc-8.8.3/hackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV/libHShackage-security-0.6.0.0-3qwAbc12aKeeCQ4xJQ0vV.a: unknown symbol `___dso_handle'
2021-02-20 10:54:38.180084 [ThreadId 7] - <--2--{"jsonrpc":"2.0","params":{"uri":"file:///Users/anka/projekt/not-mine/haskell/stack/src/Stack/Storage/User.hs","diagnostics":[{"severity":1,"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"source":"typecheck","message":"Program error: "}]},"method":"textDocument/publishDiagnostics"}
2021-02-20 10:54:38.204881 [ThreadId 3634] - finish: InitialLoad (took 6.70s)
@anka-213
Copy link
Contributor Author

This might be related to: #1024
The file that it complains about (src/Stack/Storage/Project.hs) does contain template-haskell code.

@jneira jneira added type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc.. type: setup labels Feb 21, 2021
@jneira
Copy link
Member

jneira commented Feb 21, 2021

Hi, thanks for the bug report, hls uses stack repl underneath, does stack repl src/Stack/Storage/Project.hs work in a shell?
Maybe that module doesn't use template haskell but some of dependant modules do.

This reminds me #330 which also arise in the stack codebase

@anka-213
Copy link
Contributor Author

@jneira Yes, stack repl src/Stack/Storage/Project.hs works without any problems.

@anka-213
Copy link
Contributor Author

anka-213 commented Feb 22, 2021

I can also confirm that removing the TemplateHaskell fixes the problem.

As a workaround, I ran

stack build --ghc-options='-dth-dec-file'

and manually inserted the generated code code in place of the TH code.

(I also used this hack https://www.tweag.io/blog/2021-01-07-haskell-dark-arts-part-i/ when fixing the TH generated code, since it contained references to hidden/non-exported code. That worked without any issues.)

@jneira
Copy link
Member

jneira commented Feb 22, 2021

Thanks for confirming it, this looks like #330 but maybe no enough to close as duplicate

@nh2
Copy link
Member

nh2 commented Nov 29, 2021

I have such an issue as well, on Linux (Ubuntu) in my nix environment for a larger project:

image

Using right-click -> Copy in VSCode:

{
	"resource": "/home/niklas/src/myproject/src/Myfile.hs",
	"owner": "Haskell (myproject-nixos-21.11)",
	"severity": 8,
	"message": "Program error: ",
	"source": "typecheck",
	"startLineNumber": 1,
	"startColumn": 1,
	"endLineNumber": 2,
	"endColumn": 1
}

haskell-language-server-wrapper output looks like:

File:     /home/niklas/src/myproject/src/Myfile.hs
Hidden:   no
Range:    1:1-2:1
Source:   typecheck
Severity: DsError
Message:  Program error:

Further up in the haskell-language-server-wrapper output I have some errors that relate to linking failing (I use TemplateHaskell, which loads these libraries, I think) regarding my use of the lz4-frame-conduit package as a dependency:

GHC runtime linker: fatal error: I found a duplicate definition for symbol
   LZ4_compressBound
whilst processing object file
   /nix/store/2g49nd7lrz25dmf9xz80r1sv9whdkf49-lz4-frame-conduit-0.1.0.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM/libHSlz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM.a
The symbol was previously defined in
   /nix/store/nmw97zsn5l48g0xqjfa8fjdran0v0n36-lz4-0.2.3.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-0.2.3.1-34WGlfIWb28B1dp5kvszDj/libHSlz4-0.2.3.1-34WGlfIWb28B1dp5kvszDj.a(lz4.o)
This could be caused by:
   * Loading two different object files which export the same symbol
   * Specifying the same object file twice on the GHCi command line
   * An incorrect `package.conf' entry, causing some object to be
     loaded twice.
haskell-language-server-8.10.7: /nix/store/2g49nd7lrz25dmf9xz80r1sv9whdkf49-lz4-frame-conduit-0.1.0.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM/libHSlz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM.a: unknown symbol `LZ4_resetStream_fast'
haskell-language-server-8.10.7: /nix/store/2g49nd7lrz25dmf9xz80r1sv9whdkf49-lz4-frame-conduit-0.1.0.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM/libHSlz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM.a: unknown symbol `LZ4F_isError'
haskell-language-server-8.10.7: ^^ Could not load 'lzz4zmframezmconduitzm0zi1zi0zi1zmBIHmML1TL8i2RunuihokwM_CodecziCompressionziLZZ4ziConduit_decompress_closure', dependency unresolved. See top entry above.

GHC runtime linker: fatal error: I found a duplicate definition for symbol
   LZ4_sizeofStateHC
whilst processing object file
   /nix/store/2g49nd7lrz25dmf9xz80r1sv9whdkf49-lz4-frame-conduit-0.1.0.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM/libHSlz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM.a
The symbol was previously defined in
   /nix/store/nmw97zsn5l48g0xqjfa8fjdran0v0n36-lz4-0.2.3.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-0.2.3.1-34WGlfIWb28B1dp5kvszDj/libHSlz4-0.2.3.1-34WGlfIWb28B1dp5kvszDj.a(lz4hc.o)
This could be caused by:
   * Loading two different object files which export the same symbol
   * Specifying the same object file twice on the GHCi command line
   * An incorrect `package.conf' entry, causing some object to be
     loaded twice.
haskell-language-server-8.10.7: /nix/store/2g49nd7lrz25dmf9xz80r1sv9whdkf49-lz4-frame-conduit-0.1.0.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM/libHSlz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM.a: unknown symbol `LZ4_resetStreamHC_fast'
haskell-language-server-8.10.7: Could not load Object Code /nix/store/2g49nd7lrz25dmf9xz80r1sv9whdkf49-lz4-frame-conduit-0.1.0.1/lib/ghc-8.10.7/x86_64-linux-ghc-8.10.7/lz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM/libHSlz4-frame-conduit-0.1.0.1-BIHmML1TL8i2RunuihokwM.a(lz4frame.o).

@jneira
Copy link
Member

jneira commented Nov 29, 2021

If the root cause is the same as other problems related with th, the workaround described in #1431 should work also in this case (basically build hls from source but dinamically linked)

@nh2 could you confirm the workaround works also for you?

@jneira jneira added the status: needs info Not actionable, because there's missing information label Nov 29, 2021
@jneira
Copy link
Member

jneira commented Jan 31, 2022

I am gonna close this issue as all compiler crashes seems to have the same root cause:

If any of you think the issue should not be included generically feel free to reopen it (with a brief explanation if possible)
Thanks all!

@jneira jneira closed this as completed Jan 31, 2022
@jneira jneira removed the status: needs info Not actionable, because there's missing information label Jan 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
os: macos type: bug Something isn't right: doesn't work as intended, documentation is missing/outdated, etc..
Projects
None yet
Development

No branches or pull requests

3 participants