ghc-syntax-highlighter: Syntax highlighter for Haskell using the lexer of GHC

[ bsd3, library, text ] [ Propose Tags ]

Syntax highlighter for Haskell using the lexer of GHC.

[Skip to Readme]


[Last Documentation]

  • GHC
    • GHC.SyntaxHighlighter


Manual Flags


Turn on development settings.


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS],,,,,,,,,,,,
Change log
Dependencies base (>=4.17 && <5), ghc-lib-parser (>=9.8 && <9.9), text (>=0.2 && <2.2) [details]
License BSD-3-Clause
Author Mark Karpov <>
Maintainer Mark Karpov <>
Category Text
Home page
Bug tracker
Source repo head: git clone
Uploaded by mrkkrp at 2023-10-17T19:26:07Z
Distributions LTSHaskell:, NixOS:, Stackage:
Reverse Dependencies 4 direct, 19 indirect [details]
Downloads 4823 total (62 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2023-10-17 [all 2 reports]

Readme for ghc-syntax-highlighter-

[back to package description]

GHC syntax highligher

License FreeBSD Hackage Stackage Nightly Stackage LTS CI

This is a syntax highlighter library for Haskell using the lexer of GHC.

Here is a blog post announcing the package, the readme is mostly derived from it:


Parsing Haskell is hard, because Haskell is a complex language with countless features. The only way to get it right 100% is to use the parser of GHC itself. Fortunately, now there is the ghc package, which as of version 8.4.1 exports enough of GHC's source code to allow us use its lexer.

Alternative approaches, even decent ones like highlight.js either don't support cutting-edge features or do their work without sufficient precision so that many tokens end up combined and the end result is typically still hard to read.

How to use it in your blog

Depends on your markdown processor. If you're an mmark user, good news, since version of mmark-ext it includes the ghcSyntaxHighlighter extension. Due to flexibility of MMark, it's possible to use this highlighter for Haskell and skylighting as a fall-back for everything else. Consult the docs for more information.

skylighting is what Pandoc uses. And from what I can tell it's hardcoded to use only that library for highlighting, so some creativity may be necessary to get it work.


CPP directives are not lexed correctly, because the GHC parser is not designed to parse them.


Issues, bugs, and questions may be reported in the GitHub issue tracker for this project.

Pull requests are also welcome.


Copyright © 2018–present Mark Karpov

Distributed under BSD 3 clause license.