haskell / haskell-language-server

Official haskell ide support via language server (LSP). Successor of ghcide & haskell-ide-engine.
Apache License 2.0
2.72k stars 367 forks source link

Completion / highlighting for default-extensions in package.yaml (hpack / stack) #3590

Open ArturGajowy opened 1 year ago

ArturGajowy commented 1 year ago

Not sure if this is a HLS issue, but I'd love to get a squiggly warning in package.yaml whenever I misspell a language extension, e.g.:

default-extensions:
- ExplicitForall

Completion would be nice as well, but is secondary. Thanks! :)

ArturGajowy commented 1 year ago

I should maybe note that the current behavior is "HLS stops responding, you won't know till you stack build". Nothing related is output in HLS logs. I guess the part of my woes that are a HLS problem is "HLS stops working without an error message"

fendor commented 1 year ago

HLS provides no diagnostics for package.yaml in the foreseeable future. You'll probably have more luck with the upcoming hls-cabal-plugin https://github.com/haskell/haskell-language-server/issues/2940.

However, we ought to show the stack output error... You should be able to see a red squiggle in the first line of the file, do you not?

ArturGajowy commented 1 year ago

Thank you for mentioning hls-cabal-plugin :)

I checked again, and there is some message - though hidden up in the first line of the .hs file

[{
    "resource": "/home/artur/projects/snip/src/Lib.hs",
    "owner": "Haskell (snip)",
    "severity": 8,
    "message": "target ‘-XExplicitForall’ is not a module name or a source file",
    "source": "compiler",
    "startLineNumber": 1,
    "startColumn": 1,
    "endLineNumber": 2,
    "endColumn": 1
}]

I've the following thoughts on that:

Warning: Unknown extensions: FlexibleContextsx, FlexibleContextsx,
FlexibleContextsx
Cabal-simple_SvXsv1f__3.2.1.0_ghc-8.10.7: The package snip-0.1.0.0
requires the following language extensions which are not supported by
ghc-8.10.7: FlexibleContextsx

Maybe HLS could show a pop-up / toast in such cases (cases where further compiler diagnostics are not possible / make no sense)?

I also noticed HLS reloads when I add to dependencies: in package.yaml. Maybe it could have a look at default-extensions: as well? Even if just for reloading :)

Would a hls-hpack-plugin contribution be welcome?

fendor commented 1 year ago

the message is a bit misleading (if workable), stack build says

The error is obtained from stack repl, so what does stack repl in your project? Also, it might be helpful to also look at the generated .cabal file, since this is the source of truth. If hpack generates a complete bonkers .cabal file (just a scenario, not claiming hpack does that right now), not much we can do about it.

Maybe HLS could show a pop-up / toast in such cases (cases where further compiler diagnostics are not possible / make no sense)?

Notifications in LSP are basically unformatted. The only thing reliable about them are newlines. I don't think it is better than having a diagnostic at the top. Also, if stack repl succeeds, HLS basically doesn't know what is going wrong.

I also noticed HLS reloads when I add to dependencies

HLS reloads on any changes to package.yaml, it doesn't look for specific keys, so in theory it should always reload.

Would a hls-hpack-plugin contribution be welcome?

I am not sure what an hls-hpack-plugin would accomplish, you cannot really "check" it... I think we'd have better success if there was a yaml-schema for package.yaml files, then HLS doesn't need to know about it specifically. Adding its own full-blown plugin is definitely a lot of work, but I wouldn't say no to it.

ArturGajowy commented 1 year ago

stack repl also mentions the actual issue, both at the beginning and at the end of its output. Exits with code 1 (see below)

My main issue though is "an error is hidden up the top of my file, far from the last places I've edited (package.yaml, .hs file in question). There's no feedback at the cursor, even when I attempt introducing more errors. Did HLS get stuck? [open errors list] Oh no, the error is at line 1"

In this case, the issue could've been avoided by having package.yaml checked, or by having the diagnostic from line 1 in the file brought up as a popup :)

HLS reloads on any changes to package.yaml, it doesn't look for specific keys, so in theory it should always reload.

I double checked, indeed it reloads when I introduce the error in default-extensions:. It though fails to reload again when I fix it... (!?)

yaml-schema for package.yaml

Love that idea :) I found https://github.com/sol/hpack/issues/521, but no schema has been developed so far. In case of VScode, it seems just adding metadata in Haskell plugin could allow the YAML extension to pickup the schema: https://github.com/redhat-developer/vscode-yaml#mapping-a-schema-in-an-extension

This could be used until it lands in https://www.schemastore.org/json/

Installing the YAML extension could also be proposed by Haskell extension when visiting package.yaml, for all this to make sense?

$ stack repl
Using main module: 1. Package `snip' component snip:exe:snip-exe with main-is file: /home/artur/projects/snip/app/Main.hs
snip> configure (lib + exe)
Configuring snip-0.1.0.0...
Warning: Unknown extensions: ExplicitForAlla, ExplicitForAlla, ExplicitForAlla
Cabal-simple_SvXsv1f__3.2.1.0_ghc-8.10.7: The package snip-0.1.0.0
requires the following language extensions which are not supported by
ghc-8.10.7: ExplicitForAlla

Error: ExecutionFailure [PrettyException (CabalExitedUnsuccessfully (ExitFailure 1) (PackageIdentifier {pkgName = PackageName "snip", pkgVersion = mkVersion [0,1,0,0]}) "/home/artur/.stack/setup-exe-cache/x86_64-linux-tinfo6/Cabal-simple_SvXsv1f__3.2.1.0_ghc-8.10.7" ["--verbose=1","--builddir=.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0","configure","--with-ghc=/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/bin/ghc-8.10.7","--with-ghc-pkg=/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/bin/ghc-pkg-8.10.7","--user","--package-db=clear","--package-db=global","--package-db=/home/artur/.stack/snapshots/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb","--package-db=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb","--libdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/lib","--bindir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/bin","--datadir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/share","--libexecdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/libexec","--sysconfdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/etc","--docdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/doc/snip-0.1.0.0","--htmldir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/doc/snip-0.1.0.0","--haddockdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/doc/snip-0.1.0.0","--dependency=base=base-4.14.3.0","--dependency=foldl=foldl-1.4.12-9OdO1lF89pcCBorCxCaNiN","--dependency=large-anon=large-anon-0.2-A4TQ9LPDaQxKCukMKXagUh","--dependency=pretty-simple=pretty-simple-4.0.0.0-KQSse8zOzjN7BoDiYtj29L","--dependency=profunctors=profunctors-5.6.2-ENzwg0liCYjBWiMoIO8XFj","--dependency=record-dot-preprocessor=record-dot-preprocessor-0.2.14-EtqE4NnXTSX4vjUoXIgT8","--dependency=record-hasfield=record-hasfield-1.0-4LYHIn3Ao3w2P2wnBlk2Gk","--dependency=reflection=reflection-2.1.6-KXta4tOu4EpKOtzHOC6CXA","--dependency=vector=vector-0.12.3.1-2QhxFayEJrmJ3PNYTgAmQ3","--exact-configuration","--ghc-option=-fhide-source-paths"] Nothing [])]

Warning: Build failed, but trying to launch GHCi anyway
The following GHC options are incompatible with GHCi and have not been passed to it: -threaded
Configuring GHCi with the following packages: snip

* * * * * * * *

Warning: Multiple files use the same module name:
         * Paths_snip found at the following paths
           * /home/artur/projects/snip/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build/autogen/Paths_snip.hs (snip:lib)
           * /home/artur/projects/snip/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build/snip-exe/autogen/Paths_snip.hs (snip:exe:snip-exe)
* * * * * * * *

GHCi, version 8.10.7: https://www.haskell.org/ghc/  :? for help
ghc: unrecognised flag: -XExplicitForAlla
did you mean one of:
  -XExplicitForAll
  -XNoExplicitForAll

Usage: For basic information, try the `--help' option.
fendor commented 1 year ago

There's no feedback at the cursor, even when I attempt introducing more errors. Did HLS get stuck? [open errors list] Oh no, the error is at line 1"

We used to underline the whole file with a red squiggly line, but that was deemed a bit too aggressive :) I mean, we can give it a try with the pop-up, but this output, for example, will likely be unreadable in the pop-up.

I double checked, indeed it reloads when I introduce the error in default-extensions:. It though fails to reload again when I fix it... (!?)

Welp, that's a bug then. The configuration file reload logic was always a tad unreliable.

In case of VScode, it seems just adding metadata in Haskell plugin could allow the YAML extension to pickup the schema:

I have no experience with your proposed change, but it looks good to me and like something we want. I think the first challenge would be to define a fitting yaml-schema for package.yaml which doesn't exist yet. For a first iteration, just validating the existence of some keys seems reasonable.

stack repl also mentions the actual issue, both at the beginning and at the end of its output. Exits with code 1 (see below)

this is a bit confusing to me, in theory, we should show the same error as stack. Would you mind sharing the output of haskell-language-server-wrapper --debug <Some-hs-file>?

ArturGajowy commented 1 year ago

We used to underline the whole file with a red squiggly line, but that was deemed a bit too aggressive :) I mean, we can give it a try with the pop-up, but this output, for example, will likely be unreadable in the pop-up.

As long as the popup makes me check the global error list - I'm set :)

One heuristic that comes to mind, is: when build config is borked, multiple (basically all) files have the same / similar diagnostic at line 1. So maybe a workaround would be: "whenever multiple files have errors at line 1, show a pop-up saying 'Multiple files fail to compile. This could be a project build settings issue.' "?

This doesn't address the bigger issue of diagnostics/feedback being far from the place we're editing at. Though I'm now noticing I'm perfectly fine with that when I break things intentionally (e.g. remove a function parameter during a refactoring).

Requested outputs:


22:06 $ haskell-language-server-wrapper --debug src/Empty.hs 
No 'hie.yaml' found. Try to discover the project type!
Run entered for haskell-language-server-wrapper(haskell-language-server-wrapper) Version 2.0.0.0 x86_64 ghc-8.10.7
Current directory: /home/artur/projects/snip
Operating system: linux
Arguments: ["--debug","src/Empty.hs"]
Cradle directory: /home/artur/projects/snip
Cradle type: Stack

Tool versions found on the $PATH
cabal:          3.2.0.0
stack:          2.9.3
ghc:            8.10.7

Consulting the cradle to get project GHC version...
2023-05-22T20:07:25.463649Z | Debug | executing command: stack setup --silent
2023-05-22T20:07:26.308370Z | Debug | executing command: stack exec ghc -- --numeric-version
Project GHC version: 8.10.7
haskell-language-server exe candidates: ["haskell-language-server-8.10.7","haskell-language-server"]
Launching haskell-language-server exe at:/home/artur/.ghcup/bin/haskell-language-server-8.10.7
2023-05-22T20:07:26.653469Z | Debug | executing command: stack setup --silent
2023-05-22T20:07:27.528363Z | Debug | executing command: stack exec ghc -- -v0 -package-env=- -ignore-dot-ghci -e Control.Monad.join (Control.Monad.fmap System.IO.putStr System.Environment.getExecutablePath)
2023-05-22T20:07:27.989021Z | Debug | executing command: stack setup --silent
2023-05-22T20:07:28.883456Z | Debug | executing command: stack exec ghc -- --print-libdir
2023-05-22T20:07:30.565635Z | Info | No log file specified; using stderr.
2023-05-22T20:07:30.566476Z | Info | haskell-language-server version: 2.0.0.0 (GHC: 8.10.7) (PATH: /home/artur/.ghcup/hls/2.0.0.0/lib/haskell-language-server-2.0.0.0/bin/haskell-language-server-8.10.7)
2023-05-22T20:07:30.567600Z | Info | Directory: /home/artur/projects/snip
2023-05-22T20:07:30.568082Z | Info | Logging heap statistics every 60.00s
 ghcide setup tester in /home/artur/projects/snip.
Report bugs at https://github.com/haskell/haskell-language-server/issues

Step 1/4: Finding files to test in /home/artur/projects/snip
Found 1 files

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

Step 3/4: Initializing the IDE
2023-05-22T20:07:30.574033Z | Debug | Initializing exports map from hiedb
2023-05-22T20:07:30.575112Z | Debug | Shake session initialized

Step 4/4: Type checking the files
2023-05-22T20:07:30.577551Z | Info | Cradle path: src/Empty.hs
2023-05-22T20:07:30.577789Z | Warning | No [cradle](https://github.com/mpickering/hie-bios#hie-bios) found for src/Empty.hs.
Proceeding with [implicit cradle](https://hackage.haskell.org/package/implicit-hie).
You should ignore this message, unless you see a 'Multi Cradle: No prefixes matched' error.
2023-05-22T20:07:30.578159Z | Debug | Done initializing exports map from hiedb. Size: 50
2023-05-22T20:07:30.583883Z | Debug | Cradle: Cradle {cradleRootDir = "/home/artur/projects/snip", cradleOptsProg = CradleAction: Stack}
2023-05-22T20:07:30.584199Z | Info | invoking build tool to determine build flags (this may take some time depending on the cache)
2023-05-22T20:07:30.584668Z | Debug | executing command: stack repl --no-nix-pure --with-ghc /home/artur/.cache/hie-bios/wrapper-b54f81dea4c0e6d1626911c526bc4e36 snip:lib
2023-05-22T20:07:31.326680Z | Debug | snip> configure (lib)
2023-05-22T20:07:31.768566Z | Debug | Configuring snip-0.1.0.0...
2023-05-22T20:07:31.768734Z | Debug | Warning: Unknown extensions: ExplicitForAllx, ExplicitForAllx, ExplicitForAllx
2023-05-22T20:07:31.770197Z | Debug | Cabal-simple_SvXsv1f__3.2.1.0_ghc-8.10.7: The package snip-0.1.0.0
2023-05-22T20:07:31.770297Z | Debug | requires the following language extensions which are not supported by
2023-05-22T20:07:31.770360Z | Debug | ghc-8.10.7: ExplicitForAllx
2023-05-22T20:07:31.770412Z | Debug | 
2023-05-22T20:07:31.772706Z | Debug | 
2023-05-22T20:07:31.772789Z | Debug | Error: ExecutionFailure [PrettyException (CabalExitedUnsuccessfully (ExitFailure 1) (PackageIdentifier {pkgName = PackageName "snip", pkgVersion = mkVersion [0,1,0,0]}) "/home/artur/.stack/setup-exe-cache/x86_64-linux-tinfo6/Cabal-simple_SvXsv1f__3.2.1.0_ghc-8.10.7" ["--verbose=1","--builddir=.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0","configure","--with-ghc=/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/bin/ghc-8.10.7","--with-ghc-pkg=/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/bin/ghc-pkg-8.10.7","--user","--package-db=clear","--package-db=global","--package-db=/home/artur/.stack/snapshots/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb","--package-db=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb","--libdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/lib","--bindir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/bin","--datadir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/share","--libexecdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/libexec","--sysconfdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/etc","--docdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/doc/snip-0.1.0.0","--htmldir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/doc/snip-0.1.0.0","--haddockdir=/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/doc/snip-0.1.0.0","--dependency=base=base-4.14.3.0","--dependency=foldl=foldl-1.4.12-9OdO1lF89pcCBorCxCaNiN","--dependency=large-anon=large-anon-0.2-A4TQ9LPDaQxKCukMKXagUh","--dependency=pretty-simple=pretty-simple-4.0.0.0-KQSse8zOzjN7BoDiYtj29L","--dependency=profunctors=profunctors-5.6.2-ENzwg0liCYjBWiMoIO8XFj","--dependency=record-dot-preprocessor=record-dot-preprocessor-0.2.14-EtqE4NnXTSX4vjUoXIgT8","--dependency=record-hasfield=record-hasfield-1.0-4LYHIn3Ao3w2P2wnBlk2Gk","--dependency=reflection=reflection-2.1.6-KXta4tOu4EpKOtzHOC6CXA","--dependency=vector=vector-0.12.3.1-2QhxFayEJrmJ3PNYTgAmQ3","--exact-configuration","--ghc-option=-fhide-source-paths"] Nothing [])]
2023-05-22T20:07:31.773012Z | Debug | 
2023-05-22T20:07:31.773075Z | Debug | Warning: Build failed, but trying to launch GHCi anyway
2023-05-22T20:07:31.946508Z | Debug | Configuring GHCi with the following packages: snip
2023-05-22T20:07:32.005788Z | Debug | executing command: stack path --ghc-package-path
2023-05-22T20:07:32.608766Z | Debug | /home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb:/home/artur/.stack/snapshots/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb:/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/lib/ghc-8.10.7/package.conf.d
2023-05-22T20:07:32.621377Z | Debug | executing command: stack setup --silent
2023-05-22T20:07:33.456596Z | Debug | executing command: stack exec ghc -- --print-libdir
2023-05-22T20:07:33.845462Z | Debug | Session loading result: Right (ComponentOptions {componentOptions = ["-i","-odir=/home/artur/projects/snip/.stack-work/odir","-hidir=/home/artur/projects/snip/.stack-work/odir","-hide-all-packages","-XImportQualifiedPost","-XTypeOperators","-XExplicitForAllx","-XScopedTypeVariables","-XStandaloneDeriving","-XDuplicateRecordFields","-XTypeApplications","-XFlexibleContexts","-XDataKinds","-XMultiParamTypeClasses","-XTypeSynonymInstances","-XFlexibleInstances","-XUndecidableInstances","-XGADTs","-XTypeFamilies","-i/home/artur/projects/snip/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build","-i/home/artur/projects/snip/src","-i/home/artur/projects/snip/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build/autogen","-i/home/artur/projects/snip/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build/global-autogen","-stubdir=/home/artur/projects/snip/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build","-package-id=base-4.14.3.0","-package-id=foldl-1.4.12-9OdO1lF89pcCBorCxCaNiN","-package-id=large-anon-0.2-A4TQ9LPDaQxKCukMKXagUh","-package-id=pretty-simple-4.0.0.0-KQSse8zOzjN7BoDiYtj29L","-package-id=profunctors-5.6.2-ENzwg0liCYjBWiMoIO8XFj","-package-id=record-dot-preprocessor-0.2.14-EtqE4NnXTSX4vjUoXIgT8","-package-id=record-hasfield-1.0-4LYHIn3Ao3w2P2wnBlk2Gk","-package-id=reflection-2.1.6-KXta4tOu4EpKOtzHOC6CXA","-package-id=vector-0.12.3.1-2QhxFayEJrmJ3PNYTgAmQ3","-fplugin=RecordDotPreprocessor","-fplugin=Data.Record.Anon.Plugin","-Wall","-Wcompat","-Widentities","-Wincomplete-record-updates","-Wincomplete-uni-patterns","-Wmissing-home-modules","-Wpartial-fields","-Wredundant-constraints","-optP-include","-optP/home/artur/projects/snip/.stack-work/ghci/e2e12240/cabal_macros.h","-ghci-script=/tmp/haskell-stack-ghci/4893bf4d/ghci-script","-package-db","/home/artur/projects/snip/.stack-work/install/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb","-package-db","/home/artur/.stack/snapshots/x86_64-linux-tinfo6/ab32d9afcd1566a0d8296ab062d47592fbb35d2a182755bbe749ec5b66e4260e/8.10.7/pkgdb","-package-db","/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/lib/ghc-8.10.7/package.conf.d"], componentRoot = "/home/artur/projects/snip", componentDependencies = ["snip.cabal","package.yaml","stack.yaml"]},"/home/artur/.stack/programs/x86_64-linux/ghc-tinfo6-8.10.7/lib/ghc-8.10.7")
2023-05-22T20:07:33.891781Z | Info | updateFileDiagnostics published different from new diagnostics - file diagnostics: File:     /home/artur/projects/snip/src/Empty.hs
Hidden:   no
Range:    1:1-2:1
Source:   compiler
Severity: DsError
Message:  target ‘-XExplicitForAllx’ is not a module name or a source file
2023-05-22T20:07:33.892304Z | Debug | Finished: User TypeCheck Took: 3.32s
2023-05-22T20:07:33.892590Z | Debug | Finished: GetHie Took: 0.00s
2023-05-22T20:07:33.892902Z | Debug | Finished: GenerateCore Took: 0.00s
Files that failed:
 * /home/artur/projects/snip/src/Empty.hs

Completed (0 files worked, 1 file failed)