ucsd-progsys / liquidhaskell

Liquid Types For Haskell

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can't figure out how to build a project with GHC 9.6.3

lylek opened this issue · comments

Hi folks,

I'm new to LiquidHaskell. I was able to get the LH Plugin Demo to build and run using stack. But I wanted to try making my own project, using GHC 9.6.3. The installation instructions said to add a dependency on liquidhaskell to your .cabal file, and to "follow the examples" for how to set up your stack.yaml.

Well, the LH Plugin Demo's stack.yaml references particular commits for liquidhaskell and liquid-fixpoint. So I looked up the v0.9.6.3 tag, and copied the commit ID for liquidhaskell, and used the submodule commit ID for liquid-fixpoint. But when I build with stack, it terminated with this error:

liquidhaskell     > Error: setup: '/Users/lyle/.ghcup/ghc/9.6.3/bin/ghc' exited with an error:
liquidhaskell     > <command line>: Could not find module ‘LiquidHaskellBoot’
liquidhaskell     > Use -v (or `:set -v` in ghci) to see a list of the files searched for.

This is the stack.yaml I'm using for my project:

resolver:
  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/6.yaml

packages:
- .

extra-deps:
  - smtlib-backends-0.3
  - smtlib-backends-process-0.3
  - git: https://github.com/ucsd-progsys/liquidhaskell
    commit: 6aeb737d47d10734d74d193e176eef95dce65d57
    subdirs:
      - .
      - liquidhaskell-boot
      - liquid-prelude
      - liquid-vector
  - git: https://github.com/ucsd-progsys/liquid-fixpoint
    commit: 28c6d943a18d8d636385a7ff1fa10e81a7b4a0ab

In package.yaml, I just made sure to set up dependencies like this:

dependencies:
- base >= 4.7 && < 5
- liquidhaskell
- liquid-prelude

I also added -fplugin=LiquidHaskell under ghc-options.

Since that failed, I tried to work from the other direction. What if I tried to upgrade the LH Plugin Demo to GHC 9.6.3? So I copied that project, and just edited the stack.yaml. I used the same stackage resolver that was set in the stack.yaml within the liquidhaskell project (at the v0.9.6.3 tag):

resolver: nightly-2023-11-27
packages:
  - .
extra-deps:
  - smtlib-backends-0.3
  - smtlib-backends-process-0.3
  - git: https://github.com/ucsd-progsys/liquidhaskell
    commit: fc4a89b91fad8b7a02b72901381d4358a470e230
    subdirs:
      - .
      - liquidhaskell-boot
      - liquid-prelude
      - liquid-vector
  - git: https://github.com/ucsd-progsys/liquid-fixpoint
    commit: eb339f9abdf073f8d9f0c446c309006fdf49ed42

nix:
  packages: [cacert, git, hostname, z3]

That failed to build, but with a different problem... stack couldn't construct a build plan:

Error: [S-4804]
       Stack failed to construct a build plan.

       While constructing the build plan, Stack encountered the following errors. The 'Stack configuration' refers to the set of package versions specified by the snapshot (after any dropped packages,
       or pruned GHC boot packages; if a boot package is replaced, Stack prunes all other such packages that depend on it) and any extra-deps:

       In the dependencies for liquid-fixpoint-0.9.0.2.1:
         * vector must match <0.13, but vector-0.13.1.0 is in the Stack configuration (latest matching version is 0.12.3.1).
       needed due to lh-plugin-demo-0.1.0.0 -> liquid-fixpoint-0.9.0.2.1

       In the dependencies for liquid-vector-0.12.3.1:
         * vector must match >=0.12.3.1 && <0.13, but vector-0.13.1.0 is in the Stack configuration (latest matching version is 0.12.3.1).
       needed due to lh-plugin-demo-0.1.0.0 -> liquid-vector-0.12.3.1

       In the dependencies for liquidhaskell-0.9.2.5.0:
         * bytestring must match ==0.11.3.1, but bytestring-0.11.5.2 is in the Stack configuration (latest matching version is 0.11.3.1).
         * containers must match ==0.6.5.1, but containers-0.6.7 is in the Stack configuration (latest matching version is 0.6.5.1).
       needed due to lh-plugin-demo-0.1.0.0 -> liquidhaskell-0.9.2.5.0

       In the dependencies for liquidhaskell-boot-0.9.2.5.0:
         * Cabal must match <3.7, but Cabal-3.10.1.0 is in the Stack configuration (latest matching version is 3.6.3.0).
         * ghc must match ^>=9.2, but ghc-9.6.3 is in the Stack configuration (latest matching version is 9.2.8).
         * hashable must match >=1.3 && <1.4, but hashable-1.4.3.0 is in the Stack configuration (latest matching version is 1.3.5.0).
         * optparse-applicative must match <0.18, but optparse-applicative-0.18.1.0 is in the Stack configuration (latest matching version is 0.17.1.0).
       needed due to lh-plugin-demo-0.1.0.0 -> liquidhaskell-boot-0.9.2.5.0

What am I missing? Is there an easier way to figure out how to configure my files? Could someone please add more instructions to the documentation?

Thanks,
Lyle

oops, let me try to update the plugin demo to work with the latest LH!

oops, let me try to update the plugin demo to work with the latest LH!

That's great, thanks!

Is there a general process by which one would do this? That is, If a new LH version that comes out supporting a new GHC version, is there some straightforward way I can update my stack.yaml to use that new version?

Hi @lylek -- I managed to update the lh-plugin-demo so it works with stack and the latest LH and GHC 9.8.1 here:

ucsd-progsys/lh-plugin-demo#23

I can't for the life of me figure out the cabal story, sadly -- but maybe the stack will get you unstuck?

The general process is simply pointing stack/cabal.project to the latest GH snapshots for LH/fixpoint (as in the stack.yaml) but IdK what is going on with cabal maybe @facundominguez has a clue?

This is a bug in the cabal/GHC interaction, which does not allow to register packages which list plugins in ghc-options. We have worked around that in liquidhaskell-0.9.8.1, but not in liquidhaskell-0.9.6.3.

As far as I could check, the fix is not in the latest Cabal yet. I backported the workaround and just released it as liquidhaskell-0.9.6.3.1. Please, let us know if it still doesn't fix it for you.

I'm running into the same issue it seems. I followed the repo, but I still get this error on stack build

Error: [S-4804]
       Stack failed to construct a build plan.
       
       While constructing the build plan, Stack encountered the following errors. The 'Stack configuration' refers to the set of package versions specified by the snapshot (after any dropped packages,
       or pruned GHC boot packages; if a boot package is replaced, Stack prunes all other such packages that depend on it) and any extra-deps:
       
       In the dependencies for hashable-1.3.5.0:
         * base must match >=4.5 && <4.17, but base-4.18.2.1 is in the Stack configuration (latest matching version is 4.16.4.0).
         * ghc-bignum must match >=1.0 && <1.1 || >=1.1 && <1.2 || >=1.2 && <1.3, but ghc-bignum-1.3 is in the Stack configuration (latest matching version is 1.2).
         * text must match >=0.12 && <1.3, but text-2.0.2 is in the Stack configuration (latest matching version is 1.2.5.0).
       The above is/are needed due to liquid-haskell-tutorial-0.1.0.0 -> hashable-1.3.5.0
       
       In the dependencies for liquid-fixpoint-0.9.0.2.1:
         * vector must match <0.13, but vector-0.13.1.0 is in the Stack configuration (latest matching version is 0.12.3.1).
       The above is/are needed due to liquid-haskell-tutorial-0.1.0.0 -> liquid-fixpoint-0.9.0.2.1
       
       In the dependencies for liquidhaskell-0.9.2.5.0:
         * bytestring must match ==0.11.3.1, but bytestring-0.11.5.3 is in the Stack configuration (latest matching version is 0.11.3.1).
         * containers must match ==0.6.5.1, but containers-0.6.7 is in the Stack configuration (latest matching version is 0.6.5.1).
       The above is/are needed due to liquid-haskell-tutorial-0.1.0.0 -> liquidhaskell-0.9.2.5.0
       
       In the dependencies for liquidhaskell-boot-0.9.2.5.0:
         * Cabal must match <3.7, but Cabal-3.10.3.0 is in the Stack configuration (latest matching version is 3.6.3.0).
         * ghc must match ^>=9.2, but ghc-9.6.5 is in the Stack configuration (latest matching version is 9.2.8).
         * optparse-applicative must match <0.18, but optparse-applicative-0.18.1.0 is in the Stack configuration (latest matching version is 0.17.1.0).
       The above is/are needed due to liquid-haskell-tutorial-0.1.0.0 -> liquidhaskell-boot-0.9.2.5.0
       
       Some different approaches to resolving some or all of this:
       
         * To ignore all version constraints and build anyway, in /home/olaolu/.stack/config.yaml (global configuration) or /home/olaolu/Desktop/labs/liquid-haskell-tutorial/stack.yaml (project-level
           configuration), set allow-newer: true.
         
         * To ignore certain version constraints and build anyway, also add these package names under allow-newer-deps: hashable, liquid-fixpoint, liquidhaskell and liquidhaskell-boot.
         
         * Build requires unattainable version of the base package. Since base is a part of GHC, you most likely need to use a different GHC version with the matching base.

Using lts-22.21

Hello @OlaoluwaM! This stack configuration works with lts-22.6, which works with ghc-9.6.3. It may serve as a basis for your configuration. Though keep in mind that we haven't tested Liquid Haskell with ghc-9.6.5.

I'm closing this issue as resolved. But please, feel free to open a new one if builds aren't working for you yet.