dhall-1.42.1: A configuration language guaranteed to terminate

Safe Haskell | None
Language | Haskell2010

Dhall.Substitution

Description

This module provides types and functions used in the substitution step which is done before type checking and normalization.

Synopsis

- type Substitutions s a = Map Text (Expr s a)
- empty :: Substitutions s a
- substitute :: Expr s a -> Substitutions s a -> Expr s a

# Documentation

type Substitutions s a = Map Text (Expr s a) #

Substitutions map variables to arbitrary Dhall expressions. Note that we use Dhall.Map.Map as an underlying structure. Hence we respect insertion order.

empty :: Substitutions s a #

An empty substitution map.

substitute :: Expr s a -> Substitutions s a -> Expr s a #

`substitute expr s` replaces all variables in `expr` (or its subexpression) with their substitute. For example, if the substitution map maps the variable `Foo` to the text "Foo" all occurrences of `Foo` with the text "Foo".

The substitutions will be done in the order they are inserted into the substitution map:

    {-# LANGUAGE OverloadedStrings #-}

    substitute (Dhall.Core.Var "Foo") (Dhall.Map.fromList [("Foo", Dhall.Core.Var "Bar"), ("Bar", Dhall.Core.Var "Baz")])

results in `Dhall.Core.Var "Baz"` since we first substitute "Foo" with "Bar" and then the resulting "Bar" with the final "Baz".