BSD-3-Clause licensed by Abhinav Gupta
Maintained by Abhinav Gupta
This version can be pinned in stack with:language-thrift-,2590

Module documentation for


language-thrift provides a parser and pretty printer for the Thrift IDL format. In addition to parsing the IDL, it keeps track of Javadoc-style comments (/** ... */) and attaches them to the type, service, function, or field, above which they were added. These are retained when the document is sent through the pretty printer.

The parser uses megaparsec and the pretty printer ansi-wl-pprint. The pretty printer can produce syntax highlighted output.

Haddock-generated docs are available on Hackage and here.

Changes (2024-04-05)

  • (#18) Migrate pretty printer to prettyprinter. (2021-12-04)

  • Allow semigroups 0.20 (2020-12-31)

  • Port to Megaparsec 9. (2019-10-01)

  • Port to Megaparsec 7. (2016-09-25)

  • Breaking: Consolidate struct, union, and exception AST types into a single data type: Struct. Whether the object is a struct, union, or exception is now determined by the StructKind attribute.
  • Breaking: Deprecated module Language.Thrift.Types has now been removed. (2016-08-31)

  • Disallow reserved keywords from being used as identifier names. (2016-05-26)

  • Build with GHC 8. (2016-05-15)

  • Deprecate the Language.Thrift.Types in favor of Language.Thrift.AST.
  • Upgrade to megaparsec 5.0. (2016-08-31)

  • Disallow reserved keywords from being used as identifier names. (2016-05-24)

  • Build with GHC 8. (2016-02-09)

This release contains breaking changes. The number of transitive dependencies has been reduced significantly.

  • Switched parser to megaparsec. trifecta and parsers bring too many dependencies with them.
  • Drop support for wl-pprint. Only ansi-wl-pprint is supported now.
  • Drop dependency on lens. Lenses for fields of the AST elements are still provided but prisms are not. Use Control.Lens.makePrisms to derive your own if needed. (2016-01-27)

  • Drop use of TemplateHaskell. (2016-01-15)

  • Added source annotations to all TypeReference and ConstValue constructors.
  • Added name and srcAnnot lenses for Type and Definition. (2016-01-05)

  • Use more concrete types for lenses which don’t need overloading. (2016-01-03)

  • Output generated by the ansi-wl-pprint pretty printer will be colored using ANSI escape codes. (2016-01-02)

  • Export Pretty instances from Language.Thrift.Types instead of requiring a separate import of the corresponding Pretty module. (2016-01-02)

  • Added a pretty printer based on ansi-wl-pprint.
  • Both pretty printing modules now export instances of Pretty for relevant elements of the AST. These instances use defaultConfig for printing. (2015-12-27)

The AST representation has been overhauled to be more consistent and accessible. As a result, this release contains a number of breaking changes:

  • Moved Header records into Include and Namespace types.
  • Moved ConstDefinition record into separate type, Const.
  • Moved ServiceDefinition record into separate type, Service.
  • Moved Type records into separate types: Typedef, Enum, Struct, Union, Exception, Senum.
  • Renamed FieldType to TypeReference.
  • Renamed parser and pretty printer for TypeReference to typeReference.
  • Renamed the following record fields: constType to constValueType, typedefType to typedefTargetType, fieldType to fieldValueType, and fieldDefault to fieldDefaultValue.
  • Hide function parser and pretty printer.
  • Moved type annotations for defined types into the records for the types themselves.

Other changes:

  • Added lenses and prisms for AST types where appropriate.
  • Parsing will fail if the end of the document is not reached when the parser stops. This fixes the bug where the parser would stop half way through a file when it saw a recoverable error.
  • Added source annotations to headers, type references (DefinedType) and constant value references (ConstIdentifer).
  • Added i8 as an alias for byte.
  • Type annotations are now allowed to have no associated value.
  • Expose parsers and pretty printers for different headers and definitions.
  • Fixed a bug which would cause parsing to fail if a definition ended with a semicolon or a comma.
  • Drop dependency on mtl. (2015-08-02)

  • Add pretty printing module.
  • Parsers of different constructors are no longer exported by the parsing module; instead only the parsers for their corresponding types are exported.
  • Rename record for field requiredness from fieldRequiredNess to fieldRequiredness. (2015-07-31)

  • Allow changing the underlying parser to any parser that implements the TokenParsing class from parsers.
  • Add thriftIDLParser for standard use cases.
  • Add Language.Thrift.Parser.Trifecta with a standard Trifecta-based parser. (2015-06-12)

  • Track starting positions in source annotations.
  • Move docs to a separate field. (2015-06-02)

  • Allow base 4.9. (2015-04-05)

  • Initial release.