dhall-1.41.2: A configuration language guaranteed to terminate

Dhall.Core

Description

This module contains the core calculus for the Dhall language.

Dhall is essentially a fork of the morte compiler but with more built-in functionality, better error messages, and Haskell integration

Synopsis

# Syntax

data Const Source #

Constants for a pure type system

The axioms are:

⊦ Type : Kind
⊦ Kind : Sort

... and the valid rule pairs are:

⊦ Type ↝ Type : Type  -- Functions from terms to terms (ordinary functions)
⊦ Kind ↝ Type : Type  -- Functions from types to terms (type-polymorphic functions)
⊦ Sort ↝ Type : Type  -- Functions from kinds to terms
⊦ Kind ↝ Kind : Kind  -- Functions from types to types (type-level functions)
⊦ Sort ↝ Kind : Sort  -- Functions from kinds to types (kind-polymorphic functions)
⊦ Sort ↝ Sort : Sort  -- Functions from kinds to kinds (kind-level functions)

Note that Dhall does not support functions from terms to types and therefore Dhall is not a dependently typed language

Constructors

 Type Kind Sort

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methodssucc :: Const -> Const #pred :: Const -> Const #toEnum :: Int -> Const #enumFrom :: Const -> [Const] #enumFromThen :: Const -> Const -> [Const] #enumFromTo :: Const -> Const -> [Const] #enumFromThenTo :: Const -> Const -> Const -> [Const] # Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: Const -> Const -> Bool #(/=) :: Const -> Const -> Bool # Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Const -> c Const #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Const #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Const) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Const) #gmapT :: (forall b. Data b => b -> b) -> Const -> Const #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Const -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Const -> r #gmapQ :: (forall d. Data d => d -> u) -> Const -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> Const -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Const -> m Const #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Const -> m Const #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Const -> m Const # Source # Instance detailsDefined in Dhall.Syntax Methods(<) :: Const -> Const -> Bool #(<=) :: Const -> Const -> Bool #(>) :: Const -> Const -> Bool #(>=) :: Const -> Const -> Bool #max :: Const -> Const -> Const #min :: Const -> Const -> Const # Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Const -> ShowS #show :: Const -> String #showList :: [Const] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep Const :: Type -> Type # Methodsfrom :: Const -> Rep Const x #to :: Rep Const x -> Const # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Const -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: Const -> Doc ann #prettyList :: [Const] -> Doc ann # Source # Instance detailsDefined in Dhall.Syntax Methodslift :: Const -> Q Exp # type Rep Const Source # Instance detailsDefined in Dhall.Syntax type Rep Const = D1 ('MetaData "Const" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "Type" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Kind" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Sort" 'PrefixI 'False) (U1 :: Type -> Type)))

newtype Directory Source #

Internal representation of a directory that stores the path components in reverse order

In other words, the directory /foo/bar/baz is encoded as Directory { components = [ "baz", "bar", "foo" ] }

Constructors

 Directory Fieldscomponents :: [Text]

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [Directory] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep Directory :: Type -> Type # Methodsto :: Rep Directory x -> Directory # Source # Instance detailsDefined in Dhall.Syntax Methodsstimes :: Integral b => b -> Directory -> Directory # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Directory -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: Directory -> Doc ann #prettyList :: [Directory] -> Doc ann # type Rep Directory Source # Instance detailsDefined in Dhall.Syntax type Rep Directory = D1 ('MetaData "Directory" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'True) (C1 ('MetaCons "Directory" 'PrefixI 'True) (S1 ('MetaSel ('Just "components") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Text])))

data File Source #

A File is a directory followed by one additional path component representing the file name

Constructors

 File Fieldsdirectory :: Directory file :: Text

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: File -> File -> Bool #(/=) :: File -> File -> Bool # Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: File -> File -> Ordering #(<) :: File -> File -> Bool #(<=) :: File -> File -> Bool #(>) :: File -> File -> Bool #(>=) :: File -> File -> Bool #max :: File -> File -> File #min :: File -> File -> File # Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> File -> ShowS #show :: File -> String #showList :: [File] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep File :: Type -> Type # Methodsfrom :: File -> Rep File x #to :: Rep File x -> File # Source # Instance detailsDefined in Dhall.Syntax Methods(<>) :: File -> File -> File #stimes :: Integral b => b -> File -> File # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: File -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: File -> Doc ann #prettyList :: [File] -> Doc ann # type Rep File Source # Instance detailsDefined in Dhall.Syntax type Rep File = D1 ('MetaData "File" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "File" 'PrefixI 'True) (S1 ('MetaSel ('Just "directory") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Directory) :*: S1 ('MetaSel ('Just "file") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

The beginning of a file path which anchors subsequent path components

Constructors

 Absolute Absolute path Here Path relative to . Parent Path relative to .. Home Path relative to ~

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [FilePrefix] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep FilePrefix :: Type -> Type # Methods Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: FilePrefix -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: FilePrefix -> Doc ann #prettyList :: [FilePrefix] -> Doc ann # type Rep FilePrefix Source # Instance detailsDefined in Dhall.Syntax type Rep FilePrefix = D1 ('MetaData "FilePrefix" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) ((C1 ('MetaCons "Absolute" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Here" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Parent" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Home" 'PrefixI 'False) (U1 :: Type -> Type)))

data Import Source #

Reference to an external resource

Constructors

 Import Fields

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: Import -> Import -> Bool #(/=) :: Import -> Import -> Bool # Source # Instance detailsDefined in Dhall.Syntax Methods(<) :: Import -> Import -> Bool #(<=) :: Import -> Import -> Bool #(>) :: Import -> Import -> Bool #(>=) :: Import -> Import -> Bool #max :: Import -> Import -> Import #min :: Import -> Import -> Import # Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Import -> ShowS #showList :: [Import] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep Import :: Type -> Type # Methodsfrom :: Import -> Rep Import x #to :: Rep Import x -> Import # Source # Instance detailsDefined in Dhall.Syntax Methods(<>) :: Import -> Import -> Import #stimes :: Integral b => b -> Import -> Import # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Import -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: Import -> Doc ann #prettyList :: [Import] -> Doc ann # Source # Instance detailsDefined in Dhall.Binary Methods type Rep Import Source # Instance detailsDefined in Dhall.Syntax type Rep Import = D1 ('MetaData "Import" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "Import" 'PrefixI 'True) (S1 ('MetaSel ('Just "importHashed") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportHashed) :*: S1 ('MetaSel ('Just "importMode") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportMode)))

A ImportType extended with an optional hash for semantic integrity checks

Constructors

 ImportHashed Fields

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [ImportHashed] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep ImportHashed :: Type -> Type # Methods Source # Instance detailsDefined in Dhall.Syntax Methodsstimes :: Integral b => b -> ImportHashed -> ImportHashed # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: ImportHashed -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: ImportHashed -> Doc ann #prettyList :: [ImportHashed] -> Doc ann # type Rep ImportHashed Source # Instance detailsDefined in Dhall.Syntax type Rep ImportHashed = D1 ('MetaData "ImportHashed" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "ImportHashed" 'PrefixI 'True) (S1 ('MetaSel ('Just "hash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe SHA256Digest)) :*: S1 ('MetaSel ('Just "importType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportType)))

How to interpret the import's contents (i.e. as Dhall code or raw text)

Constructors

 Code RawText Location

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [ImportMode] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep ImportMode :: Type -> Type # Methods Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: ImportMode -> () # type Rep ImportMode Source # Instance detailsDefined in Dhall.Syntax type Rep ImportMode = D1 ('MetaData "ImportMode" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "Code" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "RawText" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Location" 'PrefixI 'False) (U1 :: Type -> Type)))

The type of import (i.e. local vs. remote vs. environment)

Constructors

 Local FilePrefix File Local path Remote URL URL of remote resource and optional headers stored in an import Env Text Environment variable Missing

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [ImportType] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep ImportType :: Type -> Type # Methods Source # Instance detailsDefined in Dhall.Syntax Methodsstimes :: Integral b => b -> ImportType -> ImportType # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: ImportType -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: ImportType -> Doc ann #prettyList :: [ImportType] -> Doc ann # type Rep ImportType Source # Instance detailsDefined in Dhall.Syntax type Rep ImportType = D1 ('MetaData "ImportType" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) ((C1 ('MetaCons "Local" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePrefix) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 File)) :+: C1 ('MetaCons "Remote" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 URL))) :+: (C1 ('MetaCons "Env" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "Missing" 'PrefixI 'False) (U1 :: Type -> Type)))

data URL Source #

This type stores all of the components of a remote import

Constructors

 URL Fieldsscheme :: Scheme authority :: Text path :: File query :: Maybe Text headers :: Maybe (Expr Src Import)

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: URL -> URL -> Bool #(/=) :: URL -> URL -> Bool # Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: URL -> URL -> Ordering #(<) :: URL -> URL -> Bool #(<=) :: URL -> URL -> Bool #(>) :: URL -> URL -> Bool #(>=) :: URL -> URL -> Bool #max :: URL -> URL -> URL #min :: URL -> URL -> URL # Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> URL -> ShowS #show :: URL -> String #showList :: [URL] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep URL :: Type -> Type # Methodsfrom :: URL -> Rep URL x #to :: Rep URL x -> URL # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: URL -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: URL -> Doc ann #prettyList :: [URL] -> Doc ann # type Rep URL Source # Instance detailsDefined in Dhall.Syntax type Rep URL = D1 ('MetaData "URL" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "URL" 'PrefixI 'True) ((S1 ('MetaSel ('Just "scheme") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Scheme) :*: S1 ('MetaSel ('Just "authority") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Just "path") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 File) :*: (S1 ('MetaSel ('Just "query") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "headers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Expr Src Import)))))))

data Scheme Source #

The URI scheme

Constructors

 HTTP HTTPS

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: Scheme -> Scheme -> Bool #(/=) :: Scheme -> Scheme -> Bool # Source # Instance detailsDefined in Dhall.Syntax Methods(<) :: Scheme -> Scheme -> Bool #(<=) :: Scheme -> Scheme -> Bool #(>) :: Scheme -> Scheme -> Bool #(>=) :: Scheme -> Scheme -> Bool #max :: Scheme -> Scheme -> Scheme #min :: Scheme -> Scheme -> Scheme # Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Scheme -> ShowS #showList :: [Scheme] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep Scheme :: Type -> Type # Methodsfrom :: Scheme -> Rep Scheme x #to :: Rep Scheme x -> Scheme # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Scheme -> () # type Rep Scheme Source # Instance detailsDefined in Dhall.Syntax type Rep Scheme = D1 ('MetaData "Scheme" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "HTTP" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "HTTPS" 'PrefixI 'False) (U1 :: Type -> Type))

newtype DhallDouble Source #

This wrapper around Double exists for its Eq instance which is defined via the binary encoding of Dhall Doubles.

Constructors

 DhallDouble FieldsgetDhallDouble :: Double

#### Instances

Instances details
 Source # This instance satisfies all the customary Eq laws except substitutivity.In particular:>>> nan = DhallDouble (0/0) >>> nan == nan True This instance is also consistent with with the binary encoding of Dhall Doubles:>>> toBytes n = Dhall.Binary.encodeExpression (DoubleLit n :: Expr Void Import) \a b -> (a == b) == (toBytes a == toBytes b) Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> DhallDouble -> c DhallDouble #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c DhallDouble #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c DhallDouble) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DhallDouble) #gmapT :: (forall b. Data b => b -> b) -> DhallDouble -> DhallDouble #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> DhallDouble -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> DhallDouble -> r #gmapQ :: (forall d. Data d => d -> u) -> DhallDouble -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> DhallDouble -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> DhallDouble -> m DhallDouble #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> DhallDouble -> m DhallDouble #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> DhallDouble -> m DhallDouble # Source # This instance relies on the Eq instance for DhallDouble but cannot satisfy the customary Ord laws when NaN is involved. Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [DhallDouble] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep DhallDouble :: Type -> Type # Methods Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: DhallDouble -> () # Source # Instance detailsDefined in Dhall.Syntax Methods type Rep DhallDouble Source # Instance detailsDefined in Dhall.Syntax type Rep DhallDouble = D1 ('MetaData "DhallDouble" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'True) (C1 ('MetaCons "DhallDouble" 'PrefixI 'True) (S1 ('MetaSel ('Just "getDhallDouble") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double)))

data Var Source #

Label for a bound variable

The Text field is the variable's name (i.e. "x").

The Int field disambiguates variables with the same name if there are multiple bound variables of the same name in scope. Zero refers to the nearest bound variable and the index increases by one for each bound variable of the same name going outward. The following diagram may help:

                              ┌──refers to──┐
│             │
v             │
λ(x : Type) → λ(y : Type) → λ(x : Type) → x@0

┌─────────────────refers to─────────────────┐
│                                           │
v                                           │
λ(x : Type) → λ(y : Type) → λ(x : Type) → x@1

This Int behaves like a De Bruijn index in the special case where all variables have the same name.

You can optionally omit the index if it is 0:

                              ┌─refers to─┐
│           │
v           │
λ(x : Type) → λ(y : Type) → λ(x : Type) → x

Zero indices are omitted when pretty-printing Vars and non-zero indices appear as a numeric suffix.

Constructors

 V Text !Int

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: Var -> Var -> Bool #(/=) :: Var -> Var -> Bool # Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Var -> c Var #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Var #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Var) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Var) #gmapT :: (forall b. Data b => b -> b) -> Var -> Var #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Var -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Var -> r #gmapQ :: (forall d. Data d => d -> u) -> Var -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> Var -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Var -> m Var #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Var -> m Var #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Var -> m Var # Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: Var -> Var -> Ordering #(<) :: Var -> Var -> Bool #(<=) :: Var -> Var -> Bool #(>) :: Var -> Var -> Bool #(>=) :: Var -> Var -> Bool #max :: Var -> Var -> Var #min :: Var -> Var -> Var # Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Var -> ShowS #show :: Var -> String #showList :: [Var] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep Var :: Type -> Type # Methodsfrom :: Var -> Rep Var x #to :: Rep Var x -> Var # Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Var -> () # Source # Instance detailsDefined in Dhall.Syntax Methodspretty :: Var -> Doc ann #prettyList :: [Var] -> Doc ann # Source # Instance detailsDefined in Dhall.Syntax Methodslift :: Var -> Q Exp #liftTyped :: Var -> Q (TExp Var) # type Rep Var Source # Instance detailsDefined in Dhall.Syntax type Rep Var = D1 ('MetaData "Var" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "V" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int)))

data Binding s a Source #

Record the binding part of a let expression.

For example,

let {- A -} x {- B -} : {- C -} Bool = {- D -} True in x

… will be instantiated as follows:

• bindingSrc0 corresponds to the A comment.
• variable is "x"
• bindingSrc1 corresponds to the B comment.
• annotation is Just a pair, corresponding to the C comment and Bool.
• bindingSrc2 corresponds to the D comment.
• value corresponds to True.

Constructors

 Binding FieldsbindingSrc0 :: Maybe s variable :: Text bindingSrc1 :: Maybe s annotation :: Maybe (Maybe s, Expr s a) bindingSrc2 :: Maybe s value :: Expr s a

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methodsbimap :: (a -> b) -> (c -> d) -> Binding a c -> Binding b d #first :: (a -> b) -> Binding a c -> Binding b c #second :: (b -> c) -> Binding a b -> Binding a c # (Lift s, Lift a) => Lift (Binding s a :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: Binding s a -> Q Exp #liftTyped :: Binding s a -> Q (TExp (Binding s a)) # Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> Binding s a -> Binding s b #(<$) :: a -> Binding s b -> Binding s a # Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => Binding s m -> m #foldMap :: Monoid m => (a -> m) -> Binding s a -> m #foldMap' :: Monoid m => (a -> m) -> Binding s a -> m #foldr :: (a -> b -> b) -> b -> Binding s a -> b #foldr' :: (a -> b -> b) -> b -> Binding s a -> b #foldl :: (b -> a -> b) -> b -> Binding s a -> b #foldl' :: (b -> a -> b) -> b -> Binding s a -> b #foldr1 :: (a -> a -> a) -> Binding s a -> a #foldl1 :: (a -> a -> a) -> Binding s a -> a #toList :: Binding s a -> [a] #null :: Binding s a -> Bool #length :: Binding s a -> Int #elem :: Eq a => a -> Binding s a -> Bool #maximum :: Ord a => Binding s a -> a #minimum :: Ord a => Binding s a -> a #sum :: Num a => Binding s a -> a #product :: Num a => Binding s a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> Binding s a -> f (Binding s b) #sequenceA :: Applicative f => Binding s (f a) -> f (Binding s a) #mapM :: Monad m => (a -> m b) -> Binding s a -> m (Binding s b) #sequence :: Monad m => Binding s (m a) -> m (Binding s a) # (Eq s, Eq a) => Eq (Binding s a) Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: Binding s a -> Binding s a -> Bool #(/=) :: Binding s a -> Binding s a -> Bool # (Data s, Data a) => Data (Binding s a) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Binding s a -> c (Binding s a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Binding s a) #toConstr :: Binding s a -> Constr #dataTypeOf :: Binding s a -> DataType #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Binding s a)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Binding s a)) #gmapT :: (forall b. Data b => b -> b) -> Binding s a -> Binding s a #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Binding s a -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Binding s a -> r #gmapQ :: (forall d. Data d => d -> u) -> Binding s a -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> Binding s a -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Binding s a -> m (Binding s a) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Binding s a -> m (Binding s a) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Binding s a -> m (Binding s a) # (Ord s, Ord a) => Ord (Binding s a) Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: Binding s a -> Binding s a -> Ordering #(<) :: Binding s a -> Binding s a -> Bool #(<=) :: Binding s a -> Binding s a -> Bool #(>) :: Binding s a -> Binding s a -> Bool #(>=) :: Binding s a -> Binding s a -> Bool #max :: Binding s a -> Binding s a -> Binding s a #min :: Binding s a -> Binding s a -> Binding s a # (Show s, Show a) => Show (Binding s a) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Binding s a -> ShowS #show :: Binding s a -> String #showList :: [Binding s a] -> ShowS # Generic (Binding s a) Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (Binding s a) :: Type -> Type # Methodsfrom :: Binding s a -> Rep (Binding s a) x #to :: Rep (Binding s a) x -> Binding s a # (NFData s, NFData a) => NFData (Binding s a) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Binding s a -> () # type Rep (Binding s a) Source # Instance detailsDefined in Dhall.Syntax type Rep (Binding s a) = D1 ('MetaData "Binding" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "Binding" 'PrefixI 'True) ((S1 ('MetaSel ('Just "bindingSrc0") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: (S1 ('MetaSel ('Just "variable") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "bindingSrc1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)))) :*: (S1 ('MetaSel ('Just "annotation") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Maybe s, Expr s a))) :*: (S1 ('MetaSel ('Just "bindingSrc2") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: S1 ('MetaSel ('Just "value") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))))) makeBinding :: Text -> Expr s a -> Binding s a Source # Construct a Binding with no source information and no type annotation. data Chunks s a Source # The body of an interpolated Text literal Constructors  Chunks [(Text, Expr s a)] Text #### Instances Instances details  (Lift s, Lift a) => Lift (Chunks s a :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: Chunks s a -> Q Exp #liftTyped :: Chunks s a -> Q (TExp (Chunks s a)) # Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> Chunks s a -> Chunks s b #(<$) :: a -> Chunks s b -> Chunks s a # Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => Chunks s m -> m #foldMap :: Monoid m => (a -> m) -> Chunks s a -> m #foldMap' :: Monoid m => (a -> m) -> Chunks s a -> m #foldr :: (a -> b -> b) -> b -> Chunks s a -> b #foldr' :: (a -> b -> b) -> b -> Chunks s a -> b #foldl :: (b -> a -> b) -> b -> Chunks s a -> b #foldl' :: (b -> a -> b) -> b -> Chunks s a -> b #foldr1 :: (a -> a -> a) -> Chunks s a -> a #foldl1 :: (a -> a -> a) -> Chunks s a -> a #toList :: Chunks s a -> [a] #null :: Chunks s a -> Bool #length :: Chunks s a -> Int #elem :: Eq a => a -> Chunks s a -> Bool #maximum :: Ord a => Chunks s a -> a #minimum :: Ord a => Chunks s a -> a #sum :: Num a => Chunks s a -> a #product :: Num a => Chunks s a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> Chunks s a -> f (Chunks s b) #sequenceA :: Applicative f => Chunks s (f a) -> f (Chunks s a) #mapM :: Monad m => (a -> m b) -> Chunks s a -> m (Chunks s b) #sequence :: Monad m => Chunks s (m a) -> m (Chunks s a) # (Eq s, Eq a) => Eq (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: Chunks s a -> Chunks s a -> Bool #(/=) :: Chunks s a -> Chunks s a -> Bool # (Data s, Data a) => Data (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Chunks s a -> c (Chunks s a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Chunks s a) #toConstr :: Chunks s a -> Constr #dataTypeOf :: Chunks s a -> DataType #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Chunks s a)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Chunks s a)) #gmapT :: (forall b. Data b => b -> b) -> Chunks s a -> Chunks s a #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Chunks s a -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Chunks s a -> r #gmapQ :: (forall d. Data d => d -> u) -> Chunks s a -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> Chunks s a -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Chunks s a -> m (Chunks s a) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Chunks s a -> m (Chunks s a) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Chunks s a -> m (Chunks s a) # (Ord s, Ord a) => Ord (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: Chunks s a -> Chunks s a -> Ordering #(<) :: Chunks s a -> Chunks s a -> Bool #(<=) :: Chunks s a -> Chunks s a -> Bool #(>) :: Chunks s a -> Chunks s a -> Bool #(>=) :: Chunks s a -> Chunks s a -> Bool #max :: Chunks s a -> Chunks s a -> Chunks s a #min :: Chunks s a -> Chunks s a -> Chunks s a # (Show s, Show a) => Show (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Chunks s a -> ShowS #show :: Chunks s a -> String #showList :: [Chunks s a] -> ShowS # IsString (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax MethodsfromString :: String -> Chunks s a # Generic (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (Chunks s a) :: Type -> Type # Methodsfrom :: Chunks s a -> Rep (Chunks s a) x #to :: Rep (Chunks s a) x -> Chunks s a # Semigroup (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Methods(<>) :: Chunks s a -> Chunks s a -> Chunks s a #sconcat :: NonEmpty (Chunks s a) -> Chunks s a #stimes :: Integral b => b -> Chunks s a -> Chunks s a # Monoid (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Methodsmempty :: Chunks s a #mappend :: Chunks s a -> Chunks s a -> Chunks s a #mconcat :: [Chunks s a] -> Chunks s a # (NFData s, NFData a) => NFData (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Chunks s a -> () # type Rep (Chunks s a) Source # Instance detailsDefined in Dhall.Syntax type Rep (Chunks s a) = D1 ('MetaData "Chunks" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "Chunks" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Expr s a)]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data PreferAnnotation s a Source #

Used to record the origin of a // operator (i.e. from source code or a product of desugaring)

Constructors

 PreferFromSource PreferFromWith (Expr s a) Stores the original with expression PreferFromCompletion

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methodsbimap :: (a -> b) -> (c -> d) -> PreferAnnotation a c -> PreferAnnotation b d #first :: (a -> b) -> PreferAnnotation a c -> PreferAnnotation b c #second :: (b -> c) -> PreferAnnotation a b -> PreferAnnotation a c # (Lift s, Lift a) => Lift (PreferAnnotation s a :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: PreferAnnotation s a -> Q Exp #liftTyped :: PreferAnnotation s a -> Q (TExp (PreferAnnotation s a)) # Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> PreferAnnotation s a -> PreferAnnotation s b #(<$) :: a -> PreferAnnotation s b -> PreferAnnotation s a # Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => PreferAnnotation s m -> m #foldMap :: Monoid m => (a -> m) -> PreferAnnotation s a -> m #foldMap' :: Monoid m => (a -> m) -> PreferAnnotation s a -> m #foldr :: (a -> b -> b) -> b -> PreferAnnotation s a -> b #foldr' :: (a -> b -> b) -> b -> PreferAnnotation s a -> b #foldl :: (b -> a -> b) -> b -> PreferAnnotation s a -> b #foldl' :: (b -> a -> b) -> b -> PreferAnnotation s a -> b #foldr1 :: (a -> a -> a) -> PreferAnnotation s a -> a #foldl1 :: (a -> a -> a) -> PreferAnnotation s a -> a #toList :: PreferAnnotation s a -> [a] #null :: PreferAnnotation s a -> Bool #length :: PreferAnnotation s a -> Int #elem :: Eq a => a -> PreferAnnotation s a -> Bool #maximum :: Ord a => PreferAnnotation s a -> a #minimum :: Ord a => PreferAnnotation s a -> a #sum :: Num a => PreferAnnotation s a -> a #product :: Num a => PreferAnnotation s a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> PreferAnnotation s a -> f (PreferAnnotation s b) #sequenceA :: Applicative f => PreferAnnotation s (f a) -> f (PreferAnnotation s a) #mapM :: Monad m => (a -> m b) -> PreferAnnotation s a -> m (PreferAnnotation s b) #sequence :: Monad m => PreferAnnotation s (m a) -> m (PreferAnnotation s a) # (Eq s, Eq a) => Eq (PreferAnnotation s a) Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: PreferAnnotation s a -> PreferAnnotation s a -> Bool #(/=) :: PreferAnnotation s a -> PreferAnnotation s a -> Bool # (Data s, Data a) => Data (PreferAnnotation s a) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PreferAnnotation s a -> c (PreferAnnotation s a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (PreferAnnotation s a) #toConstr :: PreferAnnotation s a -> Constr #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (PreferAnnotation s a)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (PreferAnnotation s a)) #gmapT :: (forall b. Data b => b -> b) -> PreferAnnotation s a -> PreferAnnotation s a #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PreferAnnotation s a -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PreferAnnotation s a -> r #gmapQ :: (forall d. Data d => d -> u) -> PreferAnnotation s a -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> PreferAnnotation s a -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> PreferAnnotation s a -> m (PreferAnnotation s a) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PreferAnnotation s a -> m (PreferAnnotation s a) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PreferAnnotation s a -> m (PreferAnnotation s a) # (Ord s, Ord a) => Ord (PreferAnnotation s a) Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: PreferAnnotation s a -> PreferAnnotation s a -> Ordering #(<) :: PreferAnnotation s a -> PreferAnnotation s a -> Bool #(<=) :: PreferAnnotation s a -> PreferAnnotation s a -> Bool #(>) :: PreferAnnotation s a -> PreferAnnotation s a -> Bool #(>=) :: PreferAnnotation s a -> PreferAnnotation s a -> Bool #max :: PreferAnnotation s a -> PreferAnnotation s a -> PreferAnnotation s a #min :: PreferAnnotation s a -> PreferAnnotation s a -> PreferAnnotation s a # (Show s, Show a) => Show (PreferAnnotation s a) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> PreferAnnotation s a -> ShowS #show :: PreferAnnotation s a -> String #showList :: [PreferAnnotation s a] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (PreferAnnotation s a) :: Type -> Type # Methodsfrom :: PreferAnnotation s a -> Rep (PreferAnnotation s a) x #to :: Rep (PreferAnnotation s a) x -> PreferAnnotation s a # (NFData s, NFData a) => NFData (PreferAnnotation s a) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: PreferAnnotation s a -> () # type Rep (PreferAnnotation s a) Source # Instance detailsDefined in Dhall.Syntax type Rep (PreferAnnotation s a) = D1 ('MetaData "PreferAnnotation" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "PreferFromSource" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "PreferFromWith" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "PreferFromCompletion" 'PrefixI 'False) (U1 :: Type -> Type))) data RecordField s a Source # Record the field of a record-type and record-literal expression. The reason why we use the same ADT for both of them is because they store the same information. For example, { {- A -} x {- B -} : {- C -} T } ... or { {- A -} x {- B -} = {- C -} T } will be instantiated as follows: • recordFieldSrc0 corresponds to the A comment. • recordFieldValue is T • recordFieldSrc1 corresponds to the B comment. • recordFieldSrc2 corresponds to the C comment. Although the A comment isn't annotating the T Record Field, this is the best place to keep these comments. Note that recordFieldSrc2 is always Nothing when the RecordField is for a punned entry, because there is no = sign. For example, { {- A -} x {- B -} } will be instantiated as follows: • recordFieldSrc0 corresponds to the A comment. • recordFieldValue corresponds to (Var "x") • recordFieldSrc1 corresponds to the B comment. • recordFieldSrc2 will be Nothing The labels involved in a record using dot-syntax like in this example: { {- A -} a {- B -} . {- C -} b {- D -} . {- E -} c {- F -} = {- G -} e } will be instantiated as follows: • For both the a and b field, recordfieldSrc2 is Nothing • For the a field: • recordFieldSrc0 corresponds to the A comment • recordFieldSrc1 corresponds to the B comment • For the b field: • recordFieldSrc0 corresponds to the C comment • recordFieldSrc1 corresponds to the D comment • For the c field: • recordFieldSrc0 corresponds to the E comment • recordFieldSrc1 corresponds to the F comment • recordFieldSrc2 corresponds to the G comment That is, for every label except the last one the semantics of recordFieldSrc0 and recordFieldSrc1 are the same from a regular record label but recordFieldSrc2 is always Nothing. For the last keyword, all srcs are Just Constructors  RecordField FieldsrecordFieldSrc0 :: Maybe s recordFieldValue :: Expr s a recordFieldSrc1 :: Maybe s recordFieldSrc2 :: Maybe s #### Instances Instances details  Source # Instance detailsDefined in Dhall.Syntax Methodsbimap :: (a -> b) -> (c -> d) -> RecordField a c -> RecordField b d #first :: (a -> b) -> RecordField a c -> RecordField b c #second :: (b -> c) -> RecordField a b -> RecordField a c # (Lift s, Lift a) => Lift (RecordField s a :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: RecordField s a -> Q Exp #liftTyped :: RecordField s a -> Q (TExp (RecordField s a)) # Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> RecordField s a -> RecordField s b #(<$) :: a -> RecordField s b -> RecordField s a # Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => RecordField s m -> m #foldMap :: Monoid m => (a -> m) -> RecordField s a -> m #foldMap' :: Monoid m => (a -> m) -> RecordField s a -> m #foldr :: (a -> b -> b) -> b -> RecordField s a -> b #foldr' :: (a -> b -> b) -> b -> RecordField s a -> b #foldl :: (b -> a -> b) -> b -> RecordField s a -> b #foldl' :: (b -> a -> b) -> b -> RecordField s a -> b #foldr1 :: (a -> a -> a) -> RecordField s a -> a #foldl1 :: (a -> a -> a) -> RecordField s a -> a #toList :: RecordField s a -> [a] #null :: RecordField s a -> Bool #length :: RecordField s a -> Int #elem :: Eq a => a -> RecordField s a -> Bool #maximum :: Ord a => RecordField s a -> a #minimum :: Ord a => RecordField s a -> a #sum :: Num a => RecordField s a -> a #product :: Num a => RecordField s a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> RecordField s a -> f (RecordField s b) #sequenceA :: Applicative f => RecordField s (f a) -> f (RecordField s a) #mapM :: Monad m => (a -> m b) -> RecordField s a -> m (RecordField s b) #sequence :: Monad m => RecordField s (m a) -> m (RecordField s a) # (Eq s, Eq a) => Eq (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: RecordField s a -> RecordField s a -> Bool #(/=) :: RecordField s a -> RecordField s a -> Bool # (Data s, Data a) => Data (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> RecordField s a -> c (RecordField s a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (RecordField s a) #toConstr :: RecordField s a -> Constr #dataTypeOf :: RecordField s a -> DataType #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (RecordField s a)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (RecordField s a)) #gmapT :: (forall b. Data b => b -> b) -> RecordField s a -> RecordField s a #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RecordField s a -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RecordField s a -> r #gmapQ :: (forall d. Data d => d -> u) -> RecordField s a -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> RecordField s a -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> RecordField s a -> m (RecordField s a) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> RecordField s a -> m (RecordField s a) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> RecordField s a -> m (RecordField s a) # (Ord s, Ord a) => Ord (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: RecordField s a -> RecordField s a -> Ordering #(<) :: RecordField s a -> RecordField s a -> Bool #(<=) :: RecordField s a -> RecordField s a -> Bool #(>) :: RecordField s a -> RecordField s a -> Bool #(>=) :: RecordField s a -> RecordField s a -> Bool #max :: RecordField s a -> RecordField s a -> RecordField s a #min :: RecordField s a -> RecordField s a -> RecordField s a # (Show s, Show a) => Show (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> RecordField s a -> ShowS #show :: RecordField s a -> String #showList :: [RecordField s a] -> ShowS # Generic (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (RecordField s a) :: Type -> Type # Methodsfrom :: RecordField s a -> Rep (RecordField s a) x #to :: Rep (RecordField s a) x -> RecordField s a # (NFData s, NFData a) => NFData (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: RecordField s a -> () # type Rep (RecordField s a) Source # Instance detailsDefined in Dhall.Syntax type Rep (RecordField s a) = D1 ('MetaData "RecordField" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "RecordField" 'PrefixI 'True) ((S1 ('MetaSel ('Just "recordFieldSrc0") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: S1 ('MetaSel ('Just "recordFieldValue") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :*: (S1 ('MetaSel ('Just "recordFieldSrc1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: S1 ('MetaSel ('Just "recordFieldSrc2") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)))))

makeRecordField :: Expr s a -> RecordField s a Source #

Construct a RecordField with no src information

data FunctionBinding s a Source #

Record the label of a function or a function-type expression

For example,

λ({- A -} a {- B -} : {- C -} T) -> e

… will be instantiated as follows:

• functionBindingSrc0 corresponds to the A comment
• functionBindingVariable is a
• functionBindingSrc1 corresponds to the B comment
• functionBindingSrc2 corresponds to the C comment
• functionBindingAnnotation is T

Constructors

 FunctionBinding Fields

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methodsbimap :: (a -> b) -> (c -> d) -> FunctionBinding a c -> FunctionBinding b d #first :: (a -> b) -> FunctionBinding a c -> FunctionBinding b c #second :: (b -> c) -> FunctionBinding a b -> FunctionBinding a c # (Lift s, Lift a) => Lift (FunctionBinding s a :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: FunctionBinding s a -> Q Exp #liftTyped :: FunctionBinding s a -> Q (TExp (FunctionBinding s a)) # Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> FunctionBinding s a -> FunctionBinding s b #(<$) :: a -> FunctionBinding s b -> FunctionBinding s a # Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => FunctionBinding s m -> m #foldMap :: Monoid m => (a -> m) -> FunctionBinding s a -> m #foldMap' :: Monoid m => (a -> m) -> FunctionBinding s a -> m #foldr :: (a -> b -> b) -> b -> FunctionBinding s a -> b #foldr' :: (a -> b -> b) -> b -> FunctionBinding s a -> b #foldl :: (b -> a -> b) -> b -> FunctionBinding s a -> b #foldl' :: (b -> a -> b) -> b -> FunctionBinding s a -> b #foldr1 :: (a -> a -> a) -> FunctionBinding s a -> a #foldl1 :: (a -> a -> a) -> FunctionBinding s a -> a #toList :: FunctionBinding s a -> [a] #null :: FunctionBinding s a -> Bool #length :: FunctionBinding s a -> Int #elem :: Eq a => a -> FunctionBinding s a -> Bool #maximum :: Ord a => FunctionBinding s a -> a #minimum :: Ord a => FunctionBinding s a -> a #sum :: Num a => FunctionBinding s a -> a #product :: Num a => FunctionBinding s a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> FunctionBinding s a -> f (FunctionBinding s b) #sequenceA :: Applicative f => FunctionBinding s (f a) -> f (FunctionBinding s a) #mapM :: Monad m => (a -> m b) -> FunctionBinding s a -> m (FunctionBinding s b) #sequence :: Monad m => FunctionBinding s (m a) -> m (FunctionBinding s a) # (Eq s, Eq a) => Eq (FunctionBinding s a) Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: FunctionBinding s a -> FunctionBinding s a -> Bool #(/=) :: FunctionBinding s a -> FunctionBinding s a -> Bool # (Data s, Data a) => Data (FunctionBinding s a) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FunctionBinding s a -> c (FunctionBinding s a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (FunctionBinding s a) #toConstr :: FunctionBinding s a -> Constr #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (FunctionBinding s a)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (FunctionBinding s a)) #gmapT :: (forall b. Data b => b -> b) -> FunctionBinding s a -> FunctionBinding s a #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FunctionBinding s a -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FunctionBinding s a -> r #gmapQ :: (forall d. Data d => d -> u) -> FunctionBinding s a -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> FunctionBinding s a -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> FunctionBinding s a -> m (FunctionBinding s a) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FunctionBinding s a -> m (FunctionBinding s a) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FunctionBinding s a -> m (FunctionBinding s a) # (Ord s, Ord a) => Ord (FunctionBinding s a) Source # Instance detailsDefined in Dhall.Syntax Methodscompare :: FunctionBinding s a -> FunctionBinding s a -> Ordering #(<) :: FunctionBinding s a -> FunctionBinding s a -> Bool #(<=) :: FunctionBinding s a -> FunctionBinding s a -> Bool #(>) :: FunctionBinding s a -> FunctionBinding s a -> Bool #(>=) :: FunctionBinding s a -> FunctionBinding s a -> Bool #max :: FunctionBinding s a -> FunctionBinding s a -> FunctionBinding s a #min :: FunctionBinding s a -> FunctionBinding s a -> FunctionBinding s a # (Show s, Show a) => Show (FunctionBinding s a) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> FunctionBinding s a -> ShowS #show :: FunctionBinding s a -> String #showList :: [FunctionBinding s a] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (FunctionBinding s a) :: Type -> Type # Methodsfrom :: FunctionBinding s a -> Rep (FunctionBinding s a) x #to :: Rep (FunctionBinding s a) x -> FunctionBinding s a # (NFData s, NFData a) => NFData (FunctionBinding s a) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: FunctionBinding s a -> () # type Rep (FunctionBinding s a) Source # Instance detailsDefined in Dhall.Syntax type Rep (FunctionBinding s a) = D1 ('MetaData "FunctionBinding" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "FunctionBinding" 'PrefixI 'True) ((S1 ('MetaSel ('Just "functionBindingSrc0") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: S1 ('MetaSel ('Just "functionBindingVariable") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Just "functionBindingSrc1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: (S1 ('MetaSel ('Just "functionBindingSrc2") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: S1 ('MetaSel ('Just "functionBindingAnnotation") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))))) makeFunctionBinding :: Text -> Expr s a -> FunctionBinding s a Source # Smart constructor for FunctionBinding with no src information Record the field on a selector-expression For example, e . {- A -} x {- B -} … will be instantiated as follows: • fieldSelectionSrc0 corresponds to the A comment • fieldSelectionLabel corresponds to x • fieldSelectionSrc1 corresponds to the B comment Given our limitation that not all expressions recover their whitespaces, the purpose of fieldSelectionSrc1 is to save the SourcePos where the fieldSelectionLabel ends, but we still use a 'Maybe Src' (s = Src) to be consistent with similar data types such as Binding, for example. Constructors  FieldSelection Fields #### Instances Instances details  Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> FieldSelection a -> FieldSelection b #(<$) :: a -> FieldSelection b -> FieldSelection a # Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => FieldSelection m -> m #foldMap :: Monoid m => (a -> m) -> FieldSelection a -> m #foldMap' :: Monoid m => (a -> m) -> FieldSelection a -> m #foldr :: (a -> b -> b) -> b -> FieldSelection a -> b #foldr' :: (a -> b -> b) -> b -> FieldSelection a -> b #foldl :: (b -> a -> b) -> b -> FieldSelection a -> b #foldl' :: (b -> a -> b) -> b -> FieldSelection a -> b #foldr1 :: (a -> a -> a) -> FieldSelection a -> a #foldl1 :: (a -> a -> a) -> FieldSelection a -> a #toList :: FieldSelection a -> [a] #null :: FieldSelection a -> Bool #length :: FieldSelection a -> Int #elem :: Eq a => a -> FieldSelection a -> Bool #maximum :: Ord a => FieldSelection a -> a #minimum :: Ord a => FieldSelection a -> a #sum :: Num a => FieldSelection a -> a #product :: Num a => FieldSelection a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> FieldSelection a -> f (FieldSelection b) #sequenceA :: Applicative f => FieldSelection (f a) -> f (FieldSelection a) #mapM :: Monad m => (a -> m b) -> FieldSelection a -> m (FieldSelection b) #sequence :: Monad m => FieldSelection (m a) -> m (FieldSelection a) # Lift s => Lift (FieldSelection s :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: FieldSelection s -> Q Exp #liftTyped :: FieldSelection s -> Q (TExp (FieldSelection s)) # Eq s => Eq (FieldSelection s) Source # Instance detailsDefined in Dhall.Syntax Methods(==) :: FieldSelection s -> FieldSelection s -> Bool #(/=) :: FieldSelection s -> FieldSelection s -> Bool # Data s => Data (FieldSelection s) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FieldSelection s -> c (FieldSelection s) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (FieldSelection s) #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (FieldSelection s)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (FieldSelection s)) #gmapT :: (forall b. Data b => b -> b) -> FieldSelection s -> FieldSelection s #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FieldSelection s -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FieldSelection s -> r #gmapQ :: (forall d. Data d => d -> u) -> FieldSelection s -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> FieldSelection s -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> FieldSelection s -> m (FieldSelection s) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FieldSelection s -> m (FieldSelection s) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FieldSelection s -> m (FieldSelection s) # Ord s => Ord (FieldSelection s) Source # Instance detailsDefined in Dhall.Syntax Methods(<) :: FieldSelection s -> FieldSelection s -> Bool #(<=) :: FieldSelection s -> FieldSelection s -> Bool #(>) :: FieldSelection s -> FieldSelection s -> Bool #(>=) :: FieldSelection s -> FieldSelection s -> Bool # Show s => Show (FieldSelection s) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> FieldSelection s -> ShowS #showList :: [FieldSelection s] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (FieldSelection s) :: Type -> Type # Methodsfrom :: FieldSelection s -> Rep (FieldSelection s) x #to :: Rep (FieldSelection s) x -> FieldSelection s # NFData s => NFData (FieldSelection s) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: FieldSelection s -> () # type Rep (FieldSelection s) Source # Instance detailsDefined in Dhall.Syntax type Rep (FieldSelection s) = D1 ('MetaData "FieldSelection" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "FieldSelection" 'PrefixI 'True) (S1 ('MetaSel ('Just "fieldSelectionSrc0") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)) :*: (S1 ('MetaSel ('Just "fieldSelectionLabel") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: S1 ('MetaSel ('Just "fieldSelectionSrc1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe s)))))

Smart constructor for FieldSelection with no src information

A path component for a with expression

Constructors

 WithLabel Text WithQuestion

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> WithComponent -> c WithComponent #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c WithComponent #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c WithComponent) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c WithComponent) #gmapT :: (forall b. Data b => b -> b) -> WithComponent -> WithComponent #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> WithComponent -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> WithComponent -> r #gmapQ :: (forall d. Data d => d -> u) -> WithComponent -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> WithComponent -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> WithComponent -> m WithComponent #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> WithComponent -> m WithComponent #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> WithComponent -> m WithComponent # Source # Instance detailsDefined in Dhall.Syntax Methods Source # Instance detailsDefined in Dhall.Syntax MethodsshowList :: [WithComponent] -> ShowS # Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep WithComponent :: Type -> Type # Methods Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: WithComponent -> () # Source # Instance detailsDefined in Dhall.Syntax Methods type Rep WithComponent Source # Instance detailsDefined in Dhall.Syntax type Rep WithComponent = D1 ('MetaData "WithComponent" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) (C1 ('MetaCons "WithLabel" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "WithQuestion" 'PrefixI 'False) (U1 :: Type -> Type))

data Expr s a Source #

Syntax tree for expressions

The s type parameter is used to track the presence or absence of Src spans:

• If s = Src then the code may contains Src spans (either in a Note constructor or inline within another constructor, like Let)
• If s = Void then the code has no Src spans

The a type parameter is used to track the presence or absence of imports

• If a = Import then the code may contain unresolved Imports
• If a = Void then the code has no Imports

Constructors

 Const Const Const c ~ c Var Var Var (V x 0) ~ x Var (V x n) ~ x@n Lam (Maybe CharacterSet) (FunctionBinding s a) (Expr s a) Lam _ (FunctionBinding _ "x" _ _ A) b ~ λ(x : A) -> b Pi (Maybe CharacterSet) Text (Expr s a) (Expr s a) Pi _ "_" A B ~ A -> B Pi _ x A B ~ ∀(x : A) -> B App (Expr s a) (Expr s a) App f a ~ f a Let (Binding s a) (Expr s a) Let (Binding _ x _ Nothing _ r) e ~ let x = r in e Let (Binding _ x _ (Just t ) _ r) e ~ let x : t = r in eThe difference betweenlet x = a let y = b in eandlet x = a in let y = b in eis only an additional Note around Let "y" … in the second example.See MultiLet for a representation of let-blocks that mirrors the source code more closely. Annot (Expr s a) (Expr s a) Annot x t ~ x : t Bool Bool ~ Bool BoolLit Bool BoolLit b ~ b BoolAnd (Expr s a) (Expr s a) BoolAnd x y ~ x && y BoolOr (Expr s a) (Expr s a) BoolOr x y ~ x || y BoolEQ (Expr s a) (Expr s a) BoolEQ x y ~ x == y BoolNE (Expr s a) (Expr s a) BoolNE x y ~ x != y BoolIf (Expr s a) (Expr s a) (Expr s a) BoolIf x y z ~ if x then y else z Natural Natural ~ Natural NaturalLit Natural NaturalLit n ~ n NaturalFold NaturalFold ~ Natural/fold NaturalBuild NaturalBuild ~ Natural/build NaturalIsZero NaturalIsZero ~ Natural/isZero NaturalEven NaturalEven ~ Natural/even NaturalOdd NaturalOdd ~ Natural/odd NaturalToInteger NaturalToInteger ~ Natural/toInteger NaturalShow NaturalShow ~ Natural/show NaturalSubtract NaturalSubtract ~ Natural/subtract NaturalPlus (Expr s a) (Expr s a) NaturalPlus x y ~ x + y NaturalTimes (Expr s a) (Expr s a) NaturalTimes x y ~ x * y Integer Integer ~ Integer IntegerLit Integer IntegerLit n ~ ±n IntegerClamp IntegerClamp ~ Integer/clamp IntegerNegate IntegerNegate ~ Integer/negate IntegerShow IntegerShow ~ Integer/show IntegerToDouble IntegerToDouble ~ Integer/toDouble Double Double ~ Double DoubleLit DhallDouble DoubleLit n ~ n DoubleShow DoubleShow ~ Double/show Text Text ~ Text TextLit (Chunks s a) TextLit (Chunks [(t1, e1), (t2, e2)] t3) ~ "t1${e1}t2${e2}t3" TextAppend (Expr s a) (Expr s a) TextAppend x y ~ x ++ y TextReplace TextReplace ~ Text/replace TextShow TextShow ~ Text/show Date Date ~ Date DateLiteral Day DateLiteral (fromGregorian _YYYY _MM _DD) ~ YYYY-MM-DD Time Time ~ Time TimeLiteral TimeOfDay Word Precision | > TimeZone ~ TimeZone TimeZone TimeZoneLiteral TimeZone TimeZoneLiteral (TimeZone ( 60 * _HH + _MM) _ _) ~ +HH:MM| > TimeZoneLiteral (TimeZone (-60 * _HH + _MM) _ _) ~ -HH:MM List List ~ List ListLit (Maybe (Expr s a)) (Seq (Expr s a)) ListLit (Just t ) [] ~ [] : t ListLit Nothing [x, y, z] ~ [x, y, z]Invariant: A non-empty list literal is always represented as ListLit Nothing xs.When an annotated, non-empty list literal is parsed, it is represented asAnnot (ListLit Nothing [x, y, z]) t ~ [x, y, z] : t ListAppend (Expr s a) (Expr s a) ListAppend x y ~ x # y ListBuild ListBuild ~ List/build ListFold ListFold ~ List/fold ListLength ListLength ~ List/length ListHead ListHead ~ List/head ListLast ListLast ~ List/last ListIndexed ListIndexed ~ List/indexed ListReverse ListReverse ~ List/reverse Optional Optional ~ Optional Some (Expr s a) Some e ~ Some e None None ~ None Record (Map Text (RecordField s a)) Record [ (k1, RecordField _ t1) ~ { k1 : t1, k2 : t1 } , (k2, RecordField _ t2) ] RecordLit (Map Text (RecordField s a)) RecordLit [ (k1, RecordField _ v1) ~ { k1 = v1, k2 = v2 } , (k2, RecordField _ v2) ] Union (Map Text (Maybe (Expr s a))) Union [(k1, Just t1), (k2, Nothing)] ~ < k1 : t1 | k2 > Combine (Maybe CharacterSet) (Maybe Text) (Expr s a) (Expr s a) Combine _ Nothing x y ~ x ∧ yThe first field is a Just when the Combine operator is introduced as a result of desugaring duplicate record fields:RecordLit [ ( k ~ { k = x, k = y } , RecordField _ (Combine (Just k) x y) )] CombineTypes (Maybe CharacterSet) (Expr s a) (Expr s a) CombineTypes _ x y ~ x ⩓ y Prefer (Maybe CharacterSet) (PreferAnnotation s a) (Expr s a) (Expr s a) Prefer _ False x y ~ x ⫽ yThe first field is a True when the Prefer operator is introduced as a result of desugaring a with expression RecordCompletion (Expr s a) (Expr s a) RecordCompletion x y ~ x::y Merge (Expr s a) (Expr s a) (Maybe (Expr s a)) Merge x y (Just t ) ~ merge x y : t Merge x y Nothing ~ merge x y ToMap (Expr s a) (Maybe (Expr s a)) ToMap x (Just t) ~ toMap x : t ToMap x Nothing ~ toMap x ShowConstructor (Expr s a) ShowConstructor x ~ showConstructor x Field (Expr s a) (FieldSelection s) Field e (FieldSelection _ x _) ~ e.x Project (Expr s a) (Either [Text] (Expr s a)) Project e (Left xs) ~ e.{ xs } Project e (Right t) ~ e.(t) Assert (Expr s a) Assert e ~ assert : e Equivalent (Maybe CharacterSet) (Expr s a) (Expr s a) Equivalent _ x y ~ x ≡ y With (Expr s a) (NonEmpty WithComponent) (Expr s a) With x y e ~ x with y = e Note s (Expr s a) Note s x ~ e ImportAlt (Expr s a) (Expr s a) ImportAlt ~ e1 ? e2 Embed a Embed import ~ import

#### Instances

Instances details
 Source # Instance detailsDefined in Dhall.Syntax Methodsbimap :: (a -> b) -> (c -> d) -> Expr a c -> Expr b d #first :: (a -> b) -> Expr a c -> Expr b c #second :: (b -> c) -> Expr a b -> Expr a c # (Lift s, Lift a) => Lift (Expr s a :: Type) Source # Instance detailsDefined in Dhall.Syntax Methodslift :: Expr s a -> Q Exp #liftTyped :: Expr s a -> Q (TExp (Expr s a)) # Monad (Expr s) Source # Instance detailsDefined in Dhall.Syntax Methods(>>=) :: Expr s a -> (a -> Expr s b) -> Expr s b #(>>) :: Expr s a -> Expr s b -> Expr s b #return :: a -> Expr s a # Functor (Expr s) Source # Instance detailsDefined in Dhall.Syntax Methodsfmap :: (a -> b) -> Expr s a -> Expr s b #(<\$) :: a -> Expr s b -> Expr s a # Source # Instance detailsDefined in Dhall.Syntax Methodspure :: a -> Expr s a #(<*>) :: Expr s (a -> b) -> Expr s a -> Expr s b #liftA2 :: (a -> b -> c) -> Expr s a -> Expr s b -> Expr s c #(*>) :: Expr s a -> Expr s b -> Expr s b #(<*) :: Expr s a -> Expr s b -> Expr s a # Foldable (Expr s) Source # Instance detailsDefined in Dhall.Syntax Methodsfold :: Monoid m => Expr s m -> m #foldMap :: Monoid m => (a -> m) -> Expr s a -> m #foldMap' :: Monoid m => (a -> m) -> Expr s a -> m #foldr :: (a -> b -> b) -> b -> Expr s a -> b #foldr' :: (a -> b -> b) -> b -> Expr s a -> b #foldl :: (b -> a -> b) -> b -> Expr s a -> b #foldl' :: (b -> a -> b) -> b -> Expr s a -> b #foldr1 :: (a -> a -> a) -> Expr s a -> a #foldl1 :: (a -> a -> a) -> Expr s a -> a #toList :: Expr s a -> [a] #null :: Expr s a -> Bool #length :: Expr s a -> Int #elem :: Eq a => a -> Expr s a -> Bool #maximum :: Ord a => Expr s a -> a #minimum :: Ord a => Expr s a -> a #sum :: Num a => Expr s a -> a #product :: Num a => Expr s a -> a # Source # Instance detailsDefined in Dhall.Syntax Methodstraverse :: Applicative f => (a -> f b) -> Expr s a -> f (Expr s b) #sequenceA :: Applicative f => Expr s (f a) -> f (Expr s a) #mapM :: Monad m => (a -> m b) -> Expr s a -> m (Expr s b) #sequence :: Monad m => Expr s (m a) -> m (Expr s a) # (Eq s, Eq a) => Eq (Expr s a) Source # This instance encodes what the Dhall standard calls an "exact match" between two expressions.Note that>>> nan = DhallDouble (0/0) >>> DoubleLit nan == DoubleLit nan True  Instance detailsDefined in Dhall.Syntax Methods(==) :: Expr s a -> Expr s a -> Bool #(/=) :: Expr s a -> Expr s a -> Bool # (Data s, Data a) => Data (Expr s a) Source # Instance detailsDefined in Dhall.Syntax Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Expr s a -> c (Expr s a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Expr s a) #toConstr :: Expr s a -> Constr #dataTypeOf :: Expr s a -> DataType #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Expr s a)) #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Expr s a)) #gmapT :: (forall b. Data b => b -> b) -> Expr s a -> Expr s a #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Expr s a -> r #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Expr s a -> r #gmapQ :: (forall d. Data d => d -> u) -> Expr s a -> [u] #gmapQi :: Int -> (forall d. Data d => d -> u) -> Expr s a -> u #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Expr s a -> m (Expr s a) #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Expr s a -> m (Expr s a) #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Expr s a -> m (Expr s a) # (Ord s, Ord a) => Ord (Expr s a) Source # Note that this Ord instance inherits DhallDouble's defects. Instance detailsDefined in Dhall.Syntax Methodscompare :: Expr s a -> Expr s a -> Ordering #(<) :: Expr s a -> Expr s a -> Bool #(<=) :: Expr s a -> Expr s a -> Bool #(>) :: Expr s a -> Expr s a -> Bool #(>=) :: Expr s a -> Expr s a -> Bool #max :: Expr s a -> Expr s a -> Expr s a #min :: Expr s a -> Expr s a -> Expr s a # (Show s, Show a) => Show (Expr s a) Source # Instance detailsDefined in Dhall.Syntax MethodsshowsPrec :: Int -> Expr s a -> ShowS #show :: Expr s a -> String #showList :: [Expr s a] -> ShowS # IsString (Expr s a) Source # Instance detailsDefined in Dhall.Syntax MethodsfromString :: String -> Expr s a # Generic (Expr s a) Source # Instance detailsDefined in Dhall.Syntax Associated Typestype Rep (Expr s a) :: Type -> Type # Methodsfrom :: Expr s a -> Rep (Expr s a) x #to :: Rep (Expr s a) x -> Expr s a # (NFData s, NFData a) => NFData (Expr s a) Source # Instance detailsDefined in Dhall.Syntax Methodsrnf :: Expr s a -> () # Pretty a => Pretty (Expr s a) Source # Generates a syntactically valid Dhall program Instance detailsDefined in Dhall.Syntax Methodspretty :: Expr s a -> Doc ann #prettyList :: [Expr s a] -> Doc ann # Source # Instance detailsDefined in Dhall.Binary MethodsencodeList :: [Expr Void Void] -> Encoding # Source # Instance detailsDefined in Dhall.Binary Methods type Rep (Expr s a) Source # Instance detailsDefined in Dhall.Syntax type Rep (Expr s a) = D1 ('MetaData "Expr" "Dhall.Syntax" "dhall-1.41.2-CygVEUAXWhKKGHhZSAzzm9" 'False) ((((((C1 ('MetaCons "Const" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Const)) :+: C1 ('MetaCons "Var" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Var))) :+: (C1 ('MetaCons "Lam" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe CharacterSet)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (FunctionBinding s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: C1 ('MetaCons "Pi" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe CharacterSet)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))))) :+: ((C1 ('MetaCons "App" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "Let" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Binding s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: (C1 ('MetaCons "Annot" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: (C1 ('MetaCons "Bool" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BoolLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))))) :+: (((C1 ('MetaCons "BoolAnd" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "BoolOr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: (C1 ('MetaCons "BoolEQ" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: (C1 ('MetaCons "BoolNE" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "BoolIf" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))))))) :+: ((C1 ('MetaCons "Natural" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NaturalLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Natural))) :+: (C1 ('MetaCons "NaturalFold" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NaturalBuild" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NaturalIsZero" 'PrefixI 'False) (U1 :: Type -> Type)))))) :+: ((((C1 ('MetaCons "NaturalEven" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NaturalOdd" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "NaturalToInteger" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NaturalShow" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "NaturalSubtract" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NaturalPlus" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: (C1 ('MetaCons "NaturalTimes" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: (C1 ('MetaCons "Integer" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "IntegerLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer)))))) :+: (((C1 ('MetaCons "IntegerClamp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "IntegerNegate" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "IntegerShow" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "IntegerToDouble" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Double" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "DoubleLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DhallDouble)) :+: C1 ('MetaCons "DoubleShow" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Text" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "TextLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Chunks s a))) :+: C1 ('MetaCons "TextAppend" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))))))))) :+: (((((C1 ('MetaCons "TextReplace" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TextShow" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Date" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DateLiteral" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Day)))) :+: ((C1 ('MetaCons "Time" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TimeLiteral" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TimeOfDay) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word))) :+: (C1 ('MetaCons "TimeZone" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "TimeZoneLiteral" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TimeZone)) :+: C1 ('MetaCons "List" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "ListLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Expr s a))) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Seq (Expr s a)))) :+: C1 ('MetaCons "ListAppend" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: (C1 ('MetaCons "ListBuild" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ListFold" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ListLength" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "ListHead" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ListLast" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ListIndexed" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ListReverse" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Optional" 'PrefixI 'False) (U1 :: Type -> Type)))))) :+: ((((C1 ('MetaCons "Some" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "None" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Record" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map Text (RecordField s a)))) :+: (C1 ('MetaCons "RecordLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map Text (RecordField s a)))) :+: C1 ('MetaCons "Union" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map Text (Maybe (Expr s a)))))))) :+: ((C1 ('MetaCons "Combine" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe CharacterSet)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: C1 ('MetaCons "CombineTypes" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe CharacterSet)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))))) :+: (C1 ('MetaCons "Prefer" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe CharacterSet)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (PreferAnnotation s a))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: (C1 ('MetaCons "RecordCompletion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "Merge" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Expr s a))))))))) :+: (((C1 ('MetaCons "ToMap" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Expr s a)))) :+: C1 ('MetaCons "ShowConstructor" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: (C1 ('MetaCons "Field" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (FieldSelection s))) :+: (C1 ('MetaCons "Project" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Either [Text] (Expr s a)))) :+: C1 ('MetaCons "Assert" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))))) :+: ((C1 ('MetaCons "Equivalent" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe CharacterSet)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)))) :+: C1 ('MetaCons "With" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty WithComponent)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))))) :+: (C1 ('MetaCons "Note" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 s) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: (C1 ('MetaCons "ImportAlt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Expr s a))) :+: C1 ('MetaCons "Embed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))))))))

# Normalization

alphaNormalize :: Expr s a -> Expr s a Source #

α-normalize an expression by renaming all bound variables to "_" and using De Bruijn indices to distinguish them

>>> mfb = Syntax.makeFunctionBinding
>>> alphaNormalize (Lam mempty (mfb "a" (Const Type)) (Lam mempty (mfb "b" (Const Type)) (Lam mempty (mfb "x" "a") (Lam mempty (mfb "y" "b") "x"))))
Lam Nothing (FunctionBinding {functionBindingSrc0 = Nothing, functionBindingVariable = "_", functionBindingSrc1 = Nothing, functionBindingSrc2 = Nothing, functionBindingAnnotation = Const Type}) (Lam Nothing (FunctionBinding {functionBindingSrc0 = Nothing, functionBindingVariable = "_", functionBindingSrc1 = Nothing, functionBindingSrc2 = Nothing, functionBindingAnnotation = Const Type}) (Lam Nothing (FunctionBinding {functionBindingSrc0 = Nothing, functionBindingVariable = "_", functionBindingSrc1 = Nothing, functionBindingSrc2 = Nothing, functionBindingAnnotation = Var (V "_" 1)}) (Lam Nothing (FunctionBinding {functionBindingSrc0 = Nothing, functionBindingVariable = "_", functionBindingSrc1 = Nothing, functionBindingSrc2 = Nothing, functionBindingAnnotation = Var (V "_" 1)}) (Var (V "_" 1)))))


α-normalization does not affect free variables:

>>> alphaNormalize "x"
Var (V "x" 0)


normalize :: Eq a => Expr s a -> Expr t a Source #

Reduce an expression to its normal form, performing beta reduction

normalize does not type-check the expression. You may want to type-check expressions before normalizing them since normalization can convert an ill-typed expression into a well-typed expression.

normalize can also fail with error if you normalize an ill-typed expression

normalizeWith :: Eq a => Maybe (ReifiedNormalizer a) -> Expr s a -> Expr t a Source #

Reduce an expression to its normal form, performing beta reduction and applying any custom definitions.

normalizeWith is designed to be used with function typeWith. The typeWith function allows typing of Dhall functions in a custom typing context whereas normalizeWith allows evaluating Dhall expressions in a custom context.

To be more precise normalizeWith applies the given normalizer when it finds an application term that it cannot reduce by other means.

Note that the context used in normalization will determine the properties of normalization. That is, if the functions in custom context are not total then the Dhall language, evaluated with those functions is not total either.

normalizeWith can fail with an error if you normalize an ill-typed expression

normalizeWithM :: (Monad m, Eq a) => NormalizerM m a -> Expr s a -> m (Expr t a) Source #

This function generalizes normalizeWith by allowing the custom normalizer to use an arbitrary Monad

normalizeWithM can fail with an error if you normalize an ill-typed expression

An variation on NormalizerM for pure normalizers

type NormalizerM m a = forall s. Expr s a -> m (Maybe (Expr s a)) Source #

Use this to wrap you embedded functions (see normalizeWith) to make them polymorphic enough to be used.

newtype ReifiedNormalizer a Source #

A reified Normalizer, which can be stored in structures without running into impredicative polymorphism.

Constructors

 ReifiedNormalizer FieldsgetReifiedNormalizer :: Normalizer a

judgmentallyEqual :: Eq a => Expr s a -> Expr t a -> Bool Source #

Returns True if two expressions are α-equivalent and β-equivalent and False otherwise

judgmentallyEqual can fail with an error if you compare ill-typed expressions

subst :: Var -> Expr s a -> Expr s a -> Expr s a Source #

Substitute all occurrences of a variable with an expression

subst x C B  ~  B[x := C]

shift :: Int -> Var -> Expr s a -> Expr s a Source #

shift is used by both normalization and type-checking to avoid variable capture by shifting variable indices

For example, suppose that you were to normalize the following expression:

λ(a : Type) → λ(x : a) → (λ(y : a) → λ(x : a) → y) x

If you were to substitute y with x without shifting any variable indices, then you would get the following incorrect result:

λ(a : Type) → λ(x : a) → λ(x : a) → x  -- Incorrect normalized form

In order to substitute x in place of y we need to shift x by 1 in order to avoid being misinterpreted as the x bound by the innermost lambda. If we perform that shift then we get the correct result:

λ(a : Type) → λ(x : a) → λ(x : a) → x@1

As a more worked example, suppose that you were to normalize the following expression:

    λ(a : Type)
→   λ(f : a → a → a)
→   λ(x : a)
→   λ(x : a)
→   (λ(x : a) → f x x@1) x@1

The correct normalized result would be:

    λ(a : Type)
→   λ(f : a → a → a)
→   λ(x : a)
→   λ(x : a)
→   f x@1 x

The above example illustrates how we need to both increase and decrease variable indices as part of substitution:

• We need to increase the index of the outer x@1 to x@2 before we substitute it into the body of the innermost lambda expression in order to avoid variable capture. This substitution changes the body of the lambda expression to (f x@2 x@1)
• We then remove the innermost lambda and therefore decrease the indices of both xs in (f x@2 x@1) to (f x@1 x) in order to reflect that one less x variable is now bound within that scope

Formally, (shift d (V x n) e) modifies the expression e by adding d to the indices of all variables named x whose indices are greater than (n + m), where m is the number of bound variables of the same name within that scope

In practice, d is always 1 or -1 because we either:

• increment variables by 1 to avoid variable capture during substitution
• decrement variables by 1 when deleting lambdas after substitution

n starts off at 0 when substitution begins and increments every time we descend into a lambda or let expression that binds a variable of the same name in order to avoid shifting the bound variables by mistake.

isNormalized :: Eq a => Expr s a -> Bool Source #

Quickly check if an expression is in normal form

Given a well-typed expression e, isNormalized e is equivalent to e == normalize e.

Given an ill-typed expression, isNormalized may fail with an error, or evaluate to either False or True!

isNormalizedWith :: (Eq s, Eq a) => Normalizer a -> Expr s a -> Bool Source #

Check if an expression is in a normal form given a context of evaluation. Unlike isNormalized, this will fully normalize and traverse through the expression.

It is much more efficient to use isNormalized.

isNormalizedWith can fail with an error if you check an ill-typed expression

denote :: Expr s a -> Expr t a Source #

Remove all Note constructors from an Expr (i.e. de-Note)

This also remove CharacterSet annotations.

renote :: Expr Void a -> Expr s a Source #

The "opposite" of denote, like first absurd but faster

shallowDenote :: Expr s a -> Expr s a Source #

Remove any outermost Note constructors

This is typically used when you want to get the outermost non-Note constructor without removing internal Note constructors

freeIn :: Eq a => Var -> Expr s a -> Bool Source #

Detect if the given variable is free within the given expression

>>> "x" freeIn "x"
True
>>> "x" freeIn "y"
False
>>> "x" freeIn Lam mempty (Syntax.makeFunctionBinding "x" (Const Type)) "x"
False


# Pretty-printing

pretty :: Pretty a => a -> Text Source #

Pretty-print a value

# Optics

subExpressions :: Applicative f => (Expr s a -> f (Expr s a)) -> Expr s a -> f (Expr s a) Source #

A traversal over the immediate sub-expressions of an expression.

subExpressionsWith :: Applicative f => (a -> f (Expr s b)) -> (Expr s a -> f (Expr s b)) -> Expr s a -> f (Expr s b) Source #

A traversal over the immediate sub-expressions of an expression which allows mapping embedded values

chunkExprs :: Applicative f => (Expr s a -> f (Expr t b)) -> Chunks s a -> f (Chunks t b) Source #

A traversal over the immediate sub-expressions in Chunks.

bindingExprs :: Applicative f => (Expr s a -> f (Expr s b)) -> Binding s a -> f (Binding s b) Source #

Traverse over the immediate Expr children in a Binding.

recordFieldExprs :: Applicative f => (Expr s a -> f (Expr s b)) -> RecordField s a -> f (RecordField s b) Source #

Traverse over the immediate Expr children in a RecordField.

functionBindingExprs :: Applicative f => (Expr s a -> f (Expr s b)) -> FunctionBinding s a -> f (FunctionBinding s b) Source #

Traverse over the immediate Expr children in a FunctionBinding.

# Let-blocks

multiLet :: Binding s a -> Expr s a -> MultiLet s a Source #

Generate a MultiLet from the contents of a Let.

In the resulting MultiLet bs e, e is guaranteed not to be a Let, but it might be a (Note … (Let …)).

Given parser output, multiLet consolidates lets that formed a let-block in the original source.

wrapInLets :: Foldable f => f (Binding s a) -> Expr s a -> Expr s a Source #

Wrap let-Bindings around an Expr.

wrapInLets can be understood as an inverse for multiLet:

let MultiLet bs e1 = multiLet b e0

wrapInLets bs e1 == Let b e0

data MultiLet s a Source #

This type represents 1 or more nested Let bindings that have been coalesced together for ease of manipulation

Constructors

 MultiLet (NonEmpty (Binding s a)) (Expr s a)

# Miscellaneous

internalError :: Text -> forall b. b Source #

Utility function used to throw internal errors that should never happen (in theory) but that are not enforced by the type system

The set of reserved identifiers for the Dhall language | Contains also all keywords from "reservedKeywords"

Escape a Text literal using Dhall's escaping rules

Note that the result does not include surrounding quotes

Returns True if the given Char is valid within an unquoted path component

This is exported for reuse within the Dhall.Parser.Token module

throws :: (Exception e, MonadIO io) => Either e a -> io a Source #

Convenience utility for converting Either-based exceptions to IO-based exceptions

Utility that powers the Text/show built-in

Utility used to implement the --censor flag, by:

• Replacing all Src text with spaces
• Replacing all Text literals inside type errors with spaces

Utility used to censor Text by replacing all characters with a space