35
votes

Is there a way, either standard, or a clever hack, to make invoking GHC on a file only run the type-checker? E.g.

$ ghc --just-check-the-types x.hs
$

No output files, no .hi or .o, etc. Don't want to/can't use the GHC API. Just talking about the command-line program, here.

2
Why not use the GHC API? This sounds like the sort of thing it's for.C. A. McCann
@C.A.McCann Having it as a dependency increases linking time and executable size by a lot. And I've had a lot of issues with it, see these odd error messages (that don't appear when the executable is called) hpaste.org/74600Adam Bergmark

2 Answers

42
votes

What about ghc -fno-code file.hs. It will generate no other files and will show errors if your files don't typecheck.

Caveat: this will not do analysis on in-exhaustive pattern matches, so if you want those additional useful warnings, don't use this option alone.

11
votes

Here's a hack:

crabgrass:~/programming% ghc test.hs -e 'return 0'

test.hs:1:7:
    No instance for (Num (a0 -> t0))
      arising from the literal `3'
    Possible fix: add an instance declaration for (Num (a0 -> t0))
    In the expression: 3
    In the expression: 3 4
    In an equation for `foo': foo = 3 4
zsh: exit 1     ghc test.hs -e 'return 0'