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.