All Versions
Latest Version
Avg Release Cycle
358 days
Latest Release
1506 days ago

Changelog History
Page 1

  • v8.6.5-final Changes

    June 03, 2020

    This is the last version before_ moving to the plugin architecture + GHC 8.10 as described here


  • v8.4.3-final Changes

    March 19, 2019

    Final version built with GHC 8.4.3

  • v8.2.1-final Changes

    March 19, 2019


  • v0.8.10.1 Changes

    August 06, 2020

    ๐Ÿš€ This is the first release of LiquidHaskell as a GHC Plugin, compatible with GHC 8.10.

  • v0.8.6.0 Changes

    • Automatically check (transitive) dependencies
    • Built with GHC 8.6.4
    • 0๏ธโƒฃ Structural termination checker (on by default)
    • ๐Ÿ‘Œ Support for specifying class-laws and that they hold on instances
    • ๐Ÿ› Bug fixes for PLE
    • Need to run LH on imported libs (with source) first; can use --compile-spec to avoid checking.
  • v0.8.4.0 Changes

    • ๐Ÿ‘Œ Support for GHC 8.4.3
    • Significant restructuring of Bare front-end to shrink dependency on GHC-API
  • v0.8.2.2 Changes

    December 28, 2017
    • ๐Ÿ‘Œ Support for GHC 8.2.2

    • ๐Ÿ‘Œ Support for GADTs and TypeFamilies, see

      • tests/{pos,neg}/ExactGADT*.hs
    • โž• Add support for Bags/Multisets, see

      • tests/pos/bag.hs
      • tests/neg/bag.hs
      • tests/pos/ListISort-bag.hs
    • Add support for inductive predicates see

      • tests/pos/IndEven.hs
      • tests/pos/IndPerm.hs
      • tests/pos/IndStar.hs
  • v0.8.0.1 Changes

    July 20, 2017
    • ๐Ÿ‘Œ Support for GHC 8.0.2
  • v0.7.0.1 Changes

    • โœ‚ DELETED the gsDcons and generally carrying DataConP beyond Bare; this may cause problems with target as I removed the dconEnv field in TargetState. Is it live? To restore: have to apply the substitution syms/su in Bare.hs ALSO to gsDconsP (after restoring the gsDconsP field to [(DataCon, DataConP)])

    • ๐Ÿ’ฅ breaking change Remove the Bool vs. Prop distinction. This means that:

      • signatures that use(d) Prop as a type, e.g. foo :: Int -> Prop should just be foo :: Int -> Bool.
      • refinements that use(d) Prop v e.g. isNull :: xs:[a] -> {v:Bool | Prop v <=> len xs > 0} should just be isNull :: xs:[a] -> {v:Bool | v <=> len xs > 0}.
    • โž• Add --eliminate={none, some, all}. Here

      • none means don't use eliminate at all, use qualifiers everywhere (old-style)
      • some which is the DEFAULT -- means eliminate all the non-cut variables
      • all means eliminate where you can, and solve cut variables to True.
    • Change --higherorder so that it uses only the qualifiers obtained from type aliases (e.g. type Nat = {v:Int | ... }) and nothing else. This requires eliminate=some.

    • โž• Add a --json flag that runs in quiet mode where all output is suppressed and only the list of errors is returned as a JSON object to be consumed by an editor.

    • โž• Add --checks flag (formerly --binders), which checks a given binder's definition, assuming specified types for all callees (but inferring types for callees without signatures.)

    • โž• Add --time-binds which is like the above, but checks all binders in a module and prints out time taken for each.

  • v0.6.0.1

    July 20, 2017