<commit_before>homepage: http://goto.ucsd.edu/liquidhaskell
changelog-type: markdown
hash: 488853bea9fd308e75a25d55730aa68a932ea5b4cda1b2952b7b0e9cd490db37
test-bench-deps:
  stm: ! '>=2.4'
  base: ==4.*
  text: -any
  filepath: ! '>=1.3'
  process: ! '>=1.2'
  parsec: -any
  tagged: ! '>=0.7.3'
  containers: ! '>=0.5'
  mtl: ! '>=2.1'
  tasty-hunit: ! '>=0.9'
  liquidhaskell: -any
  tasty-rerun: ! '>=1.1'
  transformers: ! '>=0.3'
  optparse-applicative: ! '>=0.11 && <=0.12.1.0'
  tasty: ! '>=0.10'
  tasty-ant-xml: -any
  directory: ! '>=1.2'
maintainer: <NAME> <<EMAIL>>
synopsis: Liquid Types for Haskell
changelog: ! "# Changes\n\n## NEXT\n\n- **breaking change** Remove the `Bool` vs.
  `Prop` distinction. This means that: \n\n    * signatures that use(d) `Prop` as
  a type, e.g. \n      `foo :: Int -> Prop` should just be `foo :: Int -> Bool`.\n\n
  \   * refinements that use(d) `Prop v` e.g. \n      `isNull :: xs:[a] -> {v:Bool
  | Prop v <=> len xs > 0}`\n      should just be `isNull :: xs:[a] -> {v:Bool | v
  <=> len xs > 0}`.\n\n- Add `--eliminate={none, some, all}`. Here\n  * `none` means
  don't use eliminate at all, use qualifiers everywhere (old-style)\n  * `some` which
  is the **DEFAULT**  -- means eliminate all the **non-cut** variables\n  * `all`
  \ means eliminate where you can, and solve *cut* variables to `True`.\n\n- Change
  `--higherorder` so that it uses *only* the qualifiers obtained from\n  type aliases
  (e.g. `type Nat = {v:Int | ... }`) and nothing else. This\n  requires `eliminate=some`.\n\n-
  Add a `--json` flag that runs in quiet mode where all output is\n  suppressed and
  only the list of errors is returned as a JSON object to be\n  consumed by an editor.\n\n-
  Add `--checks` flag (formerly `--binders`), which checks a given binder's\n  definition,
  assuming specified types for all callees (but inferring types for\n  callees without
  signatures.)\n\n- Add `--time-binds` which is like the above, but checks all binders
  in a module\n  and prints out time taken for each.\n\n## 0.5.0.1\n\n- Fixed a bug
  in the specification for `Data.Traversable.sequence`\n- Make interpreted mul and
  div the default, when `solver = z3`\n- Use `--higherorder` to allow higher order
  binders into the fixpoint environment \n\n## 0.5.0.0\n\n- Added support for building
  with `stack`\n\n- Added support for GHC 7.10 (in addition to 7.8)\n\n- Added '--cabaldir'
  option that will automatically find a .cabal file in the ancestor\n  path from which
  the target file belongs, and then add the relevant source and dependencies\n  to
  the paths searched for by LiquidHaskell.\n\n  This means we don't have to manually
  do `-i src` etc. when checking large projects,\n  which can be tedious e.g. within
  emacs.\n\n\n## 0.4.0.0\n\n- Bounds as an alternative for logical constraints see
  `benchmarks/icfp15/pos/Overview.lhs`\n\n## 0.3.0.0\n\n- Logical constraints: add
  extra subtyping constraints to signatures, e.g.\n\n    {-@ \n    (.) :: forall <p
  :: b -> c -> Prop, q :: a -> b -> Prop, r :: a -> c -> Prop>. \n           {x::a,
  w::b<q x> |- c<p w> <: c<r x>}\n           (y:b -> c<p y>)\n        -> (z:a -> b<q
  z>)\n        ->  x:a -> c<r x>\n    @-}\n    (.) f g x = f (g x)\n\n- Inlining haskell
  functions as predicates and expressions, e.g.\n\n    {-@ inline max @-}\n    max
  x y = if x >= y then x else y\n\n- Refining class instances. For example\n\n    {-@
  instance Compare Int where\n        cmax :: Odd -> Odd -> Odd @-}\n\n- Major restructuring
  of internal APIs\n\n## 0.2.1.0\n- Experimental support for lifting haskell functions
  to measures\nIf you annotate a Haskell function `foo` with {-@ measure foo @-},
  LiquidHaskell will attempt to derive an equivalent measure from `foo`'s definition.
  This should help eliminate some boilerplate measures that used to be required.\n\n##
  0.2.0.0\n\n- Move to GHC-7.8.3\nLiquidHaskell now *requires* ghc-7.8.3.\n\n- Termination\nLiquidHaskell
  will now attempt to prove all recursive functions terminating. It tries to prove
  that some parameter (or combination thereof) decreases at each recursive callsite.
  By default, this will be the first parameter with an associated size measure (see
  Size Measures), but can be overridden with the `Decreases` annotation or a termination
  expression (see Termination Expressions). \n\nIf proving termination is too big
  of burden, it can be disabled on a per-module basis with the `--no-termination`
  flag, or on a per-function basis with the `Lazy` annotation.\n\n- Size Measures\nData
  declarations now optionally take a *size measure*, which LiquidHaskell will use
  to prove termination of recursive functions. The syntax is:\n\n    {-@ data List
  a [len] = Nil | Cons a (List a) @-}\n\n- Termination Expressions\nTermination Expressions
  can be used to specify the decreasing metric of a recursive function. They can be
  any valid LiquidHaskell expression and must be placed after the function's LiquidHaskell
  type, e.g.\n\n    {-@ map :: (a -> b) -> xs:[a] -> [a] / [len xs] @-}\n\n- Type
  Holes\nTo reduce the annotation burden, LiquidHaskell now accepts `_` as a placeholder
  for types and refinements. It can take the place of any base Haskell type and LiquidHaskell
  will query GHC to fill in the blanks, or it can take the place of a refinement predicate,
  in which case LiquidHaskell will infer an appropriate refinement. For example,\n\n
  \   {-@ add :: x:_ -> y:_ -> {v:_ | v = x + y} @-}\n    add x y = x + y\n\nbecomes\n\n
  \   {-@ add :: Num a => x:a -> y:a -> {v:a | v = x + y} @-}\n    add x y = x + y\n\n-
  Assumed Specifications\nThe `assume` annotation now works as you might expect it
  to, i.e. LiquidHaskell will *not* verify that the implementation is correct. Furthermore,
  `assume` can be used to locally override the type of an imported function.\n\n-
  Derived Measure Selectors\nGiven a data definition\n\n    {-@ data Foo = Foo { bar
  :: Int, baz :: Bool } @-}\n\nLiquidHaskell will automatically derive measures\n\n
  \   {-@ measure bar :: Foo -> Int @-}\n    {-@ measure baz :: Foo -> Bool @-}\n\n-
  Type-Class Specifications\nLiquidHaskell can now verify prove that type-class instances
  satisfy a specification. Simply use the new `class` annotation\n\n    {-@ class
  Num a where\n          (+) :: x:a -> y:a -> {v:a | v = x + y}\n          (-) ::
  x:a -> y:a -> {v:a | v = x - y}\n          ...\n      @-}\n\nand LiquidHaskell will
  attempt to prove at each instance declaration that the implementations satisfy the
  class specification.\n\nWhen defining type-class specifications you may find the
  need to use overloaded measures, to allow for type-specific definitions (see Type-Indexed
  Measures).\n\n- Type-Indexed Measures\nLiquidHaskell now accepts measures with *type-specific*
  definitions, e.g. a measure to describe the size of a value. Such measures are defined
  using the `class measure` syntax\n\n    {-@ class measure size :: forall a. a ->
  Int @-}\n\nand instances can be defined using the `instance measure` syntax, which
  mirrors the regular measure syntax\n\n    {-@ instance measure size :: [a] -> Int\n
  \       size ([])   = 0\n        size (x:xs) = 1 + size xs\n      @-}\n    {-@ instance
  measure size :: Tree a -> Int\n        size (Leaf)       = 0\n        size (Node
  l x r) = 1 + size l + size r\n      @-}\n\n- Parsing\nWe have greatly improved our
  parser to require fewer parentheses! Yay!\n\n- Emacs/Vim Support\nLiquidHaskell
  now comes with syntax checkers for [flycheck](https://github.com/flycheck/flycheck)
  in Emacs and [syntastic](https://github.com/scrooloose/syntastic) in Vim. \n\n-
  Incremental Checking\nLiquidHaskell has a new `--diffcheck` flag that will only
  check binders that have changed since the last run, which can drastically improve
  verification times.\n\n- Experimental Support for Z3's theory of real numbers with
  the `--real` flag.\n"
basic-deps:
  exceptions: ! '>=0.6'
  cereal: -any
  located-base: -any
  ghc: ! '>=7.10.2 && <7.11'
  liquiddesugar: ! '>=7.10 && <7.11'
  bytestring: ! '>=0.10'
  fingertree: ! '>=0.1'
  Cabal: ! '>=1.18'
  base: ==4.*
  time: ! '>=1.4'
  Diff: ! '>=0.3'
  unordered-containers: ! '>=0.2'
  text: ! '>=1.2'
  syb: ! '>=0.4.4'
  hint: -any
  hpc: ! '>=0.6'
  filepath: ! '>=1.3'
  process: ! '>=1.2'
  parsec: ! '>=3.1'
  data-default: ! '>=0.5'
  array: ! '>=0.5'
  containers: ! '>=0.5'
  ghc-paths: ! '>=0.1'
  bifunctors: ! '>=5.1'
  binary: -any
  ghc-prim: -any
  liquid-fixpoint: ! '>=0.6'
  mtl: ! '>=2.1'
  cmdargs: ! '>=0.10'
  hashable: ! '>=1.2'
  liquidhaskell: -any
  transformers: ! '>=0.3'
  temporary: ! '>=1.2'
  text-format: -any
  deepseq: ! '>=1.3'
  hscolour: ! '>=1.22'
  QuickCheck: ! '>=2.7'
  th-lift: -any
  pretty: ! '>=1.1'
  aeson: ! '>=0.10 && <1.0'
  template-haskell: ! '>=2.9'
  vector: ! '>=0.10'
  directory: ! '>=1.2'
all-versions:
- '0.1'
- '0.2.0.0'
- '0.2.1.0'
- '0.3.0.0'
- '0.3.1.0'
- '0.4.0.0'
- '0.4.0.1'
- '0.4.1.0'
- '0.4.1.1'
- '0.5.0.0'
- '0.5.0.1'
- '0.6.0.0'
- '0.7.0.0'
author: <NAME>, <NAME>, <NAME>
latest: '0.7.0.0'
description-type: markdown
description: ! "![LiquidHaskell](/resources/logo.png)\n\n\n[![Hackage](https://img.shields.io/hackage/v/liquidhaskell.svg)](https://hackage.haskell.org/package/liquidhaskell)
  [![Hackage-Deps](https://img.shields.io/hackage-deps/v/liquidhaskell.svg)](http://packdeps.haskellers.com/feed?needle=liquidhaskell)
  [![Build Status](https://img.shields.io/circleci/project/ucsd-progsys/liquidhaskell/master.svg)](https://circleci.com/gh/ucsd-progsys/liquidhaskell)\n\nMain
  Web site\n-------------\n\nThe UCSD web site for liquid haskell is [here](https://ucsd-progsys.github.io/liquidhaskell-blog/)\n\nExamples\n--------\n\nJump
  to examples here [TODO]\n\n\n\nContributing Guide\n------------------\n\nPlease
  see the [contributing guide](CONTRIBUTING.md)\n\nRequirements\n------------\n\nLiquidHaskell
  requires (in addition to the cabal dependencies)\n\n- SMTLIB2 compatible solver\n\nHow
  To Clone, Build and Install\n-------------------------------\n\nSee [install instructions](INSTALL.md)\n\nHow
  To Run\n----------\n\nTo verify a file called `foo.hs` at type\n\n    $ liquid foo.hs\n\nHow
  to Run inside GHCi\n----------------------\n\nTo run inside `ghci` e.g. when developing
  do:\n\n    $ stack ghci liquidhaskell\n    ghci> :m +Language.Haskell.Liquid.Liquid\n
  \   ghci> liquid [\"tests/pos/Abs.hs\"]\n\nHow To Run Regression Tests\n---------------------------\n\n
  \   $ stack test\n\nTo use threads to speed up the tests\n\n    $ make THREADS=30
  test\n\nOr your favorite number of threads, depending on cores etc.\n\nYou can directly
  extend and run the tests by modifying\n\n    tests/test.hs\n\nTo run the regression<commit_msg>Update from Hackage at 2017-05-02T18:55:07Z<commit_after>homepage: https://github.com/ucsd-progsys/liquidhaskell
changelog-type: markdown
hash: 286f8fee1323c3d67ff7069ea92222baf6c7ec004e9ab5730526547e392c57ca
test-bench-deps:
  stm: ! '>=2.4'
  base: ! '>=4.8.1.0 && <5'
  text: -any
  syb: -any
  filepath: ! '>=1.3'
  process: ! '>=1.2'
  parsec: -any
  tagged: ! '>=0.7.3'
  containers: ! '>=0.5'
  liquid-fixpoint: ! '>=0.6'
  mtl: ! '>=2.1'
  tasty-hunit: ! '>=0.9'
  liquidhaskell: -any
  tasty-rerun: ! '>=1.1'
  transformers: ! '>=0.3'
  optparse-applicative: ! '>=0.11'
  tasty: ! '>=0.10'
  tasty-ant-xml: -any
  directory: ! '>=1.2'
maintainer: <NAME> <<EMAIL>>
synopsis: Liquid Types for Haskell
changelog: ! "# Changes\n\n## NEXT\n\n- **breaking change** Remove the `Bool` vs.
  `Prop` distinction. This means that: \n\n    * signatures that use(d) `Prop` as
  a type, e.g. \n      `foo :: Int -> Prop` should just be `foo :: Int -> Bool`.\n\n
  \   * refinements that use(d) `Prop v` e.g. \n      `isNull :: xs:[a] -> {v:Bool
  | Prop v <=> len xs > 0}`\n      should just be `isNull :: xs:[a] -> {v:Bool | v
  <=> len xs > 0}`.\n\n- Add `--eliminate={none, some, all}`. Here\n  * `none` means
  don't use eliminate at all, use qualifiers everywhere (old-style)\n  * `some` which
  is the **DEFAULT**  -- means eliminate all the **non-cut** variables\n  * `all`
  \ means eliminate where you can, and solve *cut* variables to `True`.\n\n- Change
  `--higherorder` so that it uses *only* the qualifiers obtained from\n  type aliases
  (e.g. `type Nat = {v:Int | ... }`) and nothing else. This\n  requires `eliminate=some`.\n\n-
  Add a `--json` flag that runs in quiet mode where all output is\n  suppressed and
  only the list of errors is returned as a JSON object to be\n  consumed by an editor.\n\n-
  Add `--checks` flag (formerly `--binders`), which checks a given binder's\n  definition,
  assuming specified types for all callees (but inferring types for\n  callees without
  signatures.)\n\n- Add `--time-binds` which is like the above, but checks all binders
  in a module\n  and prints out time taken for each.\n\n## 0.5.0.1\n\n- Fixed a bug
  in the specification for `Data.Traversable.sequence`\n- Make interpreted mul and
  div the default, when `solver = z3`\n- Use `--higherorder` to allow higher order
  binders into the fixpoint environment \n\n## 0.5.0.0\n\n- Added support for building
  with `stack`\n\n- Added support for GHC 7.10 (in addition to 7.8)\n\n- Added '--cabaldir'
  option that will automatically find a .cabal file in the ancestor\n  path from which
  the target file belongs, and then add the relevant source and dependencies\n  to
  the paths searched for by LiquidHaskell.\n\n  This means we don't have to manually
  do `-i src` etc. when checking large projects,\n  which can be tedious e.g. within
  emacs.\n\n\n## 0.4.0.0\n\n- Bounds as an alternative for logical constraints see
  `benchmarks/icfp15/pos/Overview.lhs`\n\n## 0.3.0.0\n\n- Logical constraints: add
  extra subtyping constraints to signatures, e.g.\n\n    {-@ \n    (.) :: forall <p
  :: b -> c -> Prop, q :: a -> b -> Prop, r :: a -> c -> Prop>. \n           {x::a,
  w::b<q x> |- c<p w> <: c<r x>}\n           (y:b -> c<p y>)\n        -> (z:a -> b<q
  z>)\n        ->  x:a -> c<r x>\n    @-}\n    (.) f g x = f (g x)\n\n- Inlining haskell
  functions as predicates and expressions, e.g.\n\n    {-@ inline max @-}\n    max
  x y = if x >= y then x else y\n\n- Refining class instances. For example\n\n    {-@
  instance Compare Int where\n        cmax :: Odd -> Odd -> Odd @-}\n\n- Major restructuring
  of internal APIs\n\n## 0.2.1.0\n- Experimental support for lifting haskell functions
  to measures\nIf you annotate a Haskell function `foo` with {-@ measure foo @-},
  LiquidHaskell will attempt to derive an equivalent measure from `foo`'s definition.
  This should help eliminate some boilerplate measures that used to be required.\n\n##
  0.2.0.0\n\n- Move to GHC-7.8.3\nLiquidHaskell now *requires* ghc-7.8.3.\n\n- Termination\nLiquidHaskell
  will now attempt to prove all recursive functions terminating. It tries to prove
  that some parameter (or combination thereof) decreases at each recursive callsite.
  By default, this will be the first parameter with an associated size measure (see
  Size Measures), but can be overridden with the `Decreases` annotation or a termination
  expression (see Termination Expressions). \n\nIf proving termination is too big
  of burden, it can be disabled on a per-module basis with the `--no-termination`
  flag, or on a per-function basis with the `Lazy` annotation.\n\n- Size Measures\nData
  declarations now optionally take a *size measure*, which LiquidHaskell will use
  to prove termination of recursive functions. The syntax is:\n\n    {-@ data List
  a [len] = Nil | Cons a (List a) @-}\n\n- Termination Expressions\nTermination Expressions
  can be used to specify the decreasing metric of a recursive function. They can be
  any valid LiquidHaskell expression and must be placed after the function's LiquidHaskell
  type, e.g.\n\n    {-@ map :: (a -> b) -> xs:[a] -> [a] / [len xs] @-}\n\n- Type
  Holes\nTo reduce the annotation burden, LiquidHaskell now accepts `_` as a placeholder
  for types and refinements. It can take the place of any base Haskell type and LiquidHaskell
  will query GHC to fill in the blanks, or it can take the place of a refinement predicate,
  in which case LiquidHaskell will infer an appropriate refinement. For example,\n\n
  \   {-@ add :: x:_ -> y:_ -> {v:_ | v = x + y} @-}\n    add x y = x + y\n\nbecomes\n\n
  \   {-@ add :: Num a => x:a -> y:a -> {v:a | v = x + y} @-}\n    add x y = x + y\n\n-
  Assumed Specifications\nThe `assume` annotation now works as you might expect it
  to, i.e. LiquidHaskell will *not* verify that the implementation is correct. Furthermore,
  `assume` can be used to locally override the type of an imported function.\n\n-
  Derived Measure Selectors\nGiven a data definition\n\n    {-@ data Foo = Foo { bar
  :: Int, baz :: Bool } @-}\n\nLiquidHaskell will automatically derive measures\n\n
  \   {-@ measure bar :: Foo -> Int @-}\n    {-@ measure baz :: Foo -> Bool @-}\n\n-
  Type-Class Specifications\nLiquidHaskell can now verify prove that type-class instances
  satisfy a specification. Simply use the new `class` annotation\n\n    {-@ class
  Num a where\n          (+) :: x:a -> y:a -> {v:a | v = x + y}\n          (-) ::
  x:a -> y:a -> {v:a | v = x - y}\n          ...\n      @-}\n\nand LiquidHaskell will
  attempt to prove at each instance declaration that the implementations satisfy the
  class specification.\n\nWhen defining type-class specifications you may find the
  need to use overloaded measures, to allow for type-specific definitions (see Type-Indexed
  Measures).\n\n- Type-Indexed Measures\nLiquidHaskell now accepts measures with *type-specific*
  definitions, e.g. a measure to describe the size of a value. Such measures are defined
  using the `class measure` syntax\n\n    {-@ class measure size :: forall a. a ->
  Int @-}\n\nand instances can be defined using the `instance measure` syntax, which
  mirrors the regular measure syntax\n\n    {-@ instance measure size :: [a] -> Int\n
  \       size ([])   = 0\n        size (x:xs) = 1 + size xs\n      @-}\n    {-@ instance
  measure size :: Tree a -> Int\n        size (Leaf)       = 0\n        size (Node
  l x r) = 1 + size l + size r\n      @-}\n\n- Parsing\nWe have greatly improved our
  parser to require fewer parentheses! Yay!\n\n- Emacs/Vim Support\nLiquidHaskell
  now comes with syntax checkers for [flycheck](https://github.com/flycheck/flycheck)
  in Emacs and [syntastic](https://github.com/scrooloose/syntastic) in Vim. \n\n-
  Incremental Checking\nLiquidHaskell has a new `--diffcheck` flag that will only
  check binders that have changed since the last run, which can drastically improve
  verification times.\n\n- Experimental Support for Z3's theory of real numbers with
  the `--real` flag.\n"
basic-deps:
  exceptions: ! '>=0.6'
  cereal: -any
  located-base: -any
  ghc: ==8.0.2
  bytestring: ! '>=0.10'
  fingertree: ! '>=0.1'
  Cabal: ! '>=1.18'
  base: ! '>=4.8.1.0 && <5'
  time: ! '>=1.4'
  Diff: ! '>=0.3'
  unordered-containers: ! '>=0.2'
  text: ! '>=1.2'
  syb: ! '>=0.4.4'
  hint: -any
  hpc: ! '>=0.6'
  filepath: ! '>=1.3'
  process: ! '>=1.2'
  parsec: ! '>=3.1'
  data-default: ! '>=0.5'
  array: ! '>=0.5'
  containers: ! '>=0.5'
  ghc-paths: ! '>=0.1'
  bifunctors: ! '>=5.1'
  ghc-boot: ==8.0.2
  binary: -any
  ghc-prim: -any
  liquid-fixpoint: ! '>=0.6'
  mtl: ! '>=2.1'
  cmdargs: ! '>=0.10'
  hashable: ! '>=1.2'
  liquidhaskell: -any
  transformers: ! '>=0.3'
  temporary: ! '>=1.2'
  text-format: -any
  deepseq: ! '>=1.3'
  hscolour: ! '>=1.22'
  QuickCheck: ! '>=2.7'
  th-lift: -any
  pretty: ! '>=1.1'
  aeson: ! '>=0.10 && <1.0'
  template-haskell: ! '>=2.9'
  vector: ! '>=0.10'
  directory: ! '>=1.2'
all-versions:
- '0.1'
- '0.2.0.0'
- '0.2.1.0'
- '0.3.0.0'
- '0.3.1.0'
- '0.4.0.0'
- '0.4.0.1'
- '0.4.1.0'
- '0.4.1.1'
- '0.5.0.0'
- '0.5.0.1'
- '0.6.0.0'
- '0.7.0.0'
- '0.8.0.0'
author: <NAME>, <NAME>, <NAME>
latest: '0.8.0.0'
description-type: markdown
description: ! "![LiquidHaskell](/resources/logo.png)\n\n\n[![Hackage](https://img.shields.io/hackage/v/liquidhaskell.svg)](https://hackage.haskell.org/package/liquidhaskell)
  [![Hackage-Deps](https://img.shields.io/hackage-deps/v/liquidhaskell.svg)](http://packdeps.haskellers.com/feed?needle=liquidhaskell)
  [![Build Status](https://img.shields.io/circleci/project/ucsd-progsys/liquidhaskell/master.svg)](https://circleci.com/gh/ucsd-progsys/liquidhaskell)\n\nMain
  Web site\n-------------\n\nThe UCSD web site for liquid haskell is [here](https://ucsd-progsys.github.io/liquidhaskell-blog/)\n\nExamples\n--------\n\nJump
  to examples here [TODO]\n\n\n\nContributing Guide\n------------------\n\nPlease
  see the [contributing guide](CONTRIBUTING.md)\n\nRequirements\n------------\n\nLiquidHaskell
  requires (in addition to the cabal dependencies)\n\n- SMTLIB2 compatible solver\n\nHow
  To Clone, Build and Install\n-------------------------------\n\nSee [install instructions](INSTALL.md)\n\nHow
  To Run\n----------\n\nTo verify a file called `foo.hs` at type\n\n    $ liquid foo.hs\n\nHow
  to Run inside GHCi\n----------------------\n\nTo run inside `ghci` e.g. when developing
  do:\n\n    $ stack ghci liquidhaskell\n    ghci> :m +Language.Haskell.Liquid.Liquid\n
  \   ghci> liquid [\"tests/pos/Abs.hs\"]\n\nHow To Run Regression Tests\n---------------------------\n\n
  \   $ stack test\n\nTo use threads to speed up the tests\n\n    $ make THREADS=30
  test\n\nOr your favorite number of threads, depending on cores etc.\n\nYou can directly
  extend and run the tests by modifying\n\n    tests/test.hs\n\nTo run the regression
{'fraction_non_alphanumeric': 0.1655216930241136, 'fraction_numerical': 0.02489741343538199, 'mean_word_length': 2.793947874759489, 'pattern_counts': {'":': 0, '<': 42, '<?xml version=': 0, '>': 204, 'https://': 17, 'lorem ipsum': 0, 'www.': 0, 'xml': 2}, 'pii_count': 42, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '220129', 'n_tokens_mistral': 8391, 'n_tokens_neox': 7897, 'n_words': 2495}