docs/Nixpkgs/Languages-And-Frameworks/dhall.section/index.html

3276 lines
70 KiB
HTML
Raw Normal View History

2024-07-24 19:14:02 +00:00
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Aux Documentation">
<meta name="author" content="Nixpkgs Aux, and Lix Contributors">
<link rel="canonical" href="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/dhall.section/">
<link rel="prev" href="../dart.section/">
<link rel="next" href="../dlang.section/">
<link rel="icon" href="../../../assets/aux-logo.svg">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
<title>Dhall - Aux Docs</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.76a95c52.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.bunny.net/css?family=IBM+Plex+Sans:300,300i,400,400i,700,700i%7CIBM+Plex+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"IBM Plex Sans";--md-code-font:"IBM Plex Mono"}</style>
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Dhall {#sec-language-dhall} - Aux Docs" >
<meta property="og:description" content="Aux Documentation" >
<meta property="og:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/dhall.section.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/dhall.section/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Dhall {#sec-language-dhall} - Aux Docs" >
<meta name="twitter:description" content="Aux Documentation" >
<meta name="twitter:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/dhall.section.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#sec-language-dhall" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="Aux Docs" class="md-header__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Aux Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Dhall
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Dark Mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Dark Mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Light Mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Light Mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../.." class="md-tabs__link">
Aux Documentation Hub
</a>
</li>
<li class="md-tabs__item">
<a href="../../../TODO/" class="md-tabs__link">
TODO
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Aux/" class="md-tabs__link">
Aux
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Lix/" class="md-tabs__link">
Lix
</a>
</li>
<li class="md-tabs__item">
<a href="../../../NixOS/appstream/" class="md-tabs__link">
NixOS
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../" class="md-tabs__link">
Nixpkgs
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="Aux Docs" class="md-nav__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
Aux Docs
</label>
<div class="md-nav__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
<span class="md-ellipsis">
Aux Documentation Hub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../TODO/" class="md-nav__link">
<span class="md-ellipsis">
TODO
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Aux/" class="md-nav__link">
<span class="md-ellipsis">
Aux
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Lix/" class="md-nav__link">
<span class="md-ellipsis">
Lix
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../NixOS/appstream/" class="md-nav__link">
<span class="md-ellipsis">
NixOS
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
Nixpkgs
</span>
</a>
<label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Nixpkgs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../options/" class="md-nav__link">
<span class="md-ellipsis">
Options
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Build-Helpers/" class="md-nav__link">
<span class="md-ellipsis">
Build Helpers
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Development/" class="md-nav__link">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Functions/" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Hooks/" class="md-nav__link">
<span class="md-ellipsis">
Hooks
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
Languages And Frameworks
</span>
</a>
<label class="md-nav__link " for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6_7">
<span class="md-nav__icon md-icon"></span>
Languages And Frameworks
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../agda.section/" class="md-nav__link">
<span class="md-ellipsis">
Agda
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../android.section/" class="md-nav__link">
<span class="md-ellipsis">
Android
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../beam.section/" class="md-nav__link">
<span class="md-ellipsis">
BEAM Languages (Erlang, Elixir &amp; LFE)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bower.section/" class="md-nav__link">
<span class="md-ellipsis">
Bower
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../chicken.section/" class="md-nav__link">
<span class="md-ellipsis">
CHICKEN
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../coq.section/" class="md-nav__link">
<span class="md-ellipsis">
Coq and coq packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../crystal.section/" class="md-nav__link">
<span class="md-ellipsis">
Crystal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuda.section/" class="md-nav__link">
<span class="md-ellipsis">
CUDA
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuelang.section/" class="md-nav__link">
<span class="md-ellipsis">
Cue (Cuelang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dart.section/" class="md-nav__link">
<span class="md-ellipsis">
Dart
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Dhall
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Dhall
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#ssec-dhall-remote-imports" class="md-nav__link">
<span class="md-ellipsis">
Remote imports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-packaging-expression" class="md-nav__link">
<span class="md-ellipsis">
Packaging a Dhall expression from scratch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-package-contents" class="md-nav__link">
<span class="md-ellipsis">
Contents of a Dhall package
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-packaging-functions" class="md-nav__link">
<span class="md-ellipsis">
Packaging functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-dhall-to-nixpkgs" class="md-nav__link">
<span class="md-ellipsis">
dhall-to-nixpkgs
</span>
</a>
<nav class="md-nav" aria-label="dhall-to-nixpkgs">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssec-dhall-remote-imports-as-fod" class="md-nav__link">
<span class="md-ellipsis">
Remote imports as fixed-output derivations
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-overriding-dependency-versions" class="md-nav__link">
<span class="md-ellipsis">
Overriding dependency versions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-overrides" class="md-nav__link">
<span class="md-ellipsis">
Overrides
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../dlang.section/" class="md-nav__link">
<span class="md-ellipsis">
D (Dlang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet.section/" class="md-nav__link">
<span class="md-ellipsis">
Dotnet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../emscripten.section/" class="md-nav__link">
<span class="md-ellipsis">
Emscripten
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gnome.section/" class="md-nav__link">
<span class="md-ellipsis">
GNOME
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../go.section/" class="md-nav__link">
<span class="md-ellipsis">
Go
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gradle.section/" class="md-nav__link">
<span class="md-ellipsis">
Gradle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hare.section/" class="md-nav__link">
<span class="md-ellipsis">
Hare
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../haskell.section/" class="md-nav__link">
<span class="md-ellipsis">
Haskell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hy.section/" class="md-nav__link">
<span class="md-ellipsis">
Hy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris2.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ios.section/" class="md-nav__link">
<span class="md-ellipsis">
iOS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java.section/" class="md-nav__link">
<span class="md-ellipsis">
Java
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript.section/" class="md-nav__link">
<span class="md-ellipsis">
Javascript
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../julia.section/" class="md-nav__link">
<span class="md-ellipsis">
Julia
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lisp.section/" class="md-nav__link">
<span class="md-ellipsis">
lisp-modules
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lua.section/" class="md-nav__link">
<span class="md-ellipsis">
Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maven.section/" class="md-nav__link">
<span class="md-ellipsis">
Maven
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nim.section/" class="md-nav__link">
<span class="md-ellipsis">
Nim
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ocaml.section/" class="md-nav__link">
<span class="md-ellipsis">
OCaml
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../octave.section/" class="md-nav__link">
<span class="md-ellipsis">
Octave
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../perl.section/" class="md-nav__link">
<span class="md-ellipsis">
Perl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php.section/" class="md-nav__link">
<span class="md-ellipsis">
PHP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pkg-config.section/" class="md-nav__link">
<span class="md-ellipsis">
pkg-config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../python.section/" class="md-nav__link">
<span class="md-ellipsis">
Python
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qt.section/" class="md-nav__link">
<span class="md-ellipsis">
Qt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../r.section/" class="md-nav__link">
<span class="md-ellipsis">
R
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ruby.section/" class="md-nav__link">
<span class="md-ellipsis">
Ruby
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust.section/" class="md-nav__link">
<span class="md-ellipsis">
Rust
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scheme.section/" class="md-nav__link">
<span class="md-ellipsis">
Scheme
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../swift.section/" class="md-nav__link">
<span class="md-ellipsis">
Swift
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../texlive.section/" class="md-nav__link">
<span class="md-ellipsis">
TeX Live
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../titanium.section/" class="md-nav__link">
<span class="md-ellipsis">
Titanium
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vim.section/" class="md-nav__link">
<span class="md-ellipsis">
Vim
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Library-Reference/asserts/" class="md-nav__link">
<span class="md-ellipsis">
Library Reference
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Module-System/module-system.chapter/" class="md-nav__link">
<span class="md-ellipsis">
Module System
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Packages/" class="md-nav__link">
<span class="md-ellipsis">
Packages
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Standard-Environment/" class="md-nav__link">
<span class="md-ellipsis">
Standard Environment
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Using-Nixpkgs/" class="md-nav__link">
<span class="md-ellipsis">
Using Nixpkgs
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#ssec-dhall-remote-imports" class="md-nav__link">
<span class="md-ellipsis">
Remote imports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-packaging-expression" class="md-nav__link">
<span class="md-ellipsis">
Packaging a Dhall expression from scratch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-package-contents" class="md-nav__link">
<span class="md-ellipsis">
Contents of a Dhall package
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-packaging-functions" class="md-nav__link">
<span class="md-ellipsis">
Packaging functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-dhall-to-nixpkgs" class="md-nav__link">
<span class="md-ellipsis">
dhall-to-nixpkgs
</span>
</a>
<nav class="md-nav" aria-label="dhall-to-nixpkgs">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssec-dhall-remote-imports-as-fod" class="md-nav__link">
<span class="md-ellipsis">
Remote imports as fixed-output derivations
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-overriding-dependency-versions" class="md-nav__link">
<span class="md-ellipsis">
Overriding dependency versions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-dhall-overrides" class="md-nav__link">
<span class="md-ellipsis">
Overrides
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="sec-language-dhall">Dhall</h1>
<p>The Nixpkgs support for Dhall assumes some familiarity with Dhall's language
support for importing Dhall expressions, which is documented here:</p>
<ul>
<li><a href="https://docs.dhall-lang.org/tutorials/Language-Tour.html#installing-packages"><code>dhall-lang.org</code> - Installing packages</a></li>
</ul>
<h2 id="ssec-dhall-remote-imports">Remote imports</h2>
<p>Nixpkgs bypasses Dhall's support for remote imports using Dhall's
semantic integrity checks. Specifically, any Dhall import can be protected by
an integrity check like:</p>
<div class="highlight"><pre><span></span><code>https://prelude.dhall-lang.org/v20.1.0/package.dhall
sha256:26b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98
</code></pre></div>
<p>… and if the import is cached then the interpreter will load the import from
cache instead of fetching the URL.</p>
<p>Nixpkgs uses this trick to add all of a Dhall expression's dependencies into the
cache so that the Dhall interpreter never needs to resolve any remote URLs. In
fact, Nixpkgs uses a Dhall interpreter with remote imports disabled when
packaging Dhall expressions to enforce that the interpreter never resolves a
remote import. This means that Nixpkgs only supports building Dhall expressions
if all of their remote imports are protected by semantic integrity checks.</p>
<p>Instead of remote imports, Nixpkgs uses Nix to fetch remote Dhall code. For
example, the Prelude Dhall package uses <code>pkgs.fetchFromGitHub</code> to fetch the
<code>dhall-lang</code> repository containing the Prelude. Relying exclusively on Nix
to fetch Dhall code ensures that Dhall packages built using Nix remain pure and
also behave well when built within a sandbox.</p>
<h2 id="ssec-dhall-packaging-expression">Packaging a Dhall expression from scratch</h2>
<p>We can illustrate how Nixpkgs integrates Dhall by beginning from the following
trivial Dhall expression with one dependency (the Prelude):</p>
<div class="highlight"><pre><span></span><code>-- ./true.dhall
let Prelude = https://prelude.dhall-lang.org/v20.1.0/package.dhall
in Prelude.Bool.not False
</code></pre></div>
<p>As written, this expression cannot be built using Nixpkgs because the
expression does not protect the Prelude import with a semantic integrity
check, so the first step is to freeze the expression using <code>dhall freeze</code>,
like this:</p>
<div class="highlight"><pre><span></span><code>$ dhall freeze --inplace ./true.dhall
</code></pre></div>
<p>… which gives us:</p>
<div class="highlight"><pre><span></span><code>-- ./true.dhall
let Prelude =
https://prelude.dhall-lang.org/v20.1.0/package.dhall
sha256:26b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98
in Prelude.Bool.not False
</code></pre></div>
<p>To package that expression, we create a <code>./true.nix</code> file containing the
following specification for the Dhall package:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># ./true.nix</span>
<span class="p">{</span> buildDhallPackage<span class="p">,</span> Prelude <span class="p">}:</span>
buildDhallPackage <span class="p">{</span>
<span class="ss">name</span> <span class="o">=</span> <span class="s2">&quot;true&quot;</span><span class="p">;</span>
<span class="ss">code</span> <span class="o">=</span> <span class="l">./true.dhall</span><span class="p">;</span>
<span class="ss">dependencies</span> <span class="o">=</span> <span class="p">[</span> Prelude <span class="p">];</span>
<span class="ss">source</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<p>… and we complete the build by incorporating that Dhall package into the
<code>pkgs.dhallPackages</code> hierarchy using an overlay, like this:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># ./example.nix</span>
<span class="k">let</span>
<span class="ss">nixpkgs</span> <span class="o">=</span> <span class="nb">builtins</span><span class="o">.</span>fetchTarball <span class="p">{</span>
<span class="ss">url</span> <span class="o">=</span> <span class="s2">&quot;https://github.com/NixOS/nixpkgs/archive/94b2848559b12a8ed1fe433084686b2a81123c99.tar.gz&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-B4Q3c6IvTLg3Q92qYa8y+i4uTaphtFdjp+Ir3QQjdN0=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="ss">dhallOverlay</span> <span class="o">=</span> self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="no">true</span> <span class="o">=</span> self<span class="o">.</span>callPackage <span class="l">./true.nix</span> <span class="p">{</span> <span class="p">};</span>
<span class="p">};</span>
<span class="ss">overlay</span> <span class="o">=</span> self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="ss">dhallPackages</span> <span class="o">=</span> super<span class="o">.</span>dhallPackages<span class="o">.</span>override <span class="p">(</span>old<span class="p">:</span> <span class="p">{</span>
<span class="ss">overrides</span> <span class="o">=</span>
self<span class="o">.</span>lib<span class="o">.</span>composeExtensions <span class="p">(</span>old<span class="o">.</span>overrides <span class="ow">or</span> <span class="p">(</span>_<span class="p">:</span> _<span class="p">:</span> <span class="p">{}))</span> dhallOverlay<span class="p">;</span>
<span class="p">});</span>
<span class="p">};</span>
<span class="ss">pkgs</span> <span class="o">=</span> <span class="nb">import</span> nixpkgs <span class="p">{</span> <span class="ss">config</span> <span class="o">=</span> <span class="p">{};</span> <span class="ss">overlays</span> <span class="o">=</span> <span class="p">[</span> overlay <span class="p">];</span> <span class="p">};</span>
<span class="k">in</span>
pkgs
</code></pre></div>
<p>… which we can then build using this command:</p>
<div class="highlight"><pre><span></span><code>$ nix build --file ./example.nix dhallPackages.true
</code></pre></div>
<h2 id="ssec-dhall-package-contents">Contents of a Dhall package</h2>
<p>The above package produces the following directory tree:</p>
<div class="highlight"><pre><span></span><code>$ tree -a ./result
result
├── .cache
│   └── dhall
│   └── 122027abdeddfe8503496adeb623466caa47da5f63abd2bc6fa19f6cfcb73ecfed70
├── binary.dhall
└── source.dhall
</code></pre></div>
<p>… where:</p>
<ul>
<li><code>source.dhall</code> contains the result of interpreting our Dhall package:</li>
</ul>
<div class="highlight"><pre><span></span><code>$ cat ./result/source.dhall
True
</code></pre></div>
<ul>
<li>The <code>.cache</code> subdirectory contains one binary cache product encoding the
same result as <code>source.dhall</code>:</li>
</ul>
<div class="highlight"><pre><span></span><code>$ dhall decode &lt; ./result/.cache/dhall/122027abdeddfe8503496adeb623466caa47da5f63abd2bc6fa19f6cfcb73ecfed70
True
</code></pre></div>
<ul>
<li><code>binary.dhall</code> contains a Dhall expression which handles fetching and decoding
the same cache product:</li>
</ul>
<div class="highlight"><pre><span></span><code>$ cat ./result/binary.dhall
missing sha256:27abdeddfe8503496adeb623466caa47da5f63abd2bc6fa19f6cfcb73ecfed70
$ cp -r ./result/.cache .cache
$ chmod -R u+w .cache
$ XDG_CACHE_HOME=.cache dhall --file ./result/binary.dhall
True
</code></pre></div>
<p>The <code>source.dhall</code> file is only present for packages that specify
<code>source = true;</code>. By default, Dhall packages omit the <code>source.dhall</code> in order
to conserve disk space when they are used exclusively as dependencies. For
example, if we build the Prelude package it will only contain the binary
encoding of the expression:</p>
<div class="highlight"><pre><span></span><code>$ nix build --file ./example.nix dhallPackages.Prelude
$ tree -a result
result
├── .cache
│   └── dhall
│   └── 122026b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98
└── binary.dhall
2 directories, 2 files
</code></pre></div>
<p>Typically, you only specify <code>source = true;</code> for the top-level Dhall expression
of interest (such as our example <code>true.nix</code> Dhall package). However, if you
wish to specify <code>source = true</code> for all Dhall packages, then you can amend the
Dhall overlay like this:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">dhallOverrides</span> <span class="o">=</span> self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="c1"># Enable source for all Dhall packages</span>
<span class="ss">buildDhallPackage</span> <span class="o">=</span>
args<span class="p">:</span> super<span class="o">.</span>buildDhallPackage <span class="p">(</span>args <span class="o">//</span> <span class="p">{</span> <span class="ss">source</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span> <span class="p">});</span>
<span class="no">true</span> <span class="o">=</span> self<span class="o">.</span>callPackage <span class="l">./true.nix</span> <span class="p">{</span> <span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<p>… and now the Prelude will contain the fully decoded result of interpreting
the Prelude:</p>
<div class="highlight"><pre><span></span><code>$ nix build --file ./example.nix dhallPackages.Prelude
$ tree -a result
result
├── .cache
│   └── dhall
│   └── 122026b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98
├── binary.dhall
└── source.dhall
$ cat ./result/source.dhall
{ Bool =
{ and =
\(_ : List Bool) -&gt;
List/fold Bool _ Bool (\(_ : Bool) -&gt; \(_ : Bool) -&gt; _@1 &amp;&amp; _) True
, build = \(_ : Type -&gt; _ -&gt; _@1 -&gt; _@2) -&gt; _ Bool True False
, even =
\(_ : List Bool) -&gt;
List/fold Bool _ Bool (\(_ : Bool) -&gt; \(_ : Bool) -&gt; _@1 == _) True
, fold =
\(_ : Bool) -&gt;
</code></pre></div>
<h2 id="ssec-dhall-packaging-functions">Packaging functions</h2>
<p>We already saw an example of using <code>buildDhallPackage</code> to create a Dhall
package from a single file, but most Dhall packages consist of more than one
file and there are two derived utilities that you may find more useful when
packaging multiple files:</p>
<ul>
<li>
<p><code>buildDhallDirectoryPackage</code> - build a Dhall package from a local directory</p>
</li>
<li>
<p><code>buildDhallGitHubPackage</code> - build a Dhall package from a GitHub repository</p>
</li>
</ul>
<p>The <code>buildDhallPackage</code> is the lowest-level function and accepts the following
arguments:</p>
<ul>
<li>
<p><code>name</code>: The name of the derivation</p>
</li>
<li>
<p><code>dependencies</code>: Dhall dependencies to build and cache ahead of time</p>
</li>
<li>
<p><code>code</code>: The top-level expression to build for this package</p>
</li>
</ul>
<p>Note that the <code>code</code> field accepts an arbitrary Dhall expression. You're
not limited to just a file.</p>
<ul>
<li>
<p><code>source</code>: Set to <code>true</code> to include the decoded result as <code>source.dhall</code> in the
build product, at the expense of requiring more disk space</p>
</li>
<li>
<p><code>documentationRoot</code>: Set to the root directory of the package if you want
<code>dhall-docs</code> to generate documentation underneath the <code>docs</code> subdirectory of
the build product</p>
</li>
</ul>
<p>The <code>buildDhallDirectoryPackage</code> is a higher-level function implemented in terms
of <code>buildDhallPackage</code> that accepts the following arguments:</p>
<ul>
<li>
<p><code>name</code>: Same as <code>buildDhallPackage</code></p>
</li>
<li>
<p><code>dependencies</code>: Same as <code>buildDhallPackage</code></p>
</li>
<li>
<p><code>source</code>: Same as <code>buildDhallPackage</code></p>
</li>
<li>
<p><code>src</code>: The directory containing Dhall code that you want to turn into a Dhall
package</p>
</li>
<li>
<p><code>file</code>: The top-level file (<code>package.dhall</code> by default) that is the entrypoint
to the rest of the package</p>
</li>
<li>
<p><code>document</code>: Set to <code>true</code> to generate documentation for the package</p>
</li>
</ul>
<p>The <code>buildDhallGitHubPackage</code> is another higher-level function implemented in
terms of <code>buildDhallPackage</code> that accepts the following arguments:</p>
<ul>
<li>
<p><code>name</code>: Same as <code>buildDhallPackage</code></p>
</li>
<li>
<p><code>dependencies</code>: Same as <code>buildDhallPackage</code></p>
</li>
<li>
<p><code>source</code>: Same as <code>buildDhallPackage</code></p>
</li>
<li>
<p><code>owner</code>: The owner of the repository</p>
</li>
<li>
<p><code>repo</code>: The repository name</p>
</li>
<li>
<p><code>rev</code>: The desired revision (or branch, or tag)</p>
</li>
<li>
<p><code>directory</code>: The subdirectory of the Git repository to package (if a
directory other than the root of the repository)</p>
</li>
<li>
<p><code>file</code>: The top-level file (<code>${directory}/package.dhall</code> by default) that is
the entrypoint to the rest of the package</p>
</li>
<li>
<p><code>document</code>: Set to <code>true</code> to generate documentation for the package</p>
</li>
</ul>
<p>Additionally, <code>buildDhallGitHubPackage</code> accepts the same arguments as
<code>fetchFromGitHub</code>, such as <code>hash</code> or <code>fetchSubmodules</code>.</p>
<h2 id="ssec-dhall-dhall-to-nixpkgs"><code>dhall-to-nixpkgs</code></h2>
<p>You can use the <code>dhall-to-nixpkgs</code> command-line utility to automate
packaging Dhall code. For example:</p>
<div class="highlight"><pre><span></span><code>$ nix-shell -p haskellPackages.dhall-nixpkgs nix-prefetch-git
[nix-shell]$ dhall-to-nixpkgs github https://github.com/Gabriella439/dhall-semver.git
{ buildDhallGitHubPackage, Prelude }:
buildDhallGitHubPackage {
name = &quot;dhall-semver&quot;;
githubBase = &quot;github.com&quot;;
owner = &quot;Gabriella439&quot;;
repo = &quot;dhall-semver&quot;;
rev = &quot;2d44ae605302ce5dc6c657a1216887fbb96392a4&quot;;
fetchSubmodules = false;
hash = &quot;sha256-n0nQtswVapWi/x7or0O3MEYmAkt/a1uvlOtnje6GGnk=&quot;;
directory = &quot;&quot;;
file = &quot;package.dhall&quot;;
source = false;
document = false;
dependencies = [ (Prelude.overridePackage { file = &quot;package.dhall&quot;; }) ];
}
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><code>nix-prefetch-git</code> is added to the <code>nix-shell -p</code> invocation above, because it has to be in <code>$PATH</code> for <code>dhall-to-nixpkgs</code> to work.</p>
</div>
<p>The utility takes care of automatically detecting remote imports and converting
them to package dependencies. You can also use the utility on local
Dhall directories, too:</p>
<div class="highlight"><pre><span></span><code>$ dhall-to-nixpkgs directory ~/proj/dhall-semver
{ buildDhallDirectoryPackage, Prelude }:
buildDhallDirectoryPackage {
name = &quot;proj&quot;;
src = ~/proj/dhall-semver;
file = &quot;package.dhall&quot;;
source = false;
document = false;
dependencies = [ (Prelude.overridePackage { file = &quot;package.dhall&quot;; }) ];
}
</code></pre></div>
<h3 id="ssec-dhall-remote-imports-as-fod">Remote imports as fixed-output derivations</h3>
<p><code>dhall-to-nixpkgs</code> has the ability to fetch and build remote imports as
fixed-output derivations by using their Dhall integrity check. This is
sometimes easier than manually packaging all remote imports.</p>
<p>This can be used like the following:</p>
<div class="highlight"><pre><span></span><code>$ dhall-to-nixpkgs directory --fixed-output-derivations ~/proj/dhall-semver
{ buildDhallDirectoryPackage, buildDhallUrl }:
buildDhallDirectoryPackage {
name = &quot;proj&quot;;
src = ~/proj/dhall-semver;
file = &quot;package.dhall&quot;;
source = false;
document = false;
dependencies = [
(buildDhallUrl {
url = &quot;https://prelude.dhall-lang.org/v17.0.0/package.dhall&quot;;
hash = &quot;sha256-ENs8kZwl6QRoM9+Jeo/+JwHcOQ+giT2VjDQwUkvlpD4=&quot;;
dhallHash = &quot;sha256:10db3c919c25e9046833df897a8ffe2701dc390fa0893d958c3430524be5a43e&quot;;
})
];
}
</code></pre></div>
<p>Here, <code>dhall-semver</code>'s <code>Prelude</code> dependency is fetched and built with the
<code>buildDhallUrl</code> helper function, instead of being passed in as a function
argument.</p>
<h2 id="ssec-dhall-overriding-dependency-versions">Overriding dependency versions</h2>
<p>Suppose that we change our <code>true.dhall</code> example expression to depend on an older
version of the Prelude (19.0.0):</p>
<div class="highlight"><pre><span></span><code>-- ./true.dhall
let Prelude =
https://prelude.dhall-lang.org/v19.0.0/package.dhall
sha256:eb693342eb769f782174157eba9b5924cf8ac6793897fc36a31ccbd6f56dafe2
in Prelude.Bool.not False
</code></pre></div>
<p>If we try to rebuild that expression the build will fail:</p>
<div class="highlight"><pre><span></span><code>$ nix build --file ./example.nix dhallPackages.true
builder for &#39;/nix/store/0f1hla7ff1wiaqyk1r2ky4wnhnw114fi-true.drv&#39; failed with exit code 1; last 10 log lines:
Dhall was compiled without the &#39;with-http&#39; flag.
The requested URL was: https://prelude.dhall-lang.org/v19.0.0/package.dhall
4│ https://prelude.dhall-lang.org/v19.0.0/package.dhall
5│ sha256:eb693342eb769f782174157eba9b5924cf8ac6793897fc36a31ccbd6f56dafe2
/nix/store/rsab4y99h14912h4zplqx2iizr5n4rc2-true.dhall:4:7
[1 built (1 failed), 0.0 MiB DL]
error: build of &#39;/nix/store/0f1hla7ff1wiaqyk1r2ky4wnhnw114fi-true.drv&#39; failed
</code></pre></div>
<p>… because the default Prelude selected by Nixpkgs revision
<code>94b2848559b12a8ed1fe433084686b2a81123c99is</code> is version 20.1.0, which doesn't
have the same integrity check as version 19.0.0. This means that version
19.0.0 is not cached and the interpreter is not allowed to fall back to
importing the URL.</p>
<p>However, we can override the default Prelude version by using <code>dhall-to-nixpkgs</code>
to create a Dhall package for our desired Prelude:</p>
<div class="highlight"><pre><span></span><code>$ dhall-to-nixpkgs github https://github.com/dhall-lang/dhall-lang.git \
--name Prelude \
--directory Prelude \
--rev v19.0.0 \
&gt; Prelude.nix
</code></pre></div>
<p>… and then referencing that package in our Dhall overlay, by either overriding
the Prelude globally for all packages, like this:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">dhallOverrides</span> <span class="o">=</span> self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="no">true</span> <span class="o">=</span> self<span class="o">.</span>callPackage <span class="l">./true.nix</span> <span class="p">{</span> <span class="p">};</span>
<span class="ss">Prelude</span> <span class="o">=</span> self<span class="o">.</span>callPackage <span class="l">./Prelude.nix</span> <span class="p">{</span> <span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<p>… or selectively overriding the Prelude dependency for just the <code>true</code> package,
like this:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">dhallOverrides</span> <span class="o">=</span> self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="no">true</span> <span class="o">=</span> self<span class="o">.</span>callPackage <span class="l">./true.nix</span> <span class="p">{</span>
<span class="ss">Prelude</span> <span class="o">=</span> self<span class="o">.</span>callPackage <span class="l">./Prelude.nix</span> <span class="p">{</span> <span class="p">};</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="ssec-dhall-overrides">Overrides</h2>
<p>You can override any of the arguments to <code>buildDhallGitHubPackage</code> or
<code>buildDhallDirectoryPackage</code> using the <code>overridePackage</code> attribute of a package.
For example, suppose we wanted to selectively enable <code>source = true</code> just for the Prelude. We can do that like this:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">dhallOverrides</span> <span class="o">=</span> self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="ss">Prelude</span> <span class="o">=</span> super<span class="o">.</span>Prelude<span class="o">.</span>overridePackage <span class="p">{</span> <span class="ss">source</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span> <span class="p">};</span>
<span class="c1"># ...</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Licenced MIT
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://git.auxolotl.org/auxolotl/docs" target="_blank" rel="noopener" title="Aux Docs Repo" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</a>
<a href="https://forum.aux.computer/" target="_blank" rel="noopener" title="Aux Forum" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"/></svg>
</a>
<a href="https://wiki.auxolotl.org/" target="_blank" rel="noopener" title="Aux Wiki" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.801 13.557c.148.098.288.202.417.313 1.854 1.6 3.127 4.656 2.582 7.311-1.091-.255-5.747-1.055-7.638-3.383-.91-1.12-1.366-2.081-1.569-2.885a5.65 5.65 0 0 0 .034-.219c.089.198.197.35.313.466.24.24.521.335.766.372.304.046.594-.006.806-.068l.001.001c.05-.015.433-.116.86-.342.325-.173 2.008-.931 3.428-1.566Zm-7.384 1.435C9.156 16.597 6.6 18.939.614 18.417c.219-1.492 1.31-3.019 2.51-4.11.379-.345.906-.692 1.506-1.009.286.168.598.332.939.486 2.689 1.221 3.903 1.001 4.89.573a1.3 1.3 0 0 0 .054-.025 6.156 6.156 0 0 0-.096.66Zm4.152-.462c.38-.341.877-.916 1.383-1.559-.389-.15-.866-.371-1.319-.591-.598-.29-1.305-.283-2.073-.315a4.685 4.685 0 0 1-.804-.103c.014-.123.027-.246.038-.369.062.104.673.057.871.057.354 0 1.621.034 3.074-.574 1.452-.608 2.55-1.706 3.022-3.225.474-1.52.22-3.091-.168-3.952-.169.709-1.453 2.381-1.926 2.871-.473.489-2.381 2.296-2.972 2.921-.7.74-.688.793-1.332 1.302-.202.19-.499.402-.563.53.027-.338.039-.675.027-.997a7.653 7.653 0 0 0-.032-.523c.322-.059.567-.522.567-.861 0-.224-.106-.247-.271-.229.075-.894.382-3.923 1.254-4.281.218.109.831.068.649-.295-.182-.364-.825-.074-1.081.266-.28.374-.956 2.046-.92 4.324-.113.014-.174.033-.322.033-.171 0-.321-.04-.433-.05.034-2.275-.714-3.772-.84-4.169-.12-.375-.491-.596-.781-.596-.146 0-.272.056-.333.179-.182.363.459.417.677.308.706.321 1.156 3.519 1.254 4.277-.125-.006-.199.035-.199.233 0 .311.17.756.452.843a.442.442 0 0 0-.007.03s-.287.99-.413 2.189a4.665 4.665 0 0 1-.718-.225c-.714-.286-1.355-.583-2.019-.566-.664.018-1.366.023-1.804-.036-.438-.058-.649-.15-.649-.15s-.234.365.257 1.075c.42.607 1.055 1.047 1.644 1.18.589.134 1.972.18 2.785-.377.16-.109.317-.228.459-.34a8.717 8.717 0 0 0-.013.626c-.289.753-.571 1.993-.268 3.338 0-.001.701-.842.787-2.958.006-.144.009-.271.01-.383.052-.248.103-.518.148-.799.072.135.151.277.234.413.511.842 1.791 1.37 2.383 1.49.091.019.187.032.285.038Zm-1.12.745c-.188.055-.445.1-.713.059-.21-.031-.45-.11-.655-.316-.169-.168-.312-.419-.401-.789a9.837 9.837 0 0 0 .039-.82l.049-.243c.563.855 1.865 1.398 2.476 1.522.036.008.072.014.109.02l-.013.009c-.579.415-.76.503-.891.558Zm6.333-2.818c-.257.114-4.111 1.822-5.246 2.363.98-.775 3.017-3.59 3.699-4.774 1.062.661 1.468 1.109 1.623 1.441.101.217.09.38.096.515a.57.57 0 0 1-.172.455Zm-9.213 1.62a1.606 1.606 0 0 1-.19.096c-.954.414-2.126.61-4.728-.571-2.023-.918-3.024-2.157-3.371-2.666.476.161 1.471.473 2.157.524.282.021.703.068 1.167.125.021.209.109.486.345.829l.001.001c.451.651 1.134 1.119 1.765 1.262.622.141 2.083.182 2.942-.407a3.12 3.12 0 0 0 .132-.093l.001.179a6.052 6.052 0 0 0-.221.721Zm5.512-1.271a17.49 17.49 0 0 1-1.326-.589c.437.042 1.054.083 1.692.108-.121.162-.244.323-.366.481Zm.932-1.26c-.12.17-.245.343-.373.517-.241.018-.478.03-.709.038a29.05 29.05 0 0 1-.741-.048c.608-.065 1.228-.252 1.823-.507Zm.22-.315c-.809.382-1.679.648-2.507.648-.472 0-.833.018-1.139.039v.001c-.324-.031-.665-.039-1.019-.054a3.555 3.555 0 0 1-.152-.009c.102-.002.192-.006.249-.006.363 0 1.662.034 3.151-.589 1.508-.632 2.645-1.773 3.136-3.351.37-1.186.31-2.402.086-3.312.458-.336.86-.651 1.147-.91.501-.451.743-.733.848-.869.199.206.714.864.685 2.138-.036 1.611-.606 3.187-1.501 4.154a9.099 9.099 0 0 1-1.321 1.132 11.978 11.978 0 0 0-.644-.422l-.089-.055-.051.091c-.184.332-.5.825-.879 1.374ZM4.763 5.817c-.157 1.144.113 2.323.652 3.099.539.776 2.088 2.29 3.614 2.505.991.14 2.055.134 2.055.134s-.593-.576-1.114-1.66c-.521-1.085-.948-2.104-1.734-2.786-.785-.681-1.601-1.416-2.045-1.945-.444-.53-.59-.86-.59-.86s-.656.175-.838 1.513Zm14.301 4.549a9.162 9.162 0 0 0 1.3-1.12c.326-.352.611-.782.845-1.265 1.315.145 2.399.371 2.791.434 0 0-.679 1.971-3.945 3.022l-.016-.035c-.121-.26-.385-.594-.975-1.036Zm-11.634.859a8.537 8.537 0 0 1-.598-.224c-1.657-.693-2.91-1.944-3.449-3.678-.498-1.601-.292-3.251.091-4.269.225.544.758 1.34 1.262 2.01a3.58 3.58 0 0 0-.172.726c-.163 1.197.123 2.428.687 3.24.416.599 1.417 1.62 2.555 2.193-.128.002-.253.003-.376.002Zm-1.758-.077c-.958-.341-1.901-.787-2.697-1.368C-.07 7.559 0 6.827 0 6.827s1.558-.005 3.088.179c.03.126.065.
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": ["content.tooltips", "search.highlight", "navigation.tabs", "navigation.indexes", "navigation.prune"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
</body>
</html>