dhall-1.42.1: A configuration language guaranteed to terminate

Safe Haskell | None
Language | Haskell2010

Dhall.Lint

Contents

- Lint

Description

This module contains the implementation of the `dhall lint` command

Synopsis

- lint :: Eq s => Expr s Import -> Expr s Import
- removeUnusedBindings :: Eq a => Expr s a -> Maybe (Expr s a)
- fixAssert :: Expr s a -> Maybe (Expr s a)
- fixParentPath :: Expr s Import -> Maybe (Expr s Import)
- addPreludeExtensions :: Expr s Import -> Maybe (Expr s Import)
- removeLetInLet :: Expr s a -> Maybe (Expr s a)
- useToMap :: Expr s a -> Maybe (Expr s a)

# Lint

lint :: Eq s => Expr s Import -> Expr s Import #

Automatically improve a Dhall expression

Currently this:

- removes unused `let` bindings with `removeUnusedBindings`.
- fixes `let a = x ≡ y` to be `let a = assert : x ≡ y`
- consolidates nested `let` bindings to use a multiple-`let` binding with `removeLetInLet`
- fixes paths of the form `./../foo` to `../foo`

removeUnusedBindings :: Eq a => Expr s a -> Maybe (Expr s a) #

Remove unused `Let` bindings.

fixAssert :: Expr s a -> Maybe (Expr s a) #

Fix `Let` bindings that the user probably meant to be `assert`s

fixParentPath :: Expr s Import -> Maybe (Expr s Import) #

This transforms `./../foo` into `../foo`

addPreludeExtensions :: Expr s Import -> Maybe (Expr s Import) #

This transforms `https://prelude.dhall-lang.org/…/foo` to `https://prelude.dhall-lang.org/…/foo.dhall`

removeLetInLet :: Expr s a -> Maybe (Expr s a) #

The difference between

    let x = 1 let y = 2 in x + y

and

    let x = 1 in let y = 2 in x + y

is that in the second expression, the inner `Let` is wrapped by a `Note`.

We remove such a `Note` in order to consolidate nested let-blocks into a single one.

useToMap :: Expr s a -> Maybe (Expr s a) #

This replaces a record of key-value pairs with the equivalent use of `toMap`

This is currently not used by `dhall lint` because this would sort `Map` keys, which is not necessarily a behavior-preserving change, but is still made available as a convenient rewrite rule. For example, `{json,yaml}-to-dhall` use this rewrite to simplify their output.