| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Dhall
Description
Please read the Dhall.Tutorial module, which contains a tutorial explaining how to use the language, the compiler, and this library
Synopsis
- input :: Decoder a -> Text -> IO a
- inputWithSettings :: InputSettings -> Decoder a -> Text -> IO a
- inputFile :: Decoder a -> FilePath -> IO a
- inputFileWithSettings :: EvaluateSettings -> Decoder a -> FilePath -> IO a
- inputExpr :: Text -> IO (Expr Src Void)
- inputExprWithSettings :: InputSettings -> Text -> IO (Expr Src Void)
- rootDirectory :: Functor f => LensLike' f InputSettings FilePath
- sourceName :: Functor f => LensLike' f InputSettings FilePath
- startingContext :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Context (Expr Src Void))
- substitutions :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Substitutions Src Void)
- normalizer :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Maybe (ReifiedNormalizer Void))
- newManager :: (Functor f, HasEvaluateSettings s) => LensLike' f s (IO Manager)
- defaultInputSettings :: InputSettings
- data InputSettings
- defaultEvaluateSettings :: EvaluateSettings
- data EvaluateSettings
- class HasEvaluateSettings s where
- evaluateSettings :: Functor f => LensLike' f s EvaluateSettings
- detailed :: IO a -> IO a
- data Decoder a = Decoder {}
- newtype RecordDecoder a = RecordDecoder (Product (Const (Map Text (Expector (Expr Src Void)))) (Compose ((->) (Expr Src Void)) (Extractor Src Void)) a)
- newtype UnionDecoder a = UnionDecoder (Compose (Map Text) Decoder a)
- data Encoder a = Encoder {}
- class FromDhall a where
- autoWith :: InputNormalizer -> Decoder a
- type Interpret = FromDhall
- data InvalidDecoder s a = InvalidDecoder {
- invalidDecoderExpected :: Expr s a
- invalidDecoderExpression :: Expr s a
- type ExtractErrors s a = DhallErrors (ExtractError s a)
- data ExtractError s a
- type Extractor s a = Validation (ExtractErrors s a)
- type MonadicExtractor s a = Either (ExtractErrors s a)
- typeError :: Expector (Expr s a) -> Expr s a -> Extractor s a b
- extractError :: Text -> Extractor s a b
- toMonadic :: Extractor s a b -> MonadicExtractor s a b
- fromMonadic :: MonadicExtractor s a b -> Extractor s a b
- type ExpectedTypeErrors = DhallErrors ExpectedTypeError
- data ExpectedTypeError = RecursiveTypeError
- type Expector = Validation ExpectedTypeErrors
- auto :: FromDhall a => Decoder a
- genericAuto :: (Generic a, GenericFromDhall a (Rep a)) => Decoder a
- genericAutoWith :: (Generic a, GenericFromDhall a (Rep a)) => InterpretOptions -> Decoder a
- data InterpretOptions = InterpretOptions {}
- newtype InputNormalizer = InputNormalizer {}
- defaultInputNormalizer :: InputNormalizer
- data SingletonConstructors
- defaultInterpretOptions :: InterpretOptions
- bool :: Decoder Bool
- natural :: Decoder Natural
- integer :: Decoder Integer
- word :: Decoder Word
- word8 :: Decoder Word8
- word16 :: Decoder Word16
- word32 :: Decoder Word32
- word64 :: Decoder Word64
- int :: Decoder Int
- int8 :: Decoder Int8
- int16 :: Decoder Int16
- int32 :: Decoder Int32
- int64 :: Decoder Int64
- scientific :: Decoder Scientific
- double :: Decoder Double
- lazyText :: Decoder Text
- strictText :: Decoder Text
- maybe :: Decoder a -> Decoder (Maybe a)
- sequence :: Decoder a -> Decoder (Seq a)
- list :: Decoder a -> Decoder [a]
- vector :: Decoder a -> Decoder (Vector a)
- function :: Encoder a -> Decoder b -> Decoder (a -> b)
- functionWith :: InputNormalizer -> Encoder a -> Decoder b -> Decoder (a -> b)
- setFromDistinctList :: (Ord a, Show a) => Decoder a -> Decoder (Set a)
- setIgnoringDuplicates :: Ord a => Decoder a -> Decoder (Set a)
- hashSetFromDistinctList :: (Hashable a, Ord a, Show a) => Decoder a -> Decoder (HashSet a)
- hashSetIgnoringDuplicates :: (Hashable a, Ord a) => Decoder a -> Decoder (HashSet a)
- map :: Ord k => Decoder k -> Decoder v -> Decoder (Map k v)
- hashMap :: (Eq k, Hashable k) => Decoder k -> Decoder v -> Decoder (HashMap k v)
- pairFromMapEntry :: Decoder k -> Decoder v -> Decoder (k, v)
- unit :: Decoder ()
- void :: Decoder Void
- string :: Decoder String
- pair :: Decoder a -> Decoder b -> Decoder (a, b)
- record :: RecordDecoder a -> Decoder a
- field :: Text -> Decoder a -> RecordDecoder a
- union :: UnionDecoder a -> Decoder a
- constructor :: Text -> Decoder a -> UnionDecoder a
- class GenericFromDhall t f where
- genericAutoWithNormalizer :: Proxy t -> InputNormalizer -> InterpretOptions -> State Int (Decoder (f a))
- class GenericFromDhallUnion t f where
- genericUnionAutoWithNormalizer :: Proxy t -> InputNormalizer -> InterpretOptions -> UnionDecoder (f a)
- class ToDhall a where
- injectWith :: InputNormalizer -> Encoder a
- type Inject = ToDhall
- inject :: ToDhall a => Encoder a
- genericToDhall :: (Generic a, GenericToDhall (Rep a)) => Encoder a
- genericToDhallWith :: (Generic a, GenericToDhall (Rep a)) => InterpretOptions -> Encoder a
- newtype RecordEncoder a = RecordEncoder (Map Text (Encoder a))
- encodeFieldWith :: Text -> Encoder a -> RecordEncoder a
- encodeField :: ToDhall a => Text -> RecordEncoder a
- recordEncoder :: RecordEncoder a -> Encoder a
- newtype UnionEncoder a = UnionEncoder (Product (Const (Map Text (Expr Src Void))) (Op (Text, Expr Src Void)) a)
- encodeConstructorWith :: Text -> Encoder a -> UnionEncoder a
- encodeConstructor :: ToDhall a => Text -> UnionEncoder a
- unionEncoder :: UnionEncoder a -> Encoder a
- (>|<) :: UnionEncoder a -> UnionEncoder b -> UnionEncoder (Either a b)
- class GenericToDhall f where
- genericToDhallWithNormalizer :: InputNormalizer -> InterpretOptions -> State Int (Encoder (f a))
- newtype DhallErrors e = DhallErrors {}
- showDhallErrors :: Show e => String -> DhallErrors e -> String
- rawInput :: Alternative f => Decoder a -> Expr s Void -> f a
- (>$<) :: Contravariant f => (a -> b) -> f b -> f a
- (>*<) :: Divisible f => f a -> f b -> f (a, b)
- data Result f
- data Natural
- data Seq a
- data Text
- data Vector a
- class Generic a
Input
Arguments
| :: Decoder a | The decoder for the Dhall value |
| -> Text | The Dhall program |
| -> IO a | The decoded value in Haskell |
Type-check and evaluate a Dhall program, decoding the result into Haskell
The first argument determines the type of value that you decode:
>>>input integer "+2"2>>>input (vector double) "[1.0, 2.0]"[1.0,2.0]
Use auto to automatically select which type to decode based on the
inferred return type:
>>>input auto "True" :: IO BoolTrue
This uses the settings from defaultInputSettings.
Arguments
| :: InputSettings | |
| -> Decoder a | The decoder for the Dhall value |
| -> Text | The Dhall program |
| -> IO a | The decoded value in Haskell |
Extend input with a root directory to resolve imports relative
to, a file to mention in errors as the source, a custom typing
context, and a custom normalization process.
Since: 1.16
Arguments
| :: Decoder a | The decoder for the Dhall value |
| -> FilePath | The path to the Dhall program. |
| -> IO a | The decoded value in Haskell. |
Type-check and evaluate a Dhall program that is read from the file-system.
This uses the settings from defaultEvaluateSettings.
Since: 1.16
inputFileWithSettings Source #
Arguments
| :: EvaluateSettings | |
| -> Decoder a | The decoder for the Dhall value |
| -> FilePath | The path to the Dhall program. |
| -> IO a | The decoded value in Haskell. |
Extend inputFile with a custom typing context and a custom
normalization process.
Since: 1.16
Similar to input, but without interpreting the Dhall Expr into a Haskell
type.
Uses the settings from defaultInputSettings.
inputExprWithSettings Source #
Extend inputExpr with a root directory to resolve imports relative
to, a file to mention in errors as the source, a custom typing
context, and a custom normalization process.
Since: 1.16
rootDirectory :: Functor f => LensLike' f InputSettings FilePath Source #
Access the directory to resolve imports relative to.
Since: 1.16
sourceName :: Functor f => LensLike' f InputSettings FilePath Source #
Access the name of the source to report locations from; this is only used in error messages, so it's okay if this is a best guess or something symbolic.
Since: 1.16
startingContext :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Context (Expr Src Void)) Source #
Access the starting context used for evaluation and type-checking.
Since: 1.16
substitutions :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Substitutions Src Void) Source #
Access the custom substitutions.
Since: 1.30
normalizer :: (Functor f, HasEvaluateSettings s) => LensLike' f s (Maybe (ReifiedNormalizer Void)) Source #
Access the custom normalizer.
Since: 1.16
newManager :: (Functor f, HasEvaluateSettings s) => LensLike' f s (IO Manager) Source #
Access the HTTP manager initializer.
Since: 1.36
defaultInputSettings :: InputSettings Source #
Default input settings: resolves imports relative to . (the
current working directory), report errors as coming from (input),
and default evaluation settings from defaultEvaluateSettings.
Since: 1.16
data InputSettings Source #
Since: 1.16
Instances
| HasEvaluateSettings InputSettings Source # | |
Defined in Dhall Methods evaluateSettings :: Functor f => LensLike' f InputSettings EvaluateSettings Source # | |
defaultEvaluateSettings :: EvaluateSettings Source #
Default evaluation settings: no extra entries in the initial context, and no special normalizer behaviour.
Since: 1.16
data EvaluateSettings Source #
Since: 1.16
Instances
| HasEvaluateSettings EvaluateSettings Source # | |
Defined in Dhall Methods evaluateSettings :: Functor f => LensLike' f EvaluateSettings EvaluateSettings Source # | |
class HasEvaluateSettings s where Source #
Since: 1.16
Methods
evaluateSettings :: Functor f => LensLike' f s EvaluateSettings Source #
Instances
| HasEvaluateSettings EvaluateSettings Source # | |
Defined in Dhall Methods evaluateSettings :: Functor f => LensLike' f EvaluateSettings EvaluateSettings Source # | |
| HasEvaluateSettings InputSettings Source # | |
Defined in Dhall Methods evaluateSettings :: Functor f => LensLike' f InputSettings EvaluateSettings Source # | |
detailed :: IO a -> IO a Source #
Use this to provide more detailed error messages
> input auto "True" :: IO Integer *** Exception: Error: Expression doesn't match annotation True : Integer (input):1:1
> detailed (input auto "True") :: IO Integer
*** Exception: Error: Expression doesn't match annotation
Explanation: You can annotate an expression with its type or kind using the
❰:❱ symbol, like this:
┌───────┐
│ x : t │ ❰x❱ is an expression and ❰t❱ is the annotated type or kind of ❰x❱
└───────┘
The type checker verifies that the expression's type or kind matches the
provided annotation
For example, all of the following are valid annotations that the type checker
accepts:
┌─────────────┐
│ 1 : Natural │ ❰1❱ is an expression that has type ❰Natural❱, so the type
└─────────────┘ checker accepts the annotation
┌───────────────────────┐
│ Natural/even 2 : Bool │ ❰Natural/even 2❱ has type ❰Bool❱, so the type
└───────────────────────┘ checker accepts the annotation
┌────────────────────┐
│ List : Type → Type │ ❰List❱ is an expression that has kind ❰Type → Type❱,
└────────────────────┘ so the type checker accepts the annotation
┌──────────────────┐
│ List Text : Type │ ❰List Text❱ is an expression that has kind ❰Type❱, so
└──────────────────┘ the type checker accepts the annotation
However, the following annotations are not valid and the type checker will
reject them:
┌──────────┐
│ 1 : Text │ The type checker rejects this because ❰1❱ does not have type
└──────────┘ ❰Text❱
┌─────────────┐
│ List : Type │ ❰List❱ does not have kind ❰Type❱
└─────────────┘
You or the interpreter annotated this expression:
↳ True
... with this type or kind:
↳ Integer
... but the inferred type or kind of the expression is actually:
↳ Bool
Some common reasons why you might get this error:
● The Haskell Dhall interpreter implicitly inserts a top-level annotation
matching the expected type
For example, if you run the following Haskell code:
┌───────────────────────────────┐
│ >>> input auto "1" :: IO Text │
└───────────────────────────────┘
... then the interpreter will actually type check the following annotated
expression:
┌──────────┐
│ 1 : Text │
└──────────┘
... and then type-checking will fail
────────────────────────────────────────────────────────────────────────────────
True : Integer
(input):1:1Decoders
A (Decoder a) represents a way to marshal a value of type 'a' from Dhall
into Haskell
You can produce Decoders either explicitly:
example :: Decoder (Vector Text) example = vector text
... or implicitly using auto:
example :: Decoder (Vector Text) example = auto
You can consume Decoders using the input function:
input :: Decoder a -> Text -> IO a
Constructors
| Decoder | |
newtype RecordDecoder a Source #
The RecordDecoder applicative functor allows you to build a Decoder
from a Dhall record.
For example, let's take the following Haskell data type:
>>>:{data Project = Project { projectName :: Text , projectDescription :: Text , projectStars :: Natural } :}
And assume that we have the following Dhall record that we would like to
parse as a Project:
{ name =
"dhall-haskell"
, description =
"A configuration language guaranteed to terminate"
, stars =
289
}Our decoder has type Decoder Project, but we can't build that out of any
smaller decoders, as Decoders cannot be combined (they are only Functors).
However, we can use a RecordDecoder to build a Decoder for Project:
>>>:{project :: Decoder Project project = record ( Project <$> field "name" strictText <*> field "description" strictText <*> field "stars" natural ) :}
Constructors
| RecordDecoder (Product (Const (Map Text (Expector (Expr Src Void)))) (Compose ((->) (Expr Src Void)) (Extractor Src Void)) a) |
Instances
| Functor RecordDecoder Source # | |
Defined in Dhall Methods fmap :: (a -> b) -> RecordDecoder a -> RecordDecoder b # (<$) :: a -> RecordDecoder b -> RecordDecoder a # | |
| Applicative RecordDecoder Source # | |
Defined in Dhall Methods pure :: a -> RecordDecoder a # (<*>) :: RecordDecoder (a -> b) -> RecordDecoder a -> RecordDecoder b # liftA2 :: (a -> b -> c) -> RecordDecoder a -> RecordDecoder b -> RecordDecoder c # (*>) :: RecordDecoder a -> RecordDecoder b -> RecordDecoder b # (<*) :: RecordDecoder a -> RecordDecoder b -> RecordDecoder a # | |
newtype UnionDecoder a Source #
The UnionDecoder monoid allows you to build a Decoder from a Dhall union
For example, let's take the following Haskell data type:
>>>:{data Status = Queued Natural | Result Text | Errored Text :}
And assume that we have the following Dhall union that we would like to
parse as a Status:
< Result : Text | Queued : Natural | Errored : Text >.Result "Finish successfully"
Our decoder has type Decoder Status, but we can't build that out of any
smaller decoders, as Decoders cannot be combined (they are only Functors).
However, we can use a UnionDecoder to build a Decoder for Status:
>>>:{status :: Decoder Status status = union ( ( Queued <$> constructor "Queued" natural ) <> ( Result <$> constructor "Result" strictText ) <> ( Errored <$> constructor "Errored" strictText ) ) :}
Constructors
| UnionDecoder (Compose (Map Text) Decoder a) |
Instances
| Functor UnionDecoder Source # | |
Defined in Dhall Methods fmap :: (a -> b) -> UnionDecoder a -> UnionDecoder b # (<$) :: a -> UnionDecoder b -> UnionDecoder a # | |
| Semigroup (UnionDecoder a) Source # | |
Defined in Dhall Methods (<>) :: UnionDecoder a -> UnionDecoder a -> UnionDecoder a # sconcat :: NonEmpty (UnionDecoder a) -> UnionDecoder a # stimes :: Integral b => b -> UnionDecoder a -> UnionDecoder a # | |
| Monoid (UnionDecoder a) Source # | |
Defined in Dhall Methods mempty :: UnionDecoder a # mappend :: UnionDecoder a -> UnionDecoder a -> UnionDecoder a # mconcat :: [UnionDecoder a] -> UnionDecoder a # | |
An (Encoder a) represents a way to marshal a value of type 'a' from
Haskell into Dhall
Constructors
| Encoder | |
class FromDhall a where Source #
Any value that implements FromDhall can be automatically decoded based on
the inferred return type of input
>>>input auto "[1, 2, 3]" :: IO (Vector Natural)[1,2,3]>>>input auto "toMap { a = False, b = True }" :: IO (Map Text Bool)fromList [("a",False),("b",True)]
This class auto-generates a default implementation for types that
implement Generic. This does not auto-generate an instance for recursive
types.
The default instance can be tweaked using genericAutoWith and custom
InterpretOptions, or using
DerivingVia
and Codec from Dhall.Deriving.
Minimal complete definition
Nothing
Methods
autoWith :: InputNormalizer -> Decoder a Source #
autoWith :: (Generic a, GenericFromDhall a (Rep a)) => InputNormalizer -> Decoder a Source #
Instances
| FromDhall Bool Source # | |
| FromDhall Double Source # | |
| FromDhall Int Source # | |
| FromDhall Int8 Source # | |
| FromDhall Int16 Source # | |
| FromDhall Int32 Source # | |
| FromDhall Int64 Source # | |
| FromDhall Integer Source # | |
| FromDhall Natural Source # | |
| FromDhall Word Source # | |
| FromDhall Word8 Source # | |
| FromDhall Word16 Source # | |
| FromDhall Word32 Source # | |
| FromDhall Word64 Source # | |
| FromDhall () Source # | |
| FromDhall Scientific Source # | |
Defined in Dhall Methods | |
| FromDhall Text Source # | |
| FromDhall Text Source # | |
| FromDhall Void Source # | |
| FromDhall [Char] Source # | |
| FromDhall a => FromDhall [a] Source # | |
| FromDhall a => FromDhall (Maybe a) Source # | |
| FromDhall a => FromDhall (Seq a) Source # | |
| (FromDhall a, Ord a, Show a) => FromDhall (Set a) Source # | Note that this instance will throw errors in the presence of duplicates in
the list. To ignore duplicates, use |
| (Functor f, FromDhall (f (Result f))) => FromDhall (Fix f) Source # | You can use this instance to marshal recursive types from Dhall to Haskell. Here is an example use of this instance: {-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TemplateHaskell #-}
import Data.Fix (Fix(..))
import Data.Text (Text)
import Dhall (FromDhall)
import GHC.Generics (Generic)
import Numeric.Natural (Natural)
import qualified Data.Fix as Fix
import qualified Data.Functor.Foldable as Foldable
import qualified Data.Functor.Foldable.TH as TH
import qualified Dhall
import qualified NeatInterpolation
data Expr
= Lit Natural
| Add Expr Expr
| Mul Expr Expr
deriving (Show)
TH.makeBaseFunctor ''Expr
deriving instance Generic (ExprF a)
deriving instance FromDhall a => FromDhall (ExprF a)
example :: Text
example = [NeatInterpolation.text|
\(Expr : Type)
-> let ExprF =
< LitF :
Natural
| AddF :
{ _1 : Expr, _2 : Expr }
| MulF :
{ _1 : Expr, _2 : Expr }
>
in \(Fix : ExprF -> Expr)
-> let Lit = \(x : Natural) -> Fix (ExprF.LitF x)
let Add =
\(x : Expr)
-> \(y : Expr)
-> Fix (ExprF.AddF { _1 = x, _2 = y })
let Mul =
\(x : Expr)
-> \(y : Expr)
-> Fix (ExprF.MulF { _1 = x, _2 = y })
in Add (Mul (Lit 3) (Lit 7)) (Add (Lit 1) (Lit 2))
|]
convert :: Fix ExprF -> Expr
convert = Fix.foldFix Foldable.embed
main :: IO ()
main = do
x <- Dhall.input Dhall.auto example :: IO (Fix ExprF)
print (convert x :: Expr) |
| (FromDhall a, Hashable a, Ord a, Show a) => FromDhall (HashSet a) Source # | Note that this instance will throw errors in the presence of duplicates in
the list. To ignore duplicates, use |
| FromDhall a => FromDhall (Vector a) Source # | |
| FromDhall (f (Result f)) => FromDhall (Result f) Source # | |
| (ToDhall a, FromDhall b) => FromDhall (a -> b) Source # | |
| (FromDhall a, FromDhall b) => FromDhall (a, b) Source # | |
| (Eq k, Hashable k, FromDhall k, FromDhall v) => FromDhall (HashMap k v) Source # | |
| (Ord k, FromDhall k, FromDhall v) => FromDhall (Map k v) Source # | |
| (Generic a, GenericFromDhall a (Rep a), ModifyOptions tag) => FromDhall (Codec tag a) Source # | |
Defined in Dhall.Deriving | |
type Interpret = FromDhall Source #
A compatibility alias for FromDhall
This will eventually be removed.
data InvalidDecoder s a Source #
Every Decoder must obey the contract that if an expression's type matches
the expected type then the extract function must not fail with a type
error. However, decoding may still fail for other reasons (such as the
decoder for Sets rejecting a Dhall List with duplicate
elements).
This error type is used to indicate an internal error in the implementation
of a Decoder where the expected type matched the Dhall expression, but the
expression supplied to the extraction function did not match the expected
type. If this happens that means that the Decoder itself needs to be
fixed.
Constructors
| InvalidDecoder | |
Fields
| |
Instances
| (Pretty s, Pretty a, Typeable s, Typeable a) => Show (InvalidDecoder s a) Source # | |
Defined in Dhall Methods showsPrec :: Int -> InvalidDecoder s a -> ShowS # show :: InvalidDecoder s a -> String # showList :: [InvalidDecoder s a] -> ShowS # | |
| (Pretty s, Typeable s, Pretty a, Typeable a) => Exception (InvalidDecoder s a) Source # | |
Defined in Dhall Methods toException :: InvalidDecoder s a -> SomeException # fromException :: SomeException -> Maybe (InvalidDecoder s a) # displayException :: InvalidDecoder s a -> String # | |
type ExtractErrors s a = DhallErrors (ExtractError s a) Source #
One or more errors returned from extracting a Dhall expression to a Haskell expression
data ExtractError s a Source #
Extraction of a value can fail for two reasons, either a type mismatch (which should not happen,
as expressions are type-checked against the expected type before being passed to extract), or
a term-level error, described with a freeform text value.
Constructors
| TypeMismatch (InvalidDecoder s a) | |
| ExpectedTypeError ExpectedTypeError | |
| ExtractError Text |
Instances
| (Pretty s, Pretty a, Typeable s, Typeable a) => Show (ExtractError s a) Source # | |
Defined in Dhall Methods showsPrec :: Int -> ExtractError s a -> ShowS # show :: ExtractError s a -> String # showList :: [ExtractError s a] -> ShowS # | |
| (Pretty s, Pretty a, Typeable s, Typeable a) => Show (ExtractErrors s a) Source # | |
Defined in Dhall Methods showsPrec :: Int -> ExtractErrors s a -> ShowS # show :: ExtractErrors s a -> String # showList :: [ExtractErrors s a] -> ShowS # | |
| (Pretty s, Pretty a, Typeable s, Typeable a) => Exception (ExtractError s a) Source # | |
Defined in Dhall Methods toException :: ExtractError s a -> SomeException # fromException :: SomeException -> Maybe (ExtractError s a) # displayException :: ExtractError s a -> String # | |
type Extractor s a = Validation (ExtractErrors s a) Source #
Useful synonym for the Validation type used when marshalling Dhall
expressions
type MonadicExtractor s a = Either (ExtractErrors s a) Source #
Useful synonym for the equivalent Either type used when marshalling Dhall
code
typeError :: Expector (Expr s a) -> Expr s a -> Extractor s a b Source #
Generate a type error during extraction by specifying the expected type and the actual type. The expected type is not yet determined.
toMonadic :: Extractor s a b -> MonadicExtractor s a b Source #
Switches from an Applicative extraction result, able to accumulate errors,
to a Monad extraction result, able to chain sequential operations
fromMonadic :: MonadicExtractor s a b -> Extractor s a b Source #
Switches from a Monad extraction result, able to chain sequential errors,
to an Applicative extraction result, able to accumulate errors
type ExpectedTypeErrors = DhallErrors ExpectedTypeError Source #
One or more errors returned when determining the Dhall type of a Haskell expression
data ExpectedTypeError Source #
Error type used when determining the Dhall type of a Haskell expression
Constructors
| RecursiveTypeError |
Instances
| Eq ExpectedTypeError Source # | |
Defined in Dhall Methods (==) :: ExpectedTypeError -> ExpectedTypeError -> Bool # (/=) :: ExpectedTypeError -> ExpectedTypeError -> Bool # | |
| Show ExpectedTypeError Source # | |
Defined in Dhall Methods showsPrec :: Int -> ExpectedTypeError -> ShowS # show :: ExpectedTypeError -> String # showList :: [ExpectedTypeError] -> ShowS # | |
| Show ExpectedTypeErrors Source # | |
Defined in Dhall Methods showsPrec :: Int -> ExpectedTypeErrors -> ShowS # show :: ExpectedTypeErrors -> String # showList :: [ExpectedTypeErrors] -> ShowS # | |
| Exception ExpectedTypeError Source # | |
Defined in Dhall Methods toException :: ExpectedTypeError -> SomeException # | |
type Expector = Validation ExpectedTypeErrors Source #
Useful synonym for the Validation type used when marshalling Dhall
expressions
auto :: FromDhall a => Decoder a Source #
Use the default input normalizer for interpreting a configuration file
auto = autoWith defaultInputNormalizer
genericAuto :: (Generic a, GenericFromDhall a (Rep a)) => Decoder a Source #
genericAuto is the default implementation for auto if you derive
FromDhall. The difference is that you can use genericAuto without
having to explicitly provide a FromDhall instance for a type as long as
the type derives Generic
genericAutoWith :: (Generic a, GenericFromDhall a (Rep a)) => InterpretOptions -> Decoder a Source #
genericAutoWith is a configurable version of genericAuto.
data InterpretOptions Source #
Use these options to tweak how Dhall derives a generic implementation of
FromDhall
Constructors
| InterpretOptions | |
Fields
| |
newtype InputNormalizer Source #
This is only used by the FromDhall instance for functions in order
to normalize the function input before marshaling the input into a
Dhall expression
Constructors
| InputNormalizer | |
Fields | |
defaultInputNormalizer :: InputNormalizer Source #
Default normalization-related settings (no custom normalization)
data SingletonConstructors Source #
This type specifies how to model a Haskell constructor with 1 field in Dhall
For example, consider the following Haskell datatype definition:
data Example = Foo { x :: Double } | Bar DoubleDepending on which option you pick, the corresponding Dhall type could be:
< Foo : Double | Bar : Double > -- Bare
< Foo : { x : Double } | Bar : { _1 : Double } > -- Wrapped< Foo : { x : Double } | Bar : Double > -- SmartConstructors
| Bare | Never wrap the field in a record |
| Wrapped | Always wrap the field in a record |
| Smart | Only fields in a record if they are named |
Instances
| ToSingletonConstructors a => ModifyOptions (SetSingletonConstructors a :: Type) Source # | |
Defined in Dhall.Deriving Methods modifyOptions :: InterpretOptions -> InterpretOptions Source # | |
defaultInterpretOptions :: InterpretOptions Source #
Default interpret options for generics-based instances, which you can tweak or override, like this:
genericAutoWith
(defaultInterpretOptions { fieldModifier = Data.Text.Lazy.dropWhile (== '_') })scientific :: Decoder Scientific Source #
Decode a Scientific
r
>>>input scientific "1e100"1.0e100
maybe :: Decoder a -> Decoder (Maybe a) Source #
Decode a Maybe
>>>input (maybe natural) "Some 1"Just 1
sequence :: Decoder a -> Decoder (Seq a) Source #
Decode a Seq
>>>input (sequence natural) "[1, 2, 3]"fromList [1,2,3]
vector :: Decoder a -> Decoder (Vector a) Source #
Decode a Vector
>>>input (vector natural) "[1, 2, 3]"[1,2,3]
function :: Encoder a -> Decoder b -> Decoder (a -> b) Source #
Decode a Dhall function into a Haskell function
>>>f <- input (function inject bool) "Natural/even" :: IO (Natural -> Bool)>>>f 0True>>>f 1False
functionWith :: InputNormalizer -> Encoder a -> Decoder b -> Decoder (a -> b) Source #
Decode a Dhall function into a Haskell function using the specified normalizer
>>>f <- input (functionWith defaultInputNormalizer inject bool) "Natural/even" :: IO (Natural -> Bool)>>>f 0True>>>f 1False
setFromDistinctList :: (Ord a, Show a) => Decoder a -> Decoder (Set a) Source #
Decode a Set from a List with distinct elements
>>>input (setFromDistinctList natural) "[1, 2, 3]"fromList [1,2,3]
An error is thrown if the list contains duplicates.
>>> input (setFromDistinctList natural) "[1, 1, 3]" *** Exception: Error: Failed extraction The expression type-checked successfully but the transformation to the target type failed with the following error: One duplicate element in the list: 1
>>> input (setFromDistinctList natural) "[1, 1, 3, 3]" *** Exception: Error: Failed extraction The expression type-checked successfully but the transformation to the target type failed with the following error: 2 duplicates were found in the list, including 1
hashSetFromDistinctList :: (Hashable a, Ord a, Show a) => Decoder a -> Decoder (HashSet a) Source #
Decode a HashSet from a List with distinct elements
>>>input (hashSetFromDistinctList natural) "[1, 2, 3]"fromList [1,2,3]
An error is thrown if the list contains duplicates.
>>> input (hashSetFromDistinctList natural) "[1, 1, 3]" *** Exception: Error: Failed extraction The expression type-checked successfully but the transformation to the target type failed with the following error: One duplicate element in the list: 1
>>> input (hashSetFromDistinctList natural) "[1, 1, 3, 3]" *** Exception: Error: Failed extraction The expression type-checked successfully but the transformation to the target type failed with the following error: 2 duplicates were found in the list, including 1
map :: Ord k => Decoder k -> Decoder v -> Decoder (Map k v) Source #
Decode a Map from a toMap expression or generally a Prelude.Map.Type
>>>input (Dhall.map strictText bool) "toMap { a = True, b = False }"fromList [("a",True),("b",False)]>>>input (Dhall.map strictText bool) "[ { mapKey = \"foo\", mapValue = True } ]"fromList [("foo",True)]
If there are duplicate mapKeys, later mapValues take precedence:
>>>let expr = "[ { mapKey = 1, mapValue = True }, { mapKey = 1, mapValue = False } ]">>>input (Dhall.map natural bool) exprfromList [(1,False)]
hashMap :: (Eq k, Hashable k) => Decoder k -> Decoder v -> Decoder (HashMap k v) Source #
Decode a HashMap from a toMap expression or generally a Prelude.Map.Type
>>>input (Dhall.hashMap strictText bool) "toMap { a = True, b = False }"fromList [("a",True),("b",False)]>>>input (Dhall.hashMap strictText bool) "[ { mapKey = \"foo\", mapValue = True } ]"fromList [("foo",True)]
If there are duplicate mapKeys, later mapValues take precedence:
>>>let expr = "[ { mapKey = 1, mapValue = True }, { mapKey = 1, mapValue = False } ]">>>input (Dhall.hashMap natural bool) exprfromList [(1,False)]
pairFromMapEntry :: Decoder k -> Decoder v -> Decoder (k, v) Source #
Decode a tuple from a Prelude.Map.Entry record
>>>input (pairFromMapEntry strictText natural) "{ mapKey = \"foo\", mapValue = 3 }"("foo",3)
Decode () from an empty record.
>>>input unit "{=}" -- GHC doesn't print the result if it is ()
pair :: Decoder a -> Decoder b -> Decoder (a, b) Source #
Given a pair of Decoders, decode a tuple-record into their pairing.
>>>input (pair natural bool) "{ _1 = 42, _2 = False }"(42,False)
record :: RecordDecoder a -> Decoder a Source #
Run a RecordDecoder to build a Decoder.
union :: UnionDecoder a -> Decoder a Source #
Run a UnionDecoder to build a Decoder.
constructor :: Text -> Decoder a -> UnionDecoder a Source #
Parse a single constructor of a union
class GenericFromDhall t f where Source #
This is the underlying class that powers the FromDhall class's support
for automatically deriving a generic implementation
Methods
genericAutoWithNormalizer :: Proxy t -> InputNormalizer -> InterpretOptions -> State Int (Decoder (f a)) Source #
Instances
class GenericFromDhallUnion t f where Source #
This is the underlying class that powers the FromDhall class's support
for automatically deriving a generic implementation for a union type
Methods
genericUnionAutoWithNormalizer :: Proxy t -> InputNormalizer -> InterpretOptions -> UnionDecoder (f a) Source #
Instances
| (GenericFromDhallUnion t f1, GenericFromDhallUnion t f2) => GenericFromDhallUnion (t :: k2) (f1 :+: f2 :: k1 -> Type) Source # | |
Defined in Dhall Methods genericUnionAutoWithNormalizer :: Proxy t -> InputNormalizer -> InterpretOptions -> UnionDecoder ((f1 :+: f2) a) Source # | |
| (Constructor c1, GenericFromDhall t f1) => GenericFromDhallUnion (t :: k2) (M1 C c1 f1 :: k1 -> Type) Source # | |
Defined in Dhall Methods genericUnionAutoWithNormalizer :: Proxy t -> InputNormalizer -> InterpretOptions -> UnionDecoder (M1 C c1 f1 a) Source # | |
class ToDhall a where Source #
This class is used by FromDhall instance for functions:
instance (ToDhall a, FromDhall b) => FromDhall (a -> b)
You can convert Dhall functions with "simple" inputs (i.e. instances of this class) into Haskell functions. This works by:
- Marshaling the input to the Haskell function into a Dhall expression (i.e.
x :: Expr Src Void) - Applying the Dhall function (i.e.
f :: Expr Src Void) to the Dhall input (i.e.App f x) - Normalizing the syntax tree (i.e.
normalize (App f x)) - Marshaling the resulting Dhall expression back into a Haskell value
This class auto-generates a default implementation for types that
implement Generic. This does not auto-generate an instance for recursive
types.
The default instance can be tweaked using genericToDhallWith and custom
InterpretOptions, or using
DerivingVia
and Codec from Dhall.Deriving.
Minimal complete definition
Nothing
Methods
injectWith :: InputNormalizer -> Encoder a Source #
injectWith :: (Generic a, GenericToDhall (Rep a)) => InputNormalizer -> Encoder a Source #
Instances
| ToDhall Bool Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Bool Source # | |
| ToDhall Double Source # | |
Defined in Dhall Methods | |
| ToDhall Int Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Int Source # | |
| ToDhall Integer Source # | |
Defined in Dhall Methods | |
| ToDhall Natural Source # | |
Defined in Dhall Methods | |
| ToDhall Word Source # |
|
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Word Source # | |
| ToDhall Word8 Source # |
|
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Word8 Source # | |
| ToDhall Word16 Source # |
|
Defined in Dhall Methods | |
| ToDhall Word32 Source # |
|
Defined in Dhall Methods | |
| ToDhall Word64 Source # |
|
Defined in Dhall Methods | |
| ToDhall () Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder () Source # | |
| ToDhall Scientific Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Scientific Source # | |
| ToDhall Text Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Text Source # | |
| ToDhall String Source # | |
Defined in Dhall Methods | |
| ToDhall Text Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Text Source # | |
| ToDhall Void Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder Void Source # | |
| ToDhall a => ToDhall [a] Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder [a] Source # | |
| ToDhall a => ToDhall (Maybe a) Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Maybe a) Source # | |
| ToDhall a => ToDhall (Seq a) Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Seq a) Source # | |
| ToDhall a => ToDhall (Set a) Source # | Note that the output list will be sorted
|
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Set a) Source # | |
| ToDhall a => ToDhall (HashSet a) Source # | Note that the output list may not be sorted
|
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (HashSet a) Source # | |
| ToDhall a => ToDhall (Vector a) Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Vector a) Source # | |
| (ToDhall a, ToDhall b) => ToDhall (a, b) Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (a, b) Source # | |
| (ToDhall k, ToDhall v) => ToDhall (HashMap k v) Source # | Embed a
|
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (HashMap k v) Source # | |
| (ToDhall k, ToDhall v) => ToDhall (Map k v) Source # | Embed a
|
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Map k v) Source # | |
| (Generic a, GenericToDhall (Rep a), ModifyOptions tag) => ToDhall (Codec tag a) Source # | |
Defined in Dhall.Deriving Methods injectWith :: InputNormalizer -> Encoder (Codec tag a) Source # | |
inject :: ToDhall a => Encoder a Source #
Use the default input normalizer for injecting a value
inject = injectWith defaultInputNormalizer
genericToDhall :: (Generic a, GenericToDhall (Rep a)) => Encoder a Source #
Use the default options for injecting a value, whose structure is determined generically.
This can be used when you want to use ToDhall on types that you don't
want to define orphan instances for.
genericToDhallWith :: (Generic a, GenericToDhall (Rep a)) => InterpretOptions -> Encoder a Source #
Use custom options for injecting a value, whose structure is determined generically.
This can be used when you want to use ToDhall on types that you don't
want to define orphan instances for.
newtype RecordEncoder a Source #
The RecordEncoder divisible (contravariant) functor allows you to build
an Encoder for a Dhall record.
For example, let's take the following Haskell data type:
>>>:{data Project = Project { projectName :: Text , projectDescription :: Text , projectStars :: Natural } :}
And assume that we have the following Dhall record that we would like to
parse as a Project:
{ name =
"dhall-haskell"
, description =
"A configuration language guaranteed to terminate"
, stars =
289
}Our encoder has type Encoder Project, but we can't build that out of any
smaller encoders, as Encoders cannot be combined (they are only Contravariants).
However, we can use an RecordEncoder to build an Encoder for Project:
>>>:{injectProject :: Encoder Project injectProject = recordEncoder ( adapt >$< encodeFieldWith "name" inject >*< encodeFieldWith "description" inject >*< encodeFieldWith "stars" inject ) where adapt (Project{..}) = (projectName, (projectDescription, projectStars)) :}
Or, since we are simply using the ToDhall instance to inject each field, we could write
>>>:{injectProject :: Encoder Project injectProject = recordEncoder ( adapt >$< encodeField "name" >*< encodeField "description" >*< encodeField "stars" ) where adapt (Project{..}) = (projectName, (projectDescription, projectStars)) :}
Constructors
| RecordEncoder (Map Text (Encoder a)) |
Instances
| Contravariant RecordEncoder Source # | |
Defined in Dhall Methods contramap :: (a -> b) -> RecordEncoder b -> RecordEncoder a # (>$) :: b -> RecordEncoder b -> RecordEncoder a # | |
| Divisible RecordEncoder Source # | |
Defined in Dhall Methods divide :: (a -> (b, c)) -> RecordEncoder b -> RecordEncoder c -> RecordEncoder a # conquer :: RecordEncoder a # | |
encodeFieldWith :: Text -> Encoder a -> RecordEncoder a Source #
Specify how to encode one field of a record by supplying an explicit
Encoder for that field
encodeField :: ToDhall a => Text -> RecordEncoder a Source #
Specify how to encode one field of a record using the default ToDhall
instance for that type
recordEncoder :: RecordEncoder a -> Encoder a Source #
Convert a RecordEncoder into the equivalent Encoder
newtype UnionEncoder a Source #
UnionEncoder allows you to build an Encoder for a Dhall record.
For example, let's take the following Haskell data type:
>>>:{data Status = Queued Natural | Result Text | Errored Text :}
And assume that we have the following Dhall union that we would like to
parse as a Status:
< Result : Text | Queued : Natural | Errored : Text >.Result "Finish successfully"
Our encoder has type Encoder Status, but we can't build that out of any
smaller encoders, as Encoders cannot be combined.
However, we can use an UnionEncoder to build an Encoder for Status:
>>>:{injectStatus :: Encoder Status injectStatus = adapt >$< unionEncoder ( encodeConstructorWith "Queued" inject >|< encodeConstructorWith "Result" inject >|< encodeConstructorWith "Errored" inject ) where adapt (Queued n) = Left n adapt (Result t) = Right (Left t) adapt (Errored e) = Right (Right e) :}
Or, since we are simply using the ToDhall instance to inject each branch, we could write
>>>:{injectStatus :: Encoder Status injectStatus = adapt >$< unionEncoder ( encodeConstructor "Queued" >|< encodeConstructor "Result" >|< encodeConstructor "Errored" ) where adapt (Queued n) = Left n adapt (Result t) = Right (Left t) adapt (Errored e) = Right (Right e) :}
Instances
| Contravariant UnionEncoder Source # | |
Defined in Dhall Methods contramap :: (a -> b) -> UnionEncoder b -> UnionEncoder a # (>$) :: b -> UnionEncoder b -> UnionEncoder a # | |
encodeConstructorWith :: Text -> Encoder a -> UnionEncoder a Source #
Specify how to encode an alternative by providing an explicit Encoder
for that alternative
encodeConstructor :: ToDhall a => Text -> UnionEncoder a Source #
Specify how to encode an alternative by using the default ToDhall instance
for that type
unionEncoder :: UnionEncoder a -> Encoder a Source #
Convert a UnionEncoder into the equivalent Encoder
(>|<) :: UnionEncoder a -> UnionEncoder b -> UnionEncoder (Either a b) infixr 5 Source #
Combines two UnionEncoder values. See UnionEncoder for usage
notes.
Ideally, this matches chosen;
however, this allows UnionEncoder to not need a Divisible instance
itself (since no instance is possible).
class GenericToDhall f where Source #
This is the underlying class that powers the FromDhall class's support
for automatically deriving a generic implementation
Methods
genericToDhallWithNormalizer :: InputNormalizer -> InterpretOptions -> State Int (Encoder (f a)) Source #
Instances
Miscellaneous
newtype DhallErrors e Source #
A newtype suitable for collecting one or more errors
Constructors
| DhallErrors | |
Instances
showDhallErrors :: Show e => String -> DhallErrors e -> String Source #
Render a given prefix and some errors to a string.
Arguments
| :: Alternative f | |
| => Decoder a | The decoder for the Dhall value |
| -> Expr s Void | a closed form Dhall program, which evaluates to the expected type |
| -> f a | The decoded value in Haskell |
Use this function to extract Haskell values directly from Dhall AST.
The intended use case is to allow easy extraction of Dhall values for
making the function normalizeWith easier to use.
For other use cases, use input from Dhall module. It will give you
a much better user experience.
(>$<) :: Contravariant f => (a -> b) -> f b -> f a infixl 4 #
This is an infix alias for contramap.
Re-exports
Type representing arbitrary-precision non-negative integers.
>>>2^100 :: Natural1267650600228229401496703205376
Operations whose result would be negative ,throw (Underflow :: ArithException)
>>>-1 :: Natural*** Exception: arithmetic underflow
Since: base-4.8.0.0
Instances
| Enum Natural | Since: base-4.8.0.0 |
| Eq Natural | Since: base-4.8.0.0 |
| Integral Natural | Since: base-4.8.0.0 |
Defined in GHC.Real | |
| Data Natural | Since: base-4.8.0.0 |
Defined in Data.Data Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Natural -> c Natural # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Natural # toConstr :: Natural -> Constr # dataTypeOf :: Natural -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Natural) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Natural) # gmapT :: (forall b. Data b => b -> b) -> Natural -> Natural # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Natural -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Natural -> r # gmapQ :: (forall d. Data d => d -> u) -> Natural -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Natural -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Natural -> m Natural # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Natural -> m Natural # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Natural -> m Natural # | |
| Num Natural | Note that Since: base-4.8.0.0 |
| Ord Natural | Since: base-4.8.0.0 |
| Read Natural | Since: base-4.8.0.0 |
| Real Natural | Since: base-4.8.0.0 |
Defined in GHC.Real Methods toRational :: Natural -> Rational # | |
| Show Natural | Since: base-4.8.0.0 |
| Ix Natural | Since: base-4.8.0.0 |
Defined in GHC.Arr | |
| Lift Natural | |
| Hashable Natural | |
Defined in Data.Hashable.Class | |
| ToJSON Natural | |
Defined in Data.Aeson.Types.ToJSON | |
| ToJSONKey Natural | |
Defined in Data.Aeson.Types.ToJSON | |
| FromJSON Natural | |
| FromJSONKey Natural | |
Defined in Data.Aeson.Types.FromJSON Methods | |
| PrintfArg Natural | Since: base-4.8.0.0 |
Defined in Text.Printf | |
| Bits Natural | Since: base-4.8.0 |
Defined in Data.Bits Methods (.&.) :: Natural -> Natural -> Natural # (.|.) :: Natural -> Natural -> Natural # xor :: Natural -> Natural -> Natural # complement :: Natural -> Natural # shift :: Natural -> Int -> Natural # rotate :: Natural -> Int -> Natural # setBit :: Natural -> Int -> Natural # clearBit :: Natural -> Int -> Natural # complementBit :: Natural -> Int -> Natural # testBit :: Natural -> Int -> Bool # bitSizeMaybe :: Natural -> Maybe Int # shiftL :: Natural -> Int -> Natural # unsafeShiftL :: Natural -> Int -> Natural # shiftR :: Natural -> Int -> Natural # unsafeShiftR :: Natural -> Int -> Natural # rotateL :: Natural -> Int -> Natural # | |
| Subtractive Natural | |
Defined in Basement.Numerical.Subtractive Associated Types type Difference Natural :: Type # | |
| NFData Natural | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq | |
| Pretty Natural | |
Defined in Prettyprinter.Internal | |
| UniformRange Natural | |
Defined in System.Random.Internal | |
| Serialise Natural | Since: serialise-0.2.0.0 |
| ToDhall Natural Source # | |
Defined in Dhall Methods | |
| FromDhall Natural Source # | |
| type Difference Natural | |
Defined in Basement.Numerical.Subtractive | |
General-purpose finite sequences.
Instances
| Monad Seq | |
| Functor Seq | |
| MonadFix Seq | Since: containers-0.5.11 |
Defined in Data.Sequence.Internal | |
| Applicative Seq | Since: containers-0.5.4 |
| Foldable Seq | |
Defined in Data.Sequence.Internal Methods fold :: Monoid m => Seq m -> m # foldMap :: Monoid m => (a -> m) -> Seq a -> m # foldr :: (a -> b -> b) -> b -> Seq a -> b # foldr' :: (a -> b -> b) -> b -> Seq a -> b # foldl :: (b -> a -> b) -> b -> Seq a -> b # foldl' :: (b -> a -> b) -> b -> Seq a -> b # foldr1 :: (a -> a -> a) -> Seq a -> a # foldl1 :: (a -> a -> a) -> Seq a -> a # elem :: Eq a => a -> Seq a -> Bool # maximum :: Ord a => Seq a -> a # | |
| Traversable Seq | |
| ToJSON1 Seq | |
Defined in Data.Aeson.Types.ToJSON Methods liftToJSON :: (a -> Value) -> ([a] -> Value) -> Seq a -> Value # liftToJSONList :: (a -> Value) -> ([a] -> Value) -> [Seq a] -> Value # liftToEncoding :: (a -> Encoding) -> ([a] -> Encoding) -> Seq a -> Encoding # liftToEncodingList :: (a -> Encoding) -> ([a] -> Encoding) -> [Seq a] -> Encoding # | |
| FromJSON1 Seq | |
| Alternative Seq | Since: containers-0.5.4 |
| MonadPlus Seq | |
| Eq1 Seq | Since: containers-0.5.9 |
| Ord1 Seq | Since: containers-0.5.9 |
Defined in Data.Sequence.Internal | |
| Read1 Seq | Since: containers-0.5.9 |
Defined in Data.Sequence.Internal | |
| Show1 Seq | Since: containers-0.5.9 |
| MonadZip Seq |
|
| UnzipWith Seq | |
Defined in Data.Sequence.Internal Methods unzipWith' :: (x -> (a, b)) -> Seq x -> (Seq a, Seq b) | |
| IsList (Seq a) | |
| Eq a => Eq (Seq a) | |
| Data a => Data (Seq a) | |
Defined in Data.Sequence.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Seq a -> c (Seq a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Seq a) # dataTypeOf :: Seq a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Seq a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Seq a)) # gmapT :: (forall b. Data b => b -> b) -> Seq a -> Seq a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Seq a -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Seq a -> r # gmapQ :: (forall d. Data d => d -> u) -> Seq a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Seq a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Seq a -> m (Seq a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Seq a -> m (Seq a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Seq a -> m (Seq a) # | |
| Ord a => Ord (Seq a) | |
| Read a => Read (Seq a) | |
| Show a => Show (Seq a) | |
| a ~ Char => IsString (Seq a) | Since: containers-0.5.7 |
Defined in Data.Sequence.Internal Methods fromString :: String -> Seq a # | |
| Semigroup (Seq a) | Since: containers-0.5.7 |
| Monoid (Seq a) | |
| ToJSON a => ToJSON (Seq a) | |
Defined in Data.Aeson.Types.ToJSON | |
| FromJSON a => FromJSON (Seq a) | |
| NFData a => NFData (Seq a) | |
Defined in Data.Sequence.Internal | |
| Ord a => Stream (Seq a) | Since: megaparsec-9.0.0 |
Defined in Text.Megaparsec.Stream Methods tokenToChunk :: Proxy (Seq a) -> Token (Seq a) -> Tokens (Seq a) # tokensToChunk :: Proxy (Seq a) -> [Token (Seq a)] -> Tokens (Seq a) # chunkToTokens :: Proxy (Seq a) -> Tokens (Seq a) -> [Token (Seq a)] # chunkLength :: Proxy (Seq a) -> Tokens (Seq a) -> Int # chunkEmpty :: Proxy (Seq a) -> Tokens (Seq a) -> Bool # take1_ :: Seq a -> Maybe (Token (Seq a), Seq a) # takeN_ :: Int -> Seq a -> Maybe (Tokens (Seq a), Seq a) # takeWhile_ :: (Token (Seq a) -> Bool) -> Seq a -> (Tokens (Seq a), Seq a) # | |
| Serialise a => Serialise (Seq a) | Since: serialise-0.2.0.0 |
| ToDhall a => ToDhall (Seq a) Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Seq a) Source # | |
| FromDhall a => FromDhall (Seq a) Source # | |
| type Item (Seq a) | |
Defined in Data.Sequence.Internal | |
| type Tokens (Seq a) | |
Defined in Text.Megaparsec.Stream | |
| type Token (Seq a) | |
Defined in Text.Megaparsec.Stream | |
A space efficient, packed, unboxed Unicode text type.
Instances
Boxed vectors, supporting efficient slicing.
Instances
| Monad Vector | |
| Functor Vector | |
| MonadFail Vector | Since: vector-0.12.1.0 |
Defined in Data.Vector | |
| Applicative Vector | |
| Foldable Vector | |
Defined in Data.Vector Methods fold :: Monoid m => Vector m -> m # foldMap :: Monoid m => (a -> m) -> Vector a -> m # foldr :: (a -> b -> b) -> b -> Vector a -> b # foldr' :: (a -> b -> b) -> b -> Vector a -> b # foldl :: (b -> a -> b) -> b -> Vector a -> b # foldl' :: (b -> a -> b) -> b -> Vector a -> b # foldr1 :: (a -> a -> a) -> Vector a -> a # foldl1 :: (a -> a -> a) -> Vector a -> a # elem :: Eq a => a -> Vector a -> Bool # maximum :: Ord a => Vector a -> a # minimum :: Ord a => Vector a -> a # | |
| Traversable Vector | |
| ToJSON1 Vector | |
Defined in Data.Aeson.Types.ToJSON Methods liftToJSON :: (a -> Value) -> ([a] -> Value) -> Vector a -> Value # liftToJSONList :: (a -> Value) -> ([a] -> Value) -> [Vector a] -> Value # liftToEncoding :: (a -> Encoding) -> ([a] -> Encoding) -> Vector a -> Encoding # liftToEncodingList :: (a -> Encoding) -> ([a] -> Encoding) -> [Vector a] -> Encoding # | |
| FromJSON1 Vector | |
| Alternative Vector | |
| MonadPlus Vector | |
| Eq1 Vector | |
| Ord1 Vector | |
Defined in Data.Vector | |
| Read1 Vector | |
Defined in Data.Vector | |
| Show1 Vector | |
| MonadZip Vector | |
| NFData1 Vector | Since: vector-0.12.1.0 |
Defined in Data.Vector | |
| Vector Vector a | |
Defined in Data.Vector Methods basicUnsafeFreeze :: PrimMonad m => Mutable Vector (PrimState m) a -> m (Vector a) # basicUnsafeThaw :: PrimMonad m => Vector a -> m (Mutable Vector (PrimState m) a) # basicLength :: Vector a -> Int # basicUnsafeSlice :: Int -> Int -> Vector a -> Vector a # basicUnsafeIndexM :: Monad m => Vector a -> Int -> m a # basicUnsafeCopy :: PrimMonad m => Mutable Vector (PrimState m) a -> Vector a -> m () # | |
| IsList (Vector a) | |
| Eq a => Eq (Vector a) | |
| Data a => Data (Vector a) | |
Defined in Data.Vector Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Vector a -> c (Vector a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Vector a) # toConstr :: Vector a -> Constr # dataTypeOf :: Vector a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Vector a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Vector a)) # gmapT :: (forall b. Data b => b -> b) -> Vector a -> Vector a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Vector a -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Vector a -> r # gmapQ :: (forall d. Data d => d -> u) -> Vector a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Vector a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Vector a -> m (Vector a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Vector a -> m (Vector a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Vector a -> m (Vector a) # | |
| Ord a => Ord (Vector a) | |
Defined in Data.Vector | |
| Read a => Read (Vector a) | |
| Show a => Show (Vector a) | |
| Semigroup (Vector a) | |
| Monoid (Vector a) | |
| ToJSON a => ToJSON (Vector a) | |
Defined in Data.Aeson.Types.ToJSON | |
| FromJSON a => FromJSON (Vector a) | |
| NFData a => NFData (Vector a) | |
Defined in Data.Vector | |
| Serialise a => Serialise (Vector a) | Since: serialise-0.2.0.0 |
| ToDhall a => ToDhall (Vector a) Source # | |
Defined in Dhall Methods injectWith :: InputNormalizer -> Encoder (Vector a) Source # | |
| FromDhall a => FromDhall (Vector a) Source # | |
| type Mutable Vector | |
Defined in Data.Vector | |
| type Item (Vector a) | |
Defined in Data.Vector | |
Representable types of kind *.
This class is derivable in GHC with the DeriveGeneric flag on.
A Generic instance must satisfy the following laws:
from.to≡idto.from≡id