happy

Happy is a parser generator for Haskell

https://www.haskell.org/happy/

Version on this page:1.20.1.1
LTS Haskell 23.0:2.0.2
Stackage Nightly 2024-12-13:2.1.3
Latest on Hackage:2.1.3

See all snapshots happy appears in

BSD-2-Clause licensed by Andy Gill and Simon Marlow
Maintained by https://github.com/haskell/happy
This version can be pinned in stack with:happy-1.20.1.1@sha256:a381633c5e8f9e9e5a8e1900930ce13172397b4677fcfcc08cd38eb3f73b61b1,5811

Module documentation for 1.20.1.1

There are no documented modules for this package.

Depends on 4 packages(full list with versions):

Happy is a parser generator for Haskell. Given a grammar specification in BNF, Happy generates Haskell code to parse the grammar. Happy works in a similar way to the yacc tool for C.

Changes

Revision history for Happy

1.20.1

  • Fix for building with mtl-2.3.1 (GHC 9.6)

1.20.0

  • Fix #121: the -i flag produces an .info file even if the %expect pragma is violated
  • Fix #131: qualify uses of Prelude functions in generated code
  • Fix #161: drop fewer parse items when generating an .info file
  • Introduce the %shift directive to resolve shift/reduce conflicts explicitly, useful in conjunction with %expect 0
  • Remove the deprecated build configuration flag small_base

1.19.12

  • Fix for building with GHC 8.8.x
  • Move custom Setup preprocessing steps into a separate executable, like Alex

1.19.11

  • Fix for building with GHC 8.6.x

1.19.10

  • Fix polymorphic (rank-n) non-terminals
  • Fix for GHC 8.8.1

1.19.9

  • Fix cabal warnings
  • Bump upper bounds
  • Fix build with GHC 8.4.1-alpha

1.19.8

  • Fix issue #94 (some grammars don’t compile due to new type signatures introduced to allow overloading to be used)

1.19.7

  • Fix missing test suite files in the sdist

1.19.6

  • Manually generate Parser.hs using Makefile before sdist, to fix bootstrapping problems with cabal sandboxes & new-build
  • Documentation fixes
  • Fixed GLR support
  • New option -p/--pretty prints the grammar rules (only) to a file
  • Added generation of additional type signatures to enable use of typeclasses in monadic parsers.

1.19.5

1.19.4

  • Fix for GHC 7.10 (Applicative/Monad, #19, #21)

1.19.3

  • Fix for GHC 7.2 (#16)

1.19.2

  • Fixes for clang (XCode 5)

1.19.1

  • Repackaged to build with GHC 7.7+

1.19

  • Necessary changes to work with GHC 7.8

1.18.10

  • Fix build with GHC 7.6

1.18.8

  • Fix a packaging bug (cabal-install-0.10.2 didn’t put the Happy-generated files in the sdist)

1.18.7

  • Fix a bug in error handling when using %monad without %lexer

1.18.5 — 17 Jun 2010

1.18.4 — 23 April 2009

1.18.2 — 5 November 2008

1.18.1 — 14 October 2008

1.18 — 13 October 2008

  • New feature: EBNF-style paramterized macros, thanks to Iavor Diatchki.
  • Works with Cabal 1.2, 1.4 and 1.6
  • A few minor bugfixes

1.17 — 22 October 2007

  • Cabal 1.2 is required
  • Works with upcoming GHC 6.8.1
  • Fix the parE bug (poor error message for errors in the grammar)
  • Some performance improvements to Happy itself

1.16 — 8 January 2007

  • Switch to a Cabal build system: you need a recent version of Cabal (1.1.6 or later). If you have GHC 6.4.2, then you need to upgrade Cabal before building Happy. GHC 6.6 is fine.

  • New %error directive

  • New production forms: {%% .. } and {%^ .. }

  • Added Attribute Grammar support, by Robert Dockins

1.15 — 14 January 2005

  • New %expect directive
  • The list of tokens passed to happyError now includes the current token (not %lexer).
  • Added support for ambiguous grammars via Generalized LR parsing
  • Added %partial to indicate a parser that can return a result before EOF is reached.

1.14 — 14 April 2004

  • New meta-variable $> represents the rightmost token.

  • Happy’s OPTIONS pragma is merged with an existing one in the grammar file, if any.

1.13 — 19 June 2002

  • Support for newer versions of GHC (>= 5.04).

  • Addition of an experimental flag: --strict.

1.11 — 25 September 2001

  • Tokens no longer have a default precedence — if you want a token to have a precedence, you have to declare it.

  • Bugfix to templates for GHC on 64-bit platforms.

1.10

  • Bugfixes, and minor performance improvements,

  • Most of the examples work again.

1.9

  • A grammar may now contain several entry points, allowing several parsers to share parts of the grammar.

  • Some bugfixes.

1.8

  • Parser table compression, and more efficient table encoding when used with GHC. Large grammars can now be compiled in much less time/space than before using GHC.

  • Yacc-style operator precedence, thanks to patches from Hermann Oliveira Rodrigues [email protected] and Josef Svenningsson [email protected].

  • A debug option which causes the generated parser to print tracing information at each step during parsing.

1.6

  • Now written in, and generates, Haskell 98.

  • Several bug fixes.

  • A new option, -c, generates parsers that use GHC’s unsafeCoerce# primitive to speed up parsing and cut down the binary size. The -c option can only be used with the -g (GHC extensions) option.

  • Parsers generated with the -g option will compile to smaller binaries now — some sources of parser-bloat were identified and squished.

  • Happy has a new Open Source license, based on the BSD license.

  • A sample Haskell parser using Happy is included.

1.5

  • Many bug fixes to the error recovery support, found by experimenting with the Haskell grammar and layout.

  • Happy is about 5 times faster on large examples, due to some changes in the LALR(1) algorithms.

As of version 1.5, Happy is capable of parsing full Haskell. We have a Haskell parser that uses Happy, which will shortly be part of the library collection distributed with GHC.

1.2

  • Supports Haskell 1.4

  • Lots of bugs fixed

  • Performance: the parser generator is at least 20% faster, and generated parsers should be faster due to the replacement of a data type with a newtype.

  • Simple error recovery: designed to be enough to implement the Haskell layout rule.

  • Revamped monad support: the monad can now be threaded through the lexer, enabling passing of state between the parser and the lexer (handy for the Haskell layout rule), and consistent error handling.

  • The %newline feature is removed, the same effect can be achieved using the new monad support.

0.9

  • Happy should be much faster than before.

  • Generated parsers will be 5-10% smaller.

  • Happy now compiles with ghc-0.26.

  • Support for monadic parsers via %monad (see the documentation).

  • New syntax: previously

    f :: { <type> }
    f : ...
      | ...
      etc.
    

    can now be written

    f :: { <type> }
      : ...
      | ...
      etc.
    

    (i.e. omit the extra f. It was always ignored anyway :-)

  • Miscellaneous bug fixes.