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

intero fails to install when the stack resolver has incompatible boot packages #154

Open
hasufell opened this issue Jul 10, 2018 · 10 comments

Comments

@hasufell
Copy link

On startup, just fails.

intero-0.1.32: configure
intero-0.1.32: build

--  While building custom Setup.hs for package intero-0.1.32 using:
      /home/hasufell/.stack/setup-exe-cache/x86_64-linux-tinfo6/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0 bui
ld --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
    Process exited with code: ExitFailure 1
    Logs have been written to: .../intero-0.1.32.log

    Configuring intero-0.1.32...
    Warning:
        This package indirectly depends on multiple versions of the same package. This is very likely to cause a compile failure.
          package ghci (ghci-8.2.2) requires binary-0.8.5.1
          package ghc-boot (ghc-boot-8.2.2) requires binary-0.8.5.1
          package ghc (ghc-8.2.2) requires binary-0.8.5.1
          package ghci (ghci-8.2.2-JG49OKW8gsQFdWJQf6tmU0) requires binary-0.8.5.1-2jjzTJ14Adx8SkxPTQoTtW
          package ghc-boot (ghc-boot-8.2.2-8qlL7gZ9Qhe2GONp97s6QO) requires binary-0.8.5.1-2jjzTJ14Adx8SkxPTQoTtW
          package hpc (hpc-0.6.0.3) requires containers-0.5.10.2
          package hoopl (hoopl-3.10.2.2) requires containers-0.5.10.2
          package ghci (ghci-8.2.2) requires containers-0.5.10.2
          package ghc (ghc-8.2.2) requires containers-0.5.10.2
          package binary (binary-0.8.5.1) requires containers-0.5.10.2
          package intero (intero-0.1.32) requires containers-0.5.11.0-74jiVtUSISeGR33AtpmPdk
          package haskeline (haskeline-0.7.4.2-LpoCrOJTiaLGBAaD2qdwBn) requires containers-0.5.11.0-74jiVtUSISeGR33AtpmPdk
          package ghci (ghci-8.2.2-JG49OKW8gsQFdWJQf6tmU0) requires containers-0.5.11.0-74jiVtUSISeGR33AtpmPdk
          package binary (binary-0.8.5.1-2jjzTJ14Adx8SkxPTQoTtW) requires containers-0.5.11.0-74jiVtUSISeGR33AtpmPdk
          package ghci (ghci-8.2.2) requires ghc-boot-8.2.2
          package ghc (ghc-8.2.2) requires ghc-boot-8.2.2
          package ghci (ghci-8.2.2-JG49OKW8gsQFdWJQf6tmU0) requires ghc-boot-8.2.2-8qlL7gZ9Qhe2GONp97s6QO
          package ghc (ghc-8.2.2) requires ghci-8.2.2
          package intero (intero-0.1.32) requires ghci-8.2.2-JG49OKW8gsQFdWJQf6tmU0
    Preprocessing executable 'intero' for intero-0.1.32..
    Building executable 'intero' for intero-0.1.32..
    [ 1 of 10] Compiling Intero.Compat    ( src/Intero/Compat.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/intero/intero-tmp/Intero/Compat.o )

    /tmp/stack5794/intero-0.1.32/src/Intero/Compat.hs:72:26: error:
        • Couldn't match type ‘containers-0.5.10.2:Data.Graph.SCC
                                 ModSummary’
                         with ‘SCC.SCC ModSummary’
          NB: ‘SCC.SCC’
                is defined in ‘Data.Graph’ in package ‘containers-0.5.11.0’
              ‘containers-0.5.10.2:Data.Graph.SCC’
                is defined in ‘Data.Graph’ in package ‘containers-0.5.10.2’
          Expected type: Bool
                         -> [ModSummary] -> Maybe ModuleName -> [SCC.SCC ModSummary]
            Actual type: Bool
                         -> [ModSummary]
                         -> Maybe ModuleName
                         -> [containers-0.5.10.2:Data.Graph.SCC ModSummary]
        • In the expression: topSortModuleGraph
          In an equation for ‘ghc_topSortModuleGraph’:
              ghc_topSortModuleGraph = topSortModuleGraph
       |
    72 | ghc_topSortModuleGraph = GHC.topSortModuleGraph
       |                          ^^^^^^^^^^^^^^^^^^^^^^

@parsonsmatt
Copy link
Owner

This is a bug with upstream intero, you may want to post an issue there.

That you have multiple versions of containers is troubling.

@hasufell
Copy link
Author

That you have multiple versions of containers is troubling.

Well, that's stacks problem not mine. I'm not manually installing random libraries. That's all stacks doing.

@parsonsmatt
Copy link
Owner

Can you post the resolver you're using? I'm curious if I can reproduce the issue locally.

@hasufell
Copy link
Author

resolver: lts-11.13
extra-deps:
  - happy-1.19.9@rev:2
  - containers-0.5.11.0
  - IfElse-0.85
compiler: ghc-8.2.2
compiler-check: match-exact

@parsonsmatt
Copy link
Owner

The problem is that you're specifying a newer containers than is compatible with the GHC version you're using. This is OK as long as nothing else in the dependency tree depends on GHC as a library, which intero does. containers-0.5.11.0 is intended for use with GHC 8.4.

@hasufell
Copy link
Author

That sounds like a bug.

@parsonsmatt
Copy link
Owner

It's an unfortunate downside of how dependencies are managed with GHC. This comment has more explanation and information, and the issue thread contains more of the trade-offs.

In short, you can't depend on containers-0.5.11.0 and also depend on a package bundled with GHC 8.2.2 because GHC 8.2.2 requires containers-0.5.10 explicitly, and GHC comes with it's own version of containers.

As a workaround, you can either use ghc-8.4.3 and containers-0.5.11.0 (now available as part of the lts-12 resolver), or you can use ghc-8.2.2 and the older containers.

Or, as a third workaround (this may or may not work), you can comment out the containers extra-dep, do stack build intero to copy the executable to your project, and then uncomment the containers extra-dep. This will build intero executable with the appropriate containers for the GHC version you're using, and then let you use the newer containers in your library.

@chrisdone
Copy link

intero-neovim can copy what the emacs package does for this: https://github.com/chrisdone/intero/blob/60e2e3f76f647b20d9de8418f9576ea157e21864/elisp/intero.el#L2224..L2231

(let ((default-directory (make-temp-file "intero" t)))
          (intero-call-stack
           nil (current-buffer) t nil "build"
           "--copy-compiler-tool"
           (concat "intero-" intero-package-version)
           "--flag" "haskeline:-terminfo"
           "--resolver" (concat "ghc-" ghc-version)
           "ghc-paths-0.1.0.9" "mtl-2.2.2" "network-2.7.0.0" "random-1.1" "syb-0.7"))
  • Build intero in a temporary directory, away from the user's project directory: this avoids conflicting with their custom package versions like containers.
  • Pass --copy-compiler-tool so that it's only built once for that GHC version and will be available in any project with that GHC version.

@parsonsmatt
Copy link
Owner

fantastic, thank you! 😄

@hasufell I am going to edit the title to make it more clear what the problem is.

@parsonsmatt parsonsmatt changed the title stopped working at all intero fails to install when the stack resolver has incompatible boot packages Jul 10, 2018
@hasufell
Copy link
Author

thanks @chrisdone

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants