interpolator-1.0.0: Runtime interpolation of environment variables in records using profunctors

Safe HaskellNone
LanguageHaskell2010

Data.Interpolation

Synopsis

Documentation

data Template a Source #

Type for a value that is described by '_env:ENVIRONMENT_VARIABLE:default' in JSON.

data Uninterpolated a Source #

Type for a value that can be described either with '_env...' or as just a literal value in JSON.

Constructors

Templated (Template a) 
Literal a 

Instances

Arbitrary1 Uninterpolated Source # 

Methods

liftArbitrary :: Gen a -> Gen (Uninterpolated a) #

liftShrink :: (a -> [a]) -> Uninterpolated a -> [Uninterpolated a] #

FromTemplateValue a => Default Interpolator (Uninterpolated a) a Source #

When we can parse template values, we can interpolate from the template.

Eq a => Eq (Uninterpolated a) Source # 
Ord a => Ord (Uninterpolated a) Source # 
Show a => Show (Uninterpolated a) Source # 
Arbitrary a => Arbitrary (Uninterpolated a) Source # 
Arbitrary (Uninterpolated Text) Source # 
(ToTemplateValue a, ToJSON a) => ToJSON (Uninterpolated a) Source # 
(FromTemplateValue a, FromJSON a) => FromJSON (Uninterpolated a) Source # 

class FromTemplateValue a where Source #

A class for parsing environment variable values, which should only be defined on primitives. Similar to Read except that for text-type values it should parse using identity.

Minimal complete definition

parseTemplateValue

class ToTemplateValue a where Source #

A class for showing environment variable values, which should only be defined on primitives. Similar to Show except that for text-type values it should use identity.

Minimal complete definition

toTemplateValue

newtype Interpolator templates identities Source #

Constructors

Interpolator 

Instances

Profunctor Interpolator Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Interpolator b c -> Interpolator a d #

lmap :: (a -> b) -> Interpolator b c -> Interpolator a c #

rmap :: (b -> c) -> Interpolator a b -> Interpolator a c #

(#.) :: Coercible * c b => (b -> c) -> Interpolator a b -> Interpolator a c #

(.#) :: Coercible * b a => Interpolator b c -> (a -> b) -> Interpolator a c #

ProductProfunctor Interpolator Source # 

Methods

purePP :: b -> Interpolator a b #

(****) :: Interpolator a (b -> c) -> Interpolator a b -> Interpolator a c #

empty :: Interpolator () () #

(***!) :: Interpolator a b -> Interpolator a' b' -> Interpolator (a, a') (b, b') #

SumProfunctor Interpolator Source # 

Methods

(+++!) :: Interpolator a b -> Interpolator a' b' -> Interpolator (Either a a') (Either b b') #

Default Interpolator a a Source #

Pure transformation for the identity interpolation. FIXME this is too clunky for overlapping instances, define an auxiliary class (or type) for IdentityInterpolation.

Methods

def :: Interpolator a a #

FromTemplateValue a => Default Interpolator (Uninterpolated a) a Source #

When we can parse template values, we can interpolate from the template.

Default Interpolator a b => Default Interpolator [a] [b] Source # 

Methods

def :: Interpolator [a] [b] #

Default Interpolator a b => Default Interpolator (Maybe a) (Maybe b) Source # 

Methods

def :: Interpolator (Maybe a) (Maybe b) #

(Default Interpolator a b, Ord a, Ord b) => Default Interpolator (Set a) (Set b) Source # 

Methods

def :: Interpolator (Set a) (Set b) #

Default Interpolator a b => Default Interpolator (Map k a) (Map k b) Source # 

Methods

def :: Interpolator (Map k a) (Map k b) #

Functor (Interpolator templates) Source # 

Methods

fmap :: (a -> b) -> Interpolator templates a -> Interpolator templates b #

(<$) :: a -> Interpolator templates b -> Interpolator templates a #

Applicative (Interpolator templates) Source # 

Methods

pure :: a -> Interpolator templates a #

(<*>) :: Interpolator templates (a -> b) -> Interpolator templates a -> Interpolator templates b #

liftA2 :: (a -> b -> c) -> Interpolator templates a -> Interpolator templates b -> Interpolator templates c #

(*>) :: Interpolator templates a -> Interpolator templates b -> Interpolator templates b #

(<*) :: Interpolator templates a -> Interpolator templates b -> Interpolator templates a #

runTemplate :: FromTemplateValue a => Interpolator (Uninterpolated a) a Source #

Run a template using the interpolation context and failing if the value is not found or not readable.

interpolateWithContext :: (Default Interpolator templates identities, MonadIO m) => templates -> m (Either [InterpolationFailure] identities) Source #

interpolateWithContextExplicit :: MonadIO m => Interpolator templates identities -> templates -> m (Either [InterpolationFailure] identities) Source #