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
- _WARNING :: IsString string => string
- printWarning :: MonadIO m => String -> m ()
- 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 # backtraceDesired :: ReadError a -> Bool #
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

Canonicalize File |
Instance details Defined in Dhall.Import Methods canonicalize :: File -> File
Semigroup File |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: File -> File -> File # sconcat :: NonEmpty File -> File # stimes :: Integral b => b -> File -> File #
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 #
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.2-AALQHV4FhMB9Vlk0NyXwcC" '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 #
type Rep File |
Instance details Defined in Dhall.Syntax.Import type Rep File = D1 ('MetaData "File" "Dhall.Syntax.Import" "dhall-1.42.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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

Canonicalize Directory |
    >>> canonicalize (Directory {components = ["..",".."]})
    Directory {components = ["..",".."]}
Instance details Defined in Dhall.Import Methods canonicalize :: Directory -> Directory
Semigroup Directory |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: Directory -> Directory -> Directory # sconcat :: NonEmpty Directory -> Directory # stimes :: Integral b => b -> Directory -> Directory #
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 #
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.2-AALQHV4FhMB9Vlk0NyXwcC" '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 #
type Rep Directory |
Instance details Defined in Dhall.Syntax.Import type Rep Directory = D1 ('MetaData "Directory" "Dhall.Syntax.Import" "dhall-1.42.2-AALQHV4FhMB9Vlk0NyXwcC" '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

Canonicalize ImportHashed |
Instance details Defined in Dhall.Import Methods canonicalize :: ImportHashed -> ImportHashed
Semigroup ImportHashed |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: ImportHashed -> ImportHashed -> ImportHashed # sconcat :: NonEmpty ImportHashed -> ImportHashed # stimes :: Integral b => b -> ImportHashed -> ImportHashed #
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 #
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.2-AALQHV4FhMB9Vlk0NyXwcC" '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 #
type Rep ImportHashed |
Instance details Defined in Dhall.Syntax.Import type Rep ImportHashed = D1 ('MetaData "ImportHashed" "Dhall.Syntax.Import" "dhall-1.42.2-AALQHV4FhMB9Vlk0NyXwcC" '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

Canonicalize ImportType |
Instance details Defined in Dhall.Import Methods canonicalize :: ImportType -> ImportType
Semigroup ImportType |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: ImportType -> ImportType -> ImportType # sconcat :: NonEmpty ImportType -> ImportType # stimes :: Integral b => b -> ImportType -> ImportType #
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 #
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.2-AALQHV4FhMB9Vlk0NyXwcC" '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 #
type Rep ImportType |
Instance details Defined in Dhall.Syntax.Import type Rep ImportType = D1 ('MetaData "ImportType" "Dhall.Syntax.Import" "dhall-1.42.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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

Canonicalize Import |
Instance details Defined in Dhall.Import Methods canonicalize :: Import -> Import
Semigroup Import |
Instance details Defined in Dhall.Syntax.Import Methods (<>) :: Import -> Import -> Import # sconcat :: NonEmpty Import -> Import # stimes :: Integral b => b -> Import -> Import #
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 #
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.2-AALQHV4FhMB9Vlk0NyXwcC" '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 #
type Rep Import |
Instance details Defined in Dhall.Syntax.Import type Rep Import = D1 ('MetaData "Import" "Dhall.Syntax.Import" "dhall-1.42.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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

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 #
IsString (Chunks s a) |
Instance details Defined in Dhall.Syntax.Chunks Methods fromString :: String -> 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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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.2-AALQHV4FhMB9Vlk0NyXwcC" '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 # backtraceDesired :: MultipleCheckFailed -> Bool #
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

_WARNING :: IsString string => string #

Prefix used for error messages

printWarning :: MonadIO m => String -> m () #

Output a warning message on stderr.

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.