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

hie-bios fails to compile where "stack repl" succeeds, even with hie.yaml: cradle: stack: #450

Open
kenton-waters opened this issue Jan 21, 2025 · 0 comments

Comments

@kenton-waters
Copy link

kenton-waters commented Jan 21, 2025

Summary

I am trying to get a minimal example of LiquidHaskell working with HLS, and I'm running into the following issue:

The haskell-language-server-wrapper command produces an inappropriate compilation error:

Unknown type constructor `Pos`
    matchTyCon: Pos

The stack repl command, on the other hand, compiles successfully without producing the error (this is the correct behavior, as the code itself is correct).

hie-bios produces the error despite the project containing a hie.yaml file with these contents:

cradle:
  stack:

My understanding was that this was supposed to make hie-bios build "the same way" that Stack does. Why might hie-bios build differently than Stack, even when the hie.yaml file is present?

Steps to re-create

Platform: Arch Linux

Install the following via ghcup:

  • HLS 2.6.0.0
  • GHC 9.8.1
  • Stack 3.1.1
  • cabal 3.12.1

Example project: git clone https://github.com/ucsd-progsys/lh-plugin-demo.git

Replace the contents of the stack.yaml file with the following:

resolver: nightly-2024-01-26

system-ghc: true

packages:
  - .
extra-deps:
  - rest-rewrite-0.4.3
  - smtlib-backends-0.3
  - smtlib-backends-process-0.3
  - store-0.7.18
  - store-core-0.4.4.7
  - liquidhaskell-0.9.8.1
  - liquidhaskell-boot-0.9.8.1
  - liquid-fixpoint-0.9.6.3
  - liquid-prelude-0.9.2.8.1@rev:1
  - liquid-vector-0.13.1.0.1

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

Create a top-level hie.yaml file with the following contents:

cradle:
  stack:

Replace the contents of src/Demo/Client.hs with the following:

{-# OPTIONS_GHC -fplugin=LiquidHaskell #-}
module Demo.Client where
import Demo.Lib

{-@ posId :: Pos -> Pos @-}
posId :: Int -> Int
posId = id

At this point,

stack build compiles with no errors.

stack ghci compiles with no errors.

stack repl compiles with no errors.

haskell-language-server-wrapper produces a compilation error:

Unknown type constructor `Pos`
    matchTyCon: Pos

Why might hie-bios build differently than Stack, even when the hie.yaml file is present? Thank you in advance for your help!

Extra context

I was able to recreate this issue with ghcid.

The command ghcid fails to compile with the same error that hie-bios is producing.

The command ghcid "--command=stack ghci" compiles with no errors, giving the All good message. This does not immediately help me resolve the issue with hie-bios, though.

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

1 participant