/cabal-downloader-demo

Primary LanguageHaskellBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Cabal Downloader Demo

This cross platform demo application shows how to use the downloader library to download assets off the Web at build time. In this case it is just a text file but could be any resource (images, fonts etc.).

When you run the build process Cabal downloads the JSON RFC and programatically adds it to the data-files section of the package description and then continues to build the application. When the application is run it reads the RFC from the filesystem and spits out the first 15 lines. From the point of view of the application it is as though the RFC was physically bundled with the project.

To install and test do:

  > stack build
  > stack exec print-json-rfc
  
Internet Engineering Task Force (IETF)                      T. Bray, Ed.
Request for Comments: 8259                                    Textuality
Obsoletes: 7159                                            December 2017
Category: Standards Track
ISSN: 2070-1721


     The JavaScript Object Notation (JSON) Data Interchange Format

Most of the action is happening in Setup.hs where the confHook is overridden with ‘myConfHook’. The hook is invoked before any executables or libraries are compiled, it uses downloader to download the RFC to the root of the project and adds the path to PackageDescription which stores any file paths mentioned in the ‘data-files’ stanza in the Cabal file. To build steps that occur after the configuration step there is no difference and access to the downloaded resource is transparent.