dhall-1.41.2: A configuration language guaranteed to terminate
Safe HaskellNone
LanguageHaskell2010

Dhall.Lint

Contents

Description

This module contains the implementation of the dhall lint command

Synopsis

Lint

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

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) Source #

Remove unused Let bindings.

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

Fix Let bindings that the user probably meant to be asserts

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

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

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

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) Source #

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.