Skip to main content

gwernnet.cabal

gwernnet.cabal is the central build configuration for all Haskell code in the gwern.net build system.

Pathbuild/gwernnet.cabal
LanguageCabal
Lines190
Sourcebuild/gwernnet.cabal
at 406d3e423

Read this when Use this page when tracing the Haskell build pipeline, generators, metadata code, or backend utility behavior around gwernnet.

Overview​

gwernnet.cabal is the central build configuration for all Haskell code in the gwern.net build system. It defines:

  • A shared library (gwernnet) exposing 53 modules for site generation
  • 13 executable tools for build and maintenance tasks
  • Common dependencies and compiler options shared across all components

The configuration uses Cabal 3.0 features like common stanzas to reduce duplication and ensure consistent settings across all build targets.


Package Metadata​

cabal-version: 3.0
name: gwernnet
version: 2026.6.1
license: CC0-1.0
author: Gwern Branwen
maintainer: Gwern Branwen
build-type: Simple
synopsis: Gwern.net build + maintenance tools (internal)
category: Web

The version follows a date-based scheme: YYYY.M.patch (e.g. 2026.6.1)


Library Modules​

The library exposes 53 modules organized by function:

Core Build​

ModulePurpose
AnnotationMain annotation/metadata system
LinkMetadataLink metadata processing
LinkMetadataTypesType definitions for metadata
TypographyPandoc typography transforms
UtilsCommon utilities

Annotation Scrapers​

ModulePurpose
Annotation.ArxivarXiv paper metadata
Annotation.BiorxivbioRxiv/medRxiv metadata
Annotation.GwernnetInternal site metadata
Annotation.OpenReviewOpenReview paper metadata
Annotation.PDFPDF document metadata
ModulePurpose
LinkArchiveArchive.org integration
LinkBacklinkBacklink generation
LinkIDLink identification
LinkIconLink type icons
LinkLiveLive preview popups
LinkMetadataLink metadata processing

Text Processing​

ModulePurpose
ParagraphParagraph transforms
ColumnsList column layout
InflationDollar inflation adjustment
Text.RegexVendored regex module
UtextUnicode-rich plain-text rendering

Metadata Handling​

ModulePurpose
Metadata.AuthorAuthor name processing
Metadata.DateDate parsing/formatting
Metadata.FormatFormat detection
Metadata.TitleTitle processing

Configuration Modules​

All Config.* modules contain constants, test cases, and whitelists:

  • Config.GenerateSimilar, Config.Inflation, Config.Interwiki
  • Config.LinkArchive, Config.LinkID, Config.LinkMetadata
  • Config.LinkIcon, Config.LinkLive, Config.LinkSuggester
  • Config.Metadata.Author, Config.Metadata.Format, Config.Metadata.Title
  • Config.Misc, Config.Paragraph, Config.Tags, Config.Typography, Config.Utext
  • Config.XOfTheDay

Other Modules​

ModulePurpose
BlogBlog post generation
CycleCycle detection utilities
GenerateSimilarSimilar link recommendations
GTXGTX file handling
ImageImage processing
InterwikiInterwiki link expansion
QueryExtract links/URLs from Pandoc documents
TagsTag system
TestTest utilities
UniqueUnique ID generation
XOfTheDayDaily featured content

Executables​

hakyll​

Main site generator using Hakyll static site framework.

executable hakyll
import: exe-common
main-is: hakyll.hs
ghc-options: -threaded -rtsopts

preprocessMarkdown​

Markdown preprocessing before Pandoc.

executable preprocessMarkdown
main-is: preprocessMarkdown.hs
build-depends: gwernnet

generateLinkBibliography​

Creates bibliography pages from link metadata.

executable generateLinkBibliography
main-is: generateLinkBibliography.hs
ghc-options: -threaded -rtsopts

generateDirectory​

Generates directory/index pages.

executable generateDirectory
main-is: generateDirectory.hs
ghc-options: -threaded -rtsopts

Creates backlink pages showing what links to each page.

executable generateBacklinks
main-is: generateBacklinks.hs
ghc-options: -threaded -rtsopts

checkMetadata​

Validates metadata consistency.

executable checkMetadata
main-is: checkMetadata.hs

guessTag​

Suggests tags for content.

executable guessTag
main-is: guessTag.hs

changeTag​

Batch tag modification.

executable changeTag
main-is: changeTag.hs
ghc-options: -threaded -rtsopts

Creates "similar links" recommendations.

executable generateSimilarLinks
main-is: generateSimilarLinks.hs
ghc-options: -threaded -rtsopts

linkTitler​

Adds title metadata to links.

executable linkTitler
main-is: linkTitler.hs
ghc-options: -threaded -rtsopts

redirectGuesser​

Suggests nginx redirects for likely moved URLs.

executable redirectGuesser
main-is: redirectGuesser.hs
ghc-options: -threaded -rtsopts

linkSuggester​

Generates link suggestions.

executable linkSuggester
main-is: linkSuggester.hs
ghc-options: -threaded -rtsopts

linkExtractor​

Extracts links from Markdown.

executable linkExtractor
main-is: linkExtractor.hs
ghc-options: -threaded -rtsopts

Common Stanza​

All components share dependencies and warning defaults via the gwern-common stanza:

common gwern-common
default-language: Haskell2010

ghc-options: -Wall

build-depends:
base, HTTP, aeson, array, async, ...

Executables import exe-common, which sets hs-source-dirs: app and depends on the gwernnet library. The library stanza sets hs-source-dirs: . and adds ghc-options: -O2.

Compiler Options​

OptionPurpose
-O2Optimization level 2 for the library stanza
-WallEnable all warnings
-threadedEnable threading (some executables)
-rtsoptsEnable runtime options (some executables)

Key Dependencies​

Core​

PackagePurpose
pandoc==3.1.3Document conversion
pandoc-typesPandoc AST types
hakyll==4.16.2.0Static site generator

Web/Network​

PackagePurpose
HTTPHTTP client
http-conduit==2.3.8Streaming HTTP
http-typesHTTP type definitions
network-uriURI parsing

Data/Text​

PackagePurpose
aesonJSON parsing
textText type
bytestringBinary data
containersMaps, sets
vectorEfficient arrays

Regex​

PackagePurpose
regex-baseRegex abstraction
regex-tdfaTDFA regex engine

Other​

PackagePurpose
titlecaseTitle case conversion
tagsoupHTML parsing
edit-distanceString similarity
cryptohashHashing

Version Pins​

Some dependencies have exact version pins to ensure reproducible builds:

hakyll==4.16.2.0
http-conduit==2.3.8
pandoc==3.1.3

Additionally, warp is bounded (warp<3.4.13) to work around a compilation failure in warp-3.4.13.


Building​

cd build/
cabal build all # Build everything
cabal build hakyll # Build just hakyll
cabal run hakyll -- ... # Run with arguments

See Also