spago-0.21.0

Safe Haskell | None
Language | Haskell2010

Spago.Dhall

Synopsis

- format :: MonadIO m => Text -> m ()
- data TemplateComments
  - = WithComments
  - | NoComments
- type DhallExpr a = Expr Src a
- prettyWithHeader :: Pretty a => Header -> DhallExpr a -> Text
- processComments :: TemplateComments -> Text -> Text
- stripComments :: Text -> Text
- extractRecordValues :: Map Text (RecordField Src a) -> Map Text (Expr Src a)
- readImports :: Text -> IO [Import]
- readRawExpr :: Text -> IO (Maybe (Header, DhallExpr Import))
- writeRawExpr :: Text -> (Header, DhallExpr Import) -> IO ()
- toTextLit :: Text -> DhallExpr a
- fromTextLit :: Typeable a => DhallExpr a -> Either (ReadError a) Text
- data ReadError a where
  - ConfigIsNotRecord :: forall a. Typeable a => DhallExpr a -> ReadError a
  - PackagesIsNotRecord :: forall a. Typeable a => DhallExpr a -> ReadError a
  - DependenciesIsNotList :: forall a. Typeable a => DhallExpr a -> ReadError a
  - ExprIsNotTextLit :: forall a. Typeable a => DhallExpr a -> ReadError a
  - CannotParsePackageSet :: forall a. Typeable a => DhallExpr a -> ReadError a
  - ImportCannotBeUpdated :: forall a. Typeable a => Import -> ReadError a
  - RequiredKeyMissing :: forall a. Typeable a => Text -> Map Text (DhallExpr a) -> ReadError a
- requireKey :: (Typeable b, Pretty b, MonadThrow m) => Map Text (DhallExpr b) -> Text -> (DhallExpr b -> m a) -> m a
- requireTypedKey :: (MonadIO m, MonadThrow m) => Map Text (DhallExpr Void) -> Text -> Decoder a -> m a
- maybeTypedKey :: (MonadIO m, MonadThrow m) => Map Text (DhallExpr Void) -> Text -> Decoder a -> m (Maybe a)
- module Dhall
- data File = File {
  - directory :: Directory
  - file :: Text
  }
- data Expr s a
  - = Const Const
  - | Var Var
  - | Lam (Maybe CharacterSet) (FunctionBinding s a) (Expr s a)
  - | Pi (Maybe CharacterSet) Text (Expr s a) (Expr s a)
  - | App (Expr s a) (Expr s a)
  - | Let (Binding s a) (Expr s a)
  - | Annot (Expr s a) (Expr s a)
  - | Bool
  - | BoolLit Bool
  - | BoolAnd (Expr s a) (Expr s a)
  - | BoolOr (Expr s a) (Expr s a)
  - | BoolEQ (Expr s a) (Expr s a)
  - | BoolNE (Expr s a) (Expr s a)
  - | BoolIf (Expr s a) (Expr s a) (Expr s a)
  - | Bytes
  - | BytesLit ByteString
  - | Natural
  - | NaturalLit Natural
  - | NaturalFold
  - | NaturalBuild
  - | NaturalIsZero
  - | NaturalEven
  - | NaturalOdd
  - | NaturalToInteger
  - | NaturalShow
  - | NaturalSubtract
  - | NaturalPlus (Expr s a) (Expr s a)
  - | NaturalTimes (Expr s a) (Expr s a)
  - | Integer
  - | IntegerLit Integer
  - | IntegerClamp
  - | IntegerNegate
  - | IntegerShow
  - | IntegerToDouble
  - | Double
  - | DoubleLit DhallDouble
  - | DoubleShow
  - | Text
  - | TextLit (Chunks s a)
  - | TextAppend (Expr s a) (Expr s a)
  - | TextReplace
  - | TextShow
  - | Date
  - | DateLiteral Day
  - | DateShow
  - | Time
  - | TimeLiteral TimeOfDay Word
  - | TimeShow
  - | TimeZone
  - | TimeZoneLiteral TimeZone
  - | TimeZoneShow
  - | List
  - | ListLit (Maybe (Expr s a)) (Seq (Expr s a))
  - | ListAppend (Expr s a) (Expr s a)
  - | ListBuild
  - | ListFold
  - | ListLength
  - | ListHead
  - | ListLast
  - | ListIndexed
  - | ListReverse
  - | Optional
  - | Some (Expr s a)
  - | None
  - | Record (Map Text (RecordField s a))
  - | RecordLit (Map Text (RecordField s a))
  - | Union (Map Text (Maybe (Expr s a)))
  - | Combine (Maybe CharacterSet) (Maybe Text) (Expr s a) (Expr s a)
  - | CombineTypes (Maybe CharacterSet) (Expr s a) (Expr s a)
  - | Prefer (Maybe CharacterSet) PreferAnnotation (Expr s a) (Expr s a)
  - | RecordCompletion (Expr s a) (Expr s a)
  - | Merge (Expr s a) (Expr s a) (Maybe (Expr s a))
  - | ToMap (Expr s a) (Maybe (Expr s a))
  - | ShowConstructor (Expr s a)
  - | Field (Expr s a) (FieldSelection s)
  - | Project (Expr s a) (Either [Text] (Expr s a))
  - | Assert (Expr s a)
  - | Equivalent (Maybe CharacterSet) (Expr s a) (Expr s a)
  - | With (Expr s a) (NonEmpty WithComponent) (Expr s a)
  - | Note s (Expr s a)
  - | ImportAlt (Expr s a) (Expr s a)
  - | Embed a
- data Const
  - = Type
  - | Kind
  - | Sort
- insert :: Pretty a => a -> Doc Ann
- data Binding s a = Binding {
  - bindingSrc0 :: Maybe s
  - variable :: Text
  - bindingSrc1 :: Maybe s
  - annotation :: Maybe (Maybe s, Expr s a)
  - bindingSrc2 :: Maybe s
  - value :: Expr s a
  }
- data ImportMode
  - = Code
  - | RawText
  - | Location
  - | RawBytes
- data Input
  - = StandardInput
  - | InputFile FilePath
- newtype Header = Header Text
- normalize :: Eq a => Expr s a -> Expr t a
- shift :: Int -> Var -> Expr s a -> Expr s a
- newtype Directory = Directory {
  - components :: [Text]
  }
- internalError :: Text -> forall b. b
- data ImportHashed = ImportHashed {
  - hash :: Maybe SHA256Digest
  - importType :: ImportType
  }
- data OutputMode
  - = Write
  - | Check
- data ImportType
  - = Local FilePrefix File
  - | Remote URL
  - | Env Text
  - | Missing
- data URL = URL {
  - scheme :: Scheme
  - authority :: Text
  - path :: File
  - query :: Maybe Text
  - headers :: Maybe (Expr Src Import)
  }
- data Import = Import {
  - importHashed :: ImportHashed
  - importMode :: ImportMode
  }
- data MultiLet s a = MultiLet (NonEmpty (Binding s a)) (Expr s a)
- judgmentallyEqual :: Eq a => Expr s a -> Expr t a -> Bool
- normalizeWith :: Eq a => Maybe (ReifiedNormalizer a) -> Expr s a -> Expr t a
- data Var = V Text !Int
- data WithComponent
  - = WithLabel Text
  - | WithQuestion
- data FieldSelection s = FieldSelection {
  - fieldSelectionSrc0 :: Maybe s
  - fieldSelectionLabel :: !Text
  - fieldSelectionSrc1 :: Maybe s
  }
- data PreferAnnotation
  - = PreferFromSource
  - | PreferFromCompletion
- newtype DhallDouble = DhallDouble {
  - getDhallDouble :: Double
  }
- makeFieldSelection :: Text -> FieldSelection s
- data Chunks s a = Chunks [(Text, Expr s a)] Text
- data RecordField s a = RecordField {
  - recordFieldSrc0 :: Maybe s
  - recordFieldValue :: Expr s a
  - recordFieldSrc1 :: Maybe s
  - recordFieldSrc2 :: Maybe s
  }
- makeRecordField :: Expr s a -> RecordField s a
- recordFieldExprs :: Applicative f => (Expr s a -> f (Expr s b)) -> RecordField s a -> f (RecordField s b)
- data FunctionBinding s a = FunctionBinding {
  - functionBindingSrc0 :: Maybe s
  - functionBindingVariable :: Text
  - functionBindingSrc1 :: Maybe s
  - functionBindingSrc2 :: Maybe s
  - functionBindingAnnotation :: Expr s a
  }
- makeFunctionBinding :: Text -> Expr s a -> FunctionBinding s a
- functionBindingExprs :: Applicative f => (Expr s a -> f (Expr s b)) -> FunctionBinding s a -> f (FunctionBinding s b)
- makeBinding :: Text -> Expr s a -> Binding s a
- bindingExprs :: Applicative f => (Expr s a -> f (Expr s b)) -> Binding s a -> f (Binding s b)
- snip :: Text -> Text
- chunkExprs :: Applicative f => (Expr s a -> f (Expr t b)) -> Chunks s a -> f (Chunks t b)
- multiLet :: Binding s a -> Expr s a -> MultiLet s a
- wrapInLets :: Foldable f => f (Binding s a) -> Expr s a -> Expr s a
- subExpressions :: Applicative f => (Expr s a -> f (Expr s a)) -> Expr s a -> f (Expr s a)
- subExpressionsWith :: Applicative f => (a -> f (Expr s b)) -> (Expr s a -> f (Expr s b)) -> Expr s a -> f (Expr s b)
- denote :: Expr s a -> Expr t a
- renote :: Expr Void a -> Expr s a
- shallowDenote :: Expr s a -> Expr s a
- reservedIdentifiers :: HashSet Text
- data Scheme
  - = HTTP
  - | HTTPS
- data FilePrefix
  - = Absolute
  - | Here
  - | Parent
  - | Home
- pathCharacter :: Char -> Bool
- textShow :: Text -> Text
- newtype ReifiedNormalizer a = ReifiedNormalizer {
  - getReifiedNormalizer :: Normalizer a
  }
- type Normalizer a = NormalizerM Identity a
- type NormalizerM (m :: Type -> Type) a = forall s. Expr s a -> m (Maybe (Expr s a))
- subst :: Var -> Expr s a -> Expr s a -> Expr s a
- alphaNormalize :: Expr s a -> Expr s a
- normalizeWithM :: (Monad m, Eq a) => NormalizerM m a -> Expr s a -> m (Expr t a)
- isNormalizedWith :: (Eq s, Eq a) => Normalizer a -> Expr s a -> Bool
- isNormalized :: Eq a => Expr s a -> Bool
- freeIn :: Eq a => Var -> Expr s a -> Bool
- escapeText :: Text -> Text
- censorExpression :: Expr Src a -> Expr Src a
- censorText :: Text -> Text
- throws :: (Exception e, MonadIO io) => Either e a -> io a
- data MultipleCheckFailed = MultipleCheckFailed {
  - command :: Text
  - modified :: Text
  - inputs :: NonEmpty Input
  }
- newtype CheckFailed = CheckFailed Input
- data Output
  - = StandardOutput
  - | OutputFile FilePath
- data Transitivity
  - = NonTransitive
  - | Transitive
- data Censor
  - = NoCensor
  - | Censor
- snipDoc :: Doc Ann -> Doc a
- _ERROR :: IsString string => string
- handleMultipleChecksFailed :: (Foldable t, Traversable t) => Text -> Text -> (a -> IO (Either CheckFailed ())) -> t a -> IO ()
- getExpression :: Censor -> Input -> IO (Expr Src Import)
- getExpressionAndHeader :: Censor -> Input -> IO (Header, Expr Src Import)
- getExpressionAndHeaderFromStdinText :: Censor -> String -> Text -> IO (Header, Expr Src Import)
- renderExpression :: Pretty a => CharacterSet -> Bool -> Maybe FilePath -> Expr Src a -> IO ()

# Documentation

format :: MonadIO m => Text -> m () #

Format a Dhall file in ASCII We first check if it's already formatted, if not we reformat it.

data TemplateComments #

Constructors

WithComments |
NoComments |

type DhallExpr a = Expr Src a #

prettyWithHeader :: Pretty a => Header -> DhallExpr a -> Text #

Prettyprint a Dhall expression adding a comment on top

processComments :: TemplateComments -> Text -> Text #

stripComments :: Text -> Text #

extractRecordValues :: Map Text (RecordField Src a) -> Map Text (Expr Src a) #

readImports :: Text -> IO [Import] #

Return a list of all imports starting from a particular file

readRawExpr :: Text -> IO (Maybe (Header, DhallExpr Import)) #

writeRawExpr :: Text -> (Header, DhallExpr Import) -> IO () #

toTextLit :: Text -> DhallExpr a #

Returns a Dhall Text literal from a lone string

fromTextLit :: Typeable a => DhallExpr a -> Either (ReadError a) Text #

Casts a Dhall Text literal to a string, or fails

data ReadError a where #

Spago configuration cannot be read

Constructors

ConfigIsNotRecord :: forall a. Typeable a => DhallExpr a -> ReadError a | the toplevel value is not a record
PackagesIsNotRecord :: forall a. Typeable a => DhallExpr a -> ReadError a | the "packages" key is not a record
DependenciesIsNotList :: forall a. Typeable a => DhallExpr a -> ReadError a | the "dependencies" key is not a list
ExprIsNotTextLit :: forall a. Typeable a => DhallExpr a -> ReadError a | the expression is not a Text Literal
CannotParsePackageSet :: forall a. Typeable a => DhallExpr a -> ReadError a | the packages.dhall could not be parsed
ImportCannotBeUpdated :: forall a. Typeable a => Import -> ReadError a | the Import is not pointing to the right repo
RequiredKeyMissing :: forall a. Typeable a => Text -> Map Text (DhallExpr a) -> ReadError a | a key is missing from a Dhall map

#### Instances

Instances details

(Pretty a, Typeable a) => Exception (ReadError a) # |
Instance details Defined in Spago.Dhall Methods toException :: ReadError a -> SomeException # fromException :: SomeException -> Maybe (ReadError a) # displayException :: ReadError a -> String #
Pretty a => Show (ReadError a) # |
Instance details Defined in Spago.Dhall Methods showsPrec :: Int -> ReadError a -> ShowS # show :: ReadError a -> String # showList :: [ReadError a] -> ShowS #

requireKey :: (Typeable b, Pretty b, MonadThrow m) => Map Text (DhallExpr b) -> Text -> (DhallExpr b -> m a) -> m a #

Require a key from a Dhall.Map, and run an action on it if found. If not found, return the name of the key.

requireTypedKey :: (MonadIO m, MonadThrow m) => Map Text (DhallExpr Void) -> Text -> Decoder a -> m a #

Same as `requireKey`, but we give it a Dhall.Decoder to automagically decode from

maybeTypedKey :: (MonadIO m, MonadThrow m) => Map Text (DhallExpr Void) -> Text -> Decoder a -> m (Maybe a) #

Try to find a key from a Dhall.Map, and automagically decode the value with the given Dhall.Type If not found, return `Nothing`, if type is incorrect throw error

module Dhall

data File #

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

Constructors

File |

Fields

- directory :: Directory
- file :: Text

#### Instances

Instances details

Data File |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> File -> c File #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c File #

toConstr :: File -> Constr #

dataTypeOf :: File -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c File) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c File) #

gmapT :: (forall b. Data b => b -> b) -> File -> File #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> File -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> File -> r #

gmapQ :: (forall d. Data d => d -> u) -> File -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> File -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> File -> m File #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> File -> m File #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> File -> m File #

Semigroup File |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: File -> File -> File # sconcat :: NonEmpty File -> File # stimes :: Integral b => b -> File -> File #
Generic File |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep File |
Instance details Defined in Dhall.Syntax.Import type Rep File = D1 ('MetaData "File" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "File" 'PrefixI 'True) (S1 ('MetaSel ('Just "directory") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Directory) :*: S1 ('MetaSel ('Just "file") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

Methods

from :: File -> Rep File x #

to :: Rep File x -> File #

Canonicalize File |
Instance details Defined in Dhall.Import Methods canonicalize :: File -> File
type Rep File |
Instance details Defined in Dhall.Syntax.Import type Rep File = D1 ('MetaData "File" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "File" 'PrefixI 'True) (S1 ('MetaSel ('Just "directory") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Directory) :*: S1 ('MetaSel ('Just "file") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data Expr s a #

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 `Import`s
- If `a = `Void`` then the code has no `Import`s

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 e

The difference between

    let x = a    let y = b in e

and

    let x = a in let y = b in e

is 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

Bytes

    Bytes                                    ~ Bytes

BytesLit ByteString

    BytesLit "\x00\xFF"                      ~ 0x"00FF"

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

DateShow

    DateShow                                 ~  Date/show

Time

    Time                                     ~  Time

TimeLiteral

    TimeLiteral (TimeOfDay hh mm ss) _       ~  hh:mm:ss

Fields

- TimeOfDay
- Word

  Precision | > TimeShow ~ Time/show

TimeShow |

TimeZone

    TimeZone                                 ~  TimeZone

TimeZoneLiteral TimeZone

    TimeZoneLiteral (TimeZone ( 60 * _HH + _MM) _ _) ~ +HH:MM

| > TimeZoneLiteral (TimeZone (-60 * _HH + _MM) _ _) ~ -HH:MM

TimeZoneShow

    TimeZoneShow                             ~  TimeZone/Show

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 as

    Annot (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 ∧ y

The 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 (Expr s a) (Expr s a)

    Prefer _ _ x y                           ~  x ⫽ y

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

IsString (Expr s a) |
Instance details Defined in Dhall.Syntax.Expr Methods fromString :: String -> Expr s a #
Generic (Expr s a) |

Instance details

Defined in Dhall.Syntax.Expr

Associated Types

type Rep (Expr s a) |

Instance details

Defined in Dhall.Syntax.Expr

type Rep (Expr s a) = D1 ('MetaData "Expr" "Dhall.Syntax.Expr" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 "Bytes" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "BytesLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)) :+: 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 "DateShow" 'PrefixI 'False) (U1 :: Type -> Type) :+: 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 "TimeShow" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (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 "TimeZoneShow" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((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)) :*: (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)))))))))

Methods

from :: Expr s a -> Rep (Expr s a) x #

to :: Rep (Expr s a) x -> Expr s a #

type Rep (Expr s a) |

Instance details

Defined in Dhall.Syntax.Expr

type Rep (Expr s a) = D1 ('MetaData "Expr" "Dhall.Syntax.Expr" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 "Bytes" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "BytesLit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)) :+: 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 "DateShow" 'PrefixI 'False) (U1 :: Type -> Type) :+: 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 "TimeShow" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (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 "TimeZoneShow" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((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)) :*: (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)))))))))

data Const #

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

Bounded Const |
Instance details Defined in Dhall.Syntax.Const Methods minBound :: Const # maxBound :: Const #
Enum Const |
Instance details Defined in Dhall.Syntax.Const Methods succ :: Const -> Const # pred :: Const -> Const # toEnum :: Int -> Const # fromEnum :: Const -> Int # enumFrom :: Const -> [Const] # enumFromThen :: Const -> Const -> [Const] # enumFromTo :: Const -> Const -> [Const] # enumFromThenTo :: Const -> Const -> Const -> [Const] #
Generic Const |

Instance details

Defined in Dhall.Syntax.Const

Associated Types

type Rep Const |
Instance details Defined in Dhall.Syntax.Const type Rep Const = D1 ('MetaData "Const" "Dhall.Syntax.Const" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

Methods

from :: Const -> Rep Const x #

to :: Rep Const x -> Const #

type Rep Const |
Instance details Defined in Dhall.Syntax.Const type Rep Const = D1 ('MetaData "Const" "Dhall.Syntax.Const" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

insert :: Pretty a => a -> Doc Ann #

Function to insert an aligned pretty expression

data Binding s a #

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 |

Fields

- bindingSrc0 :: Maybe s
- variable :: Text
- bindingSrc1 :: Maybe s
- annotation :: Maybe (Maybe s, Expr s a)
- bindingSrc2 :: Maybe s
- value :: Expr s a

#### Instances

Instances details

Generic (Binding s a) |

Instance details

Defined in Dhall.Syntax.Binding

Associated Types

type Rep (Binding s a) |

Instance details

Defined in Dhall.Syntax.Binding

type Rep (Binding s a) = D1 ('MetaData "Binding" "Dhall.Syntax.Binding" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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))))))

Methods

from :: Binding s a -> Rep (Binding s a) x #

to :: Rep (Binding s a) x -> Binding s a #

type Rep (Binding s a) |

Instance details

Defined in Dhall.Syntax.Binding

type Rep (Binding s a) = D1 ('MetaData "Binding" "Dhall.Syntax.Binding" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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))))))

data ImportMode #

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

Constructors

Code |
RawText |
Location |
RawBytes |

#### Instances

Instances details

Data ImportMode |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ImportMode -> c ImportMode #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ImportMode #

toConstr :: ImportMode -> Constr #

dataTypeOf :: ImportMode -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ImportMode) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ImportMode) #

gmapT :: (forall b. Data b => b -> b) -> ImportMode -> ImportMode #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ImportMode -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ImportMode -> r #

gmapQ :: (forall d. Data d => d -> u) -> ImportMode -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ImportMode -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ImportMode -> m ImportMode #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ImportMode -> m ImportMode #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ImportMode -> m ImportMode #

Generic ImportMode |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep ImportMode |

Instance details

Defined in Dhall.Syntax.Import

type Rep ImportMode = D1 ('MetaData "ImportMode" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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) :+: C1 ('MetaCons "RawBytes" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: ImportMode -> Rep ImportMode x #

to :: Rep ImportMode x -> ImportMode #

type Rep ImportMode |

Instance details

Defined in Dhall.Syntax.Import

type Rep ImportMode = D1 ('MetaData "ImportMode" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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) :+: C1 ('MetaCons "RawBytes" 'PrefixI 'False) (U1 :: Type -> Type)))

data Input #

Path to input

Constructors

StandardInput |
InputFile FilePath |

#### Instances

Instances details

Eq Input |
Instance details Defined in Dhall.Util Methods (==) :: Input -> Input -> Bool # (/=) :: Input -> Input -> Bool #

newtype Header #

A header corresponds to the leading comment at the top of a Dhall file.

The header includes comment characters but is stripped of leading spaces and trailing newlines

Constructors

Header Text |

#### Instances

Instances details

Show Header |
Instance details Defined in Dhall.Parser Methods showsPrec :: Int -> Header -> ShowS # show :: Header -> String # showList :: [Header] -> ShowS #

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

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

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

`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 `x`s 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.

newtype Directory #

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 |

Fields

- components :: [Text]

#### Instances

Instances details

Data Directory |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Directory -> c Directory #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Directory #

toConstr :: Directory -> Constr #

dataTypeOf :: Directory -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Directory) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Directory) #

gmapT :: (forall b. Data b => b -> b) -> Directory -> Directory #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Directory -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Directory -> r #

gmapQ :: (forall d. Data d => d -> u) -> Directory -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Directory -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Directory -> m Directory #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Directory -> m Directory #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Directory -> m Directory #

Semigroup Directory |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: Directory -> Directory -> Directory # sconcat :: NonEmpty Directory -> Directory # stimes :: Integral b => b -> Directory -> Directory #
Generic Directory |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep Directory |
Instance details Defined in Dhall.Syntax.Import type Rep Directory = D1 ('MetaData "Directory" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'True) (C1 ('MetaCons "Directory" 'PrefixI 'True) (S1 ('MetaSel ('Just "components") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Text])))

Methods

from :: Directory -> Rep Directory x #

to :: Rep Directory x -> Directory #

Canonicalize Directory

    >>> canonicalize (Directory {components = ["..",".."]})
    Directory {components = ["..",".."]}

Instance details Defined in Dhall.Import Methods canonicalize :: Directory -> Directory
type Rep Directory |
Instance details Defined in Dhall.Syntax.Import type Rep Directory = D1 ('MetaData "Directory" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'True) (C1 ('MetaCons "Directory" 'PrefixI 'True) (S1 ('MetaSel ('Just "components") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Text])))

internalError :: Text -> forall b. b #

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

data ImportHashed #

A `ImportType` extended with an optional hash for semantic integrity checks

Constructors

ImportHashed |

Fields

- hash :: Maybe SHA256Digest
- importType :: ImportType

#### Instances

Instances details

Data ImportHashed |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ImportHashed -> c ImportHashed #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ImportHashed #

toConstr :: ImportHashed -> Constr #

dataTypeOf :: ImportHashed -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ImportHashed) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ImportHashed) #

gmapT :: (forall b. Data b => b -> b) -> ImportHashed -> ImportHashed #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ImportHashed -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ImportHashed -> r #

gmapQ :: (forall d. Data d => d -> u) -> ImportHashed -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ImportHashed -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ImportHashed -> m ImportHashed #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ImportHashed -> m ImportHashed #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ImportHashed -> m ImportHashed #

Semigroup ImportHashed |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: ImportHashed -> ImportHashed -> ImportHashed # sconcat :: NonEmpty ImportHashed -> ImportHashed # stimes :: Integral b => b -> ImportHashed -> ImportHashed #
Generic ImportHashed |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep ImportHashed |

Instance details

Defined in Dhall.Syntax.Import

type Rep ImportHashed = D1 ('MetaData "ImportHashed" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

Methods

from :: ImportHashed -> Rep ImportHashed x #

to :: Rep ImportHashed x -> ImportHashed #

Canonicalize ImportHashed |
Instance details Defined in Dhall.Import Methods canonicalize :: ImportHashed -> ImportHashed
type Rep ImportHashed |

Instance details

Defined in Dhall.Syntax.Import

type Rep ImportHashed = D1 ('MetaData "ImportHashed" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

data OutputMode #

Some command-line subcommands can either `Write` their input or `Check` that the input has already been modified. This type is shared between them to record that choice.

Constructors

Write |
Check |

data ImportType #

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

Data ImportType |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ImportType -> c ImportType #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ImportType #

toConstr :: ImportType -> Constr #

dataTypeOf :: ImportType -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ImportType) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ImportType) #

gmapT :: (forall b. Data b => b -> b) -> ImportType -> ImportType #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ImportType -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ImportType -> r #

gmapQ :: (forall d. Data d => d -> u) -> ImportType -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ImportType -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ImportType -> m ImportType #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ImportType -> m ImportType #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ImportType -> m ImportType #

Semigroup ImportType |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: ImportType -> ImportType -> ImportType # sconcat :: NonEmpty ImportType -> ImportType # stimes :: Integral b => b -> ImportType -> ImportType #
Generic ImportType |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep ImportType |

Instance details

Defined in Dhall.Syntax.Import

type Rep ImportType = D1 ('MetaData "ImportType" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

Methods

from :: ImportType -> Rep ImportType x #

to :: Rep ImportType x -> ImportType #

Canonicalize ImportType |
Instance details Defined in Dhall.Import Methods canonicalize :: ImportType -> ImportType
type Rep ImportType |

Instance details

Defined in Dhall.Syntax.Import

type Rep ImportType = D1 ('MetaData "ImportType" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 #

This type stores all of the components of a remote import

Constructors

URL |

Fields

- scheme :: Scheme
- authority :: Text
- path :: File
- query :: Maybe Text
- headers :: Maybe (Expr Src Import)

#### Instances

Instances details

Data URL |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> URL -> c URL #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c URL #

toConstr :: URL -> Constr #

dataTypeOf :: URL -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c URL) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URL) #

gmapT :: (forall b. Data b => b -> b) -> URL -> URL #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> URL -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> URL -> r #

gmapQ :: (forall d. Data d => d -> u) -> URL -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> URL -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> URL -> m URL #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> URL -> m URL #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> URL -> m URL #

Generic URL |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep URL |

Instance details

Defined in Dhall.Syntax.Import

type Rep URL = D1 ('MetaData "URL" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))))))

Methods

from :: URL -> Rep URL x #

to :: Rep URL x -> URL #

type Rep URL |

Instance details

Defined in Dhall.Syntax.Import

type Rep URL = D1 ('MetaData "URL" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 Import #

Reference to an external resource

Constructors

Import |

Fields

- importHashed :: ImportHashed
- importMode :: ImportMode

#### Instances

Instances details

Data Import |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Import -> c Import #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Import #

toConstr :: Import -> Constr #

dataTypeOf :: Import -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Import) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Import) #

gmapT :: (forall b. Data b => b -> b) -> Import -> Import #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Import -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Import -> r #

gmapQ :: (forall d. Data d => d -> u) -> Import -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Import -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Import -> m Import #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Import -> m Import #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Import -> m Import #

Semigroup Import |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: Import -> Import -> Import # sconcat :: NonEmpty Import -> Import # stimes :: Integral b => b -> Import -> Import #
Generic Import |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep Import |

Instance details

Defined in Dhall.Syntax.Import

type Rep Import = D1 ('MetaData "Import" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "Import" 'PrefixI 'True) (S1 ('MetaSel ('Just "importHashed") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportHashed) :*: S1 ('MetaSel ('Just "importMode") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportMode)))

Methods

from :: Import -> Rep Import x #

to :: Rep Import x -> Import #

Canonicalize Import |
Instance details Defined in Dhall.Import Methods canonicalize :: Import -> Import
type Rep Import |

Instance details

Defined in Dhall.Syntax.Import

type Rep Import = D1 ('MetaData "Import" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "Import" 'PrefixI 'True) (S1 ('MetaSel ('Just "importHashed") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportHashed) :*: S1 ('MetaSel ('Just "importMode") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportMode)))

data MultiLet s a #

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

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

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

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

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

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

data Var #

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 `Var`s and non-zero indices appear as a numeric suffix.

Constructors

V Text !Int |

#### Instances

Instances details

IsString Var |
Instance details Defined in Dhall.Syntax.Var Methods fromString :: String -> Var #
Generic Var |

Instance details

Defined in Dhall.Syntax.Var

Associated Types

type Rep Var |
Instance details Defined in Dhall.Syntax.Var type Rep Var = D1 ('MetaData "Var" "Dhall.Syntax.Var" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "V" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)))

Methods

from :: Var -> Rep Var x #

to :: Rep Var x -> Var #

type Rep Var |
Instance details Defined in Dhall.Syntax.Var type Rep Var = D1 ('MetaData "Var" "Dhall.Syntax.Var" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "V" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)))

data WithComponent #

A path component for a `with` expression

Constructors

WithLabel Text |
WithQuestion |

#### Instances

Instances details

Generic WithComponent |

Instance details

Defined in Dhall.Syntax.Types

Associated Types

type Rep WithComponent |
Instance details Defined in Dhall.Syntax.Types type Rep WithComponent = D1 ('MetaData "WithComponent" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "WithLabel" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "WithQuestion" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: WithComponent -> Rep WithComponent x #

to :: Rep WithComponent x -> WithComponent #

type Rep WithComponent |
Instance details Defined in Dhall.Syntax.Types type Rep WithComponent = D1 ('MetaData "WithComponent" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 FieldSelection s #

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 Dhall.Src.Src' (`s = `Src``) to be consistent with similar data types such as `Binding`, for example.

Constructors

FieldSelection |

Fields

- fieldSelectionSrc0 :: Maybe s
- fieldSelectionLabel :: !Text
- fieldSelectionSrc1 :: Maybe s

#### Instances

Instances details

Generic (FieldSelection s) |

Instance details

Defined in Dhall.Syntax.Types

Associated Types

type Rep (FieldSelection s) |

Instance details

Defined in Dhall.Syntax.Types

type Rep (FieldSelection s) = D1 ('MetaData "FieldSelection" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))))

Methods

from :: FieldSelection s -> Rep (FieldSelection s) x #

to :: Rep (FieldSelection s) x -> FieldSelection s #

type Rep (FieldSelection s) |

Instance details

Defined in Dhall.Syntax.Types

type Rep (FieldSelection s) = D1 ('MetaData "FieldSelection" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))))

data PreferAnnotation #

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

Constructors

PreferFromSource |
PreferFromCompletion |

#### Instances

Instances details

Generic PreferAnnotation |

Instance details

Defined in Dhall.Syntax.Types

Associated Types

type Rep PreferAnnotation |
Instance details Defined in Dhall.Syntax.Types type Rep PreferAnnotation = D1 ('MetaData "PreferAnnotation" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "PreferFromSource" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PreferFromCompletion" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: PreferAnnotation -> Rep PreferAnnotation x #

to :: Rep PreferAnnotation x -> PreferAnnotation #

type Rep PreferAnnotation |
Instance details Defined in Dhall.Syntax.Types type Rep PreferAnnotation = D1 ('MetaData "PreferAnnotation" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "PreferFromSource" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PreferFromCompletion" 'PrefixI 'False) (U1 :: Type -> Type))

newtype DhallDouble #

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

Constructors

DhallDouble |

Fields

- getDhallDouble :: Double

#### Instances

Instances details

Generic DhallDouble |

Instance details

Defined in Dhall.Syntax.Types

Associated Types

type Rep DhallDouble |
Instance details Defined in Dhall.Syntax.Types type Rep DhallDouble = D1 ('MetaData "DhallDouble" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'True) (C1 ('MetaCons "DhallDouble" 'PrefixI 'True) (S1 ('MetaSel ('Just "getDhallDouble") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double)))

Methods

from :: DhallDouble -> Rep DhallDouble x #

to :: Rep DhallDouble x -> DhallDouble #

type Rep DhallDouble |
Instance details Defined in Dhall.Syntax.Types type Rep DhallDouble = D1 ('MetaData "DhallDouble" "Dhall.Syntax.Types" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'True) (C1 ('MetaCons "DhallDouble" 'PrefixI 'True) (S1 ('MetaSel ('Just "getDhallDouble") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double)))

makeFieldSelection :: Text -> FieldSelection s #

Smart constructor for `FieldSelection` with no src information

data Chunks s a #

The body of an interpolated `Text` literal

Constructors

Chunks [(Text, Expr s a)] Text |

#### Instances

Instances details

IsString (Chunks s a) |
Instance details Defined in Dhall.Syntax.Chunks Methods fromString :: String -> Chunks s a #
Monoid (Chunks s a) |
Instance details Defined in Dhall.Syntax.Chunks Methods mempty :: Chunks s a # mappend :: Chunks s a -> Chunks s a -> Chunks s a # mconcat :: [Chunks s a] -> Chunks s a #
Semigroup (Chunks s a) |
Instance details Defined in Dhall.Syntax.Chunks 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 #
Generic (Chunks s a) |

Instance details

Defined in Dhall.Syntax.Chunks

Associated Types

type Rep (Chunks s a) |

Instance details

Defined in Dhall.Syntax.Chunks

type Rep (Chunks s a) = D1 ('MetaData "Chunks" "Dhall.Syntax.Chunks" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

Methods

from :: Chunks s a -> Rep (Chunks s a) x #

to :: Rep (Chunks s a) x -> Chunks s a #

type Rep (Chunks s a) |

Instance details

Defined in Dhall.Syntax.Chunks

type Rep (Chunks s a) = D1 ('MetaData "Chunks" "Dhall.Syntax.Chunks" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 RecordField s a #

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 |

Fields

- recordFieldSrc0 :: Maybe s
- recordFieldValue :: Expr s a
- recordFieldSrc1 :: Maybe s
- recordFieldSrc2 :: Maybe s

#### Instances

Instances details

Generic (RecordField s a) |

Instance details

Defined in Dhall.Syntax.RecordField

Associated Types

type Rep (RecordField s a) |

Instance details

Defined in Dhall.Syntax.RecordField

type Rep (RecordField s a) = D1 ('MetaData "RecordField" "Dhall.Syntax.RecordField" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))))

Methods

from :: RecordField s a -> Rep (RecordField s a) x #

to :: Rep (RecordField s a) x -> RecordField s a #

type Rep (RecordField s a) |

Instance details

Defined in Dhall.Syntax.RecordField

type Rep (RecordField s a) = D1 ('MetaData "RecordField" "Dhall.Syntax.RecordField" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 #

Construct a `RecordField` with no src information

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

Traverse over the immediate `Expr` children in a `RecordField`.

data FunctionBinding s a #

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

- functionBindingSrc0 :: Maybe s
- functionBindingVariable :: Text
- functionBindingSrc1 :: Maybe s
- functionBindingSrc2 :: Maybe s
- functionBindingAnnotation :: Expr s a

#### Instances

Instances details

Generic (FunctionBinding s a) |

Instance details

Defined in Dhall.Syntax.FunctionBinding

Associated Types

type Rep (FunctionBinding s a) |

Instance details

Defined in Dhall.Syntax.FunctionBinding

type Rep (FunctionBinding s a) = D1 ('MetaData "FunctionBinding" "Dhall.Syntax.FunctionBinding" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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))))))

Methods

from :: FunctionBinding s a -> Rep (FunctionBinding s a) x #

to :: Rep (FunctionBinding s a) x -> FunctionBinding s a #

type Rep (FunctionBinding s a) |

Instance details

Defined in Dhall.Syntax.FunctionBinding

type Rep (FunctionBinding s a) = D1 ('MetaData "FunctionBinding" "Dhall.Syntax.FunctionBinding" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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 #

Smart constructor for `FunctionBinding` with no src information

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

Traverse over the immediate `Expr` children in a `FunctionBinding`.

makeBinding :: Text -> Expr s a -> Binding s a #

Construct a `Binding` with no source information and no type annotation.

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

Traverse over the immediate `Expr` children in a `Binding`.

snip :: Text -> Text #

Utility function to cut out the interior of a large text block

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

A traversal over the immediate sub-expressions in `Chunks`.

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

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 `let`s that formed a let-block in the original source.

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

Wrap let-`Binding`s 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

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

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

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

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

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

This also remove CharacterSet annotations.

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

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

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

Remove any outermost `Note` constructors

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

reservedIdentifiers :: HashSet Text #

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

data Scheme #

The URI scheme

Constructors

HTTP |
HTTPS |

#### Instances

Instances details

Data Scheme |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Scheme -> c Scheme #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Scheme #

toConstr :: Scheme -> Constr #

dataTypeOf :: Scheme -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Scheme) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Scheme) #

gmapT :: (forall b. Data b => b -> b) -> Scheme -> Scheme #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Scheme -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Scheme -> r #

gmapQ :: (forall d. Data d => d -> u) -> Scheme -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Scheme -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Scheme -> m Scheme #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Scheme -> m Scheme #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Scheme -> m Scheme #

Generic Scheme |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep Scheme |
Instance details Defined in Dhall.Syntax.Import type Rep Scheme = D1 ('MetaData "Scheme" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "HTTP" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "HTTPS" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: Scheme -> Rep Scheme x #

to :: Rep Scheme x -> Scheme #

type Rep Scheme |
Instance details Defined in Dhall.Syntax.Import type Rep Scheme = D1 ('MetaData "Scheme" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" 'False) (C1 ('MetaCons "HTTP" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "HTTPS" 'PrefixI 'False) (U1 :: Type -> Type))

data FilePrefix #

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

Data FilePrefix |

Instance details

Defined in Dhall.Syntax.Import

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FilePrefix -> c FilePrefix #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FilePrefix #

toConstr :: FilePrefix -> Constr #

dataTypeOf :: FilePrefix -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FilePrefix) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FilePrefix) #

gmapT :: (forall b. Data b => b -> b) -> FilePrefix -> FilePrefix #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FilePrefix -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FilePrefix -> r #

gmapQ :: (forall d. Data d => d -> u) -> FilePrefix -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> FilePrefix -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> FilePrefix -> m FilePrefix #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FilePrefix -> m FilePrefix #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FilePrefix -> m FilePrefix #

Generic FilePrefix |

Instance details

Defined in Dhall.Syntax.Import

Associated Types

type Rep FilePrefix |

Instance details

Defined in Dhall.Syntax.Import

type Rep FilePrefix = D1 ('MetaData "FilePrefix" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

Methods

from :: FilePrefix -> Rep FilePrefix x #

to :: Rep FilePrefix x -> FilePrefix #

type Rep FilePrefix |

Instance details

Defined in Dhall.Syntax.Import

type Rep FilePrefix = D1 ('MetaData "FilePrefix" "Dhall.Syntax.Import" "dhall-1.42.1-EOSVgq7D92c9LY0yY6dtAL" '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)))

pathCharacter :: Char -> Bool #

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

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

textShow :: Text -> Text #

Utility that powers the `Text/show` built-in

newtype ReifiedNormalizer a #

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

Constructors

ReifiedNormalizer |

Fields

- getReifiedNormalizer :: Normalizer a

type Normalizer a = NormalizerM Identity a #

An variation on `NormalizerM` for pure normalizers

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

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

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

Substitute all occurrences of a variable with an expression

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

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

α-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)

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

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

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

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

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

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!

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

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

escapeText :: Text -> Text #

Escape a `Text` literal using Dhall's escaping rules

Note that the result does not include surrounding quotes

censorExpression :: Expr Src a -> Expr Src a #

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

- Replacing all `Src` text with spaces
- Replacing all `Text` literals inside type errors with spaces

censorText :: Text -> Text #

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

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

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

data MultipleCheckFailed #

Exception thrown when the `--check` flag to a command-line subcommand fails

Constructors

MultipleCheckFailed |

Fields

- command :: Text
- modified :: Text
- inputs :: NonEmpty Input

#### Instances

Instances details

Exception MultipleCheckFailed |
Instance details Defined in Dhall.Util Methods toException :: MultipleCheckFailed -> SomeException # fromException :: SomeException -> Maybe MultipleCheckFailed # displayException :: MultipleCheckFailed -> String #
Show MultipleCheckFailed |
Instance details Defined in Dhall.Util Methods showsPrec :: Int -> MultipleCheckFailed -> ShowS # show :: MultipleCheckFailed -> String # showList :: [MultipleCheckFailed] -> ShowS #

newtype CheckFailed #

A check failure corresponding to a single input. This type is intended to be used with `MultipleCheckFailed` for error reporting.

Constructors

CheckFailed Input |

data Output #

Path to output

Constructors

StandardOutput |
OutputFile FilePath |

data Transitivity #

Specifies whether or not an input's transitive dependencies should also be processed. Transitive dependencies are restricted to relative file imports.

Constructors

NonTransitive | Do not process transitive dependencies
Transitive | Process transitive dependencies in the same way

data Censor #

Set to `Censor` if you want to censor error text that might include secrets

Constructors

NoCensor |
Censor |

snipDoc :: Doc Ann -> Doc a #

Like `snip`, but for `Doc`s

Note that this has to be opinionated and render ANSI color codes, but that should be fine because we don't use this in a non-interactive context

_ERROR :: IsString string => string #

Prefix used for error messages

handleMultipleChecksFailed :: (Foldable t, Traversable t) => Text -> Text -> (a -> IO (Either CheckFailed ())) -> t a -> IO () #

Run IO for multiple inputs, then collate all the check failures before throwing if there was any failure

getExpression :: Censor -> Input -> IO (Expr Src Import) #

Convenient utility for retrieving an expression

getExpressionAndHeader :: Censor -> Input -> IO (Header, Expr Src Import) #

Convenient utility for retrieving an expression along with its header

getExpressionAndHeaderFromStdinText :: Censor -> String -> Text -> IO (Header, Expr Src Import) #

Convenient utility for retrieving an expression along with its header from | text already read from STDIN (so it's not re-read)

renderExpression :: Pretty a => CharacterSet -> Bool -> Maybe FilePath -> Expr Src a -> IO () #

Convenient utility to output an expression either to a file or to stdout.