convert-1.4.2: Safe and unsafe data conversion utilities with strong type-level operation. checking.

Safe HaskellNone
LanguageHaskell2010

Data.Convert.Class

Synopsis

Documentation

class Convertible t t' where Source #

Convertible allows for conversion between two compatible types. When trying to convert between the same types, compile time error is reported in order to help tracking not needed usages. If you want to enable conversion between the same types, use convert' instead.

Minimal complete definition

convert

Methods

convert :: t -> t' Source #

Instances

TypeError Constraint (IdConversionErr * t) => Convertible t t Source # 

Methods

convert :: t -> t Source #

Convertible1 * t t' => Convertible (t a) (t' a) Source # 

Methods

convert :: t a -> t' a Source #

(Convertible1 * t t', Convertible' a a', Functor t') => Convertible (t a) (t' a') Source # 

Methods

convert :: t a -> t' a' Source #

(Convertible a a', Functor t) => Convertible (t a) (t a') Source #

We cannot use OVERLAPPABLE instances here. Let's consider following instance: instance (s ~ s', t ~ t') => Convertible (Symbol s t) (Symbol2 s' t') where ... By writing it we indicate that during conversion from Symbol to Symbol2 the appropriate variables should be matched. If the following instances would be declared as OVERLAPPABLE, it will clash with the instance `Convertible (t a) (t' a)`. In other words, if user defines any conversion between type `X a` and `Y b`, we disable automatic lifting to ConvertibleN. TODO[WD]: File GHC proposal to choose more specific incoherent instance

Methods

convert :: t a -> t a' Source #

class Convertible1 t t' where Source #

Minimal complete definition

convert1

Methods

convert1 :: forall s1. t s1 -> t' s1 Source #

Instances

TypeError Constraint (IdConversionErr (k -> *) t) => Convertible1 k t t Source # 

Methods

convert1 :: t s1 -> t' s1 Source #

Convertible2 k1 k2 t t' => Convertible1 k2 (t a) (t' a) Source # 

Methods

convert1 :: t' a s1 -> t' s1 Source #

class Convertible2 t t' where Source #

Minimal complete definition

convert2

Methods

convert2 :: forall s1 s2. t s1 s2 -> t' s1 s2 Source #

Instances

TypeError Constraint (IdConversionErr (k1 -> k2 -> *) t) => Convertible2 k1 k2 t t Source # 

Methods

convert2 :: t s1 s2 -> t' s1 s2 Source #

Convertible3 k1 k2 k3 t t' => Convertible2 k2 k3 (t a) (t' a) Source # 

Methods

convert2 :: t s1 s2 -> t' s1 s2 Source #

class Convertible3 t t' where Source #

Minimal complete definition

convert3

Methods

convert3 :: forall s1 s2 s3. t s1 s2 s3 -> t' s1 s2 s3 Source #

Instances

TypeError Constraint (IdConversionErr (k1 -> k2 -> k3 -> *) t) => Convertible3 k1 k2 k3 t t Source # 

Methods

convert3 :: t s1 s2 s3 -> t' s1 s2 s3 Source #

Convertible4 k1 k2 k3 k4 t t' => Convertible3 k2 k3 k4 (t a) (t' a) Source # 

Methods

convert3 :: t s1 s2 s3 -> t' s1 s2 s3 Source #

class Convertible4 t t' where Source #

Minimal complete definition

convert4

Methods

convert4 :: forall s1 s2 s3 s4. t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

Instances

TypeError Constraint (IdConversionErr (k1 -> k2 -> k3 -> k4 -> *) t) => Convertible4 k1 k2 k3 k4 t t Source # 

Methods

convert4 :: t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

Convertible5 k1 k2 k3 k4 k5 t t' => Convertible4 k2 k3 k4 k5 (t a) (t' a) Source # 

Methods

convert4 :: t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

class Convertible5 t t' where Source #

Minimal complete definition

convert5

Methods

convert5 :: forall s1 s2 s3 s4 s5. t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

Instances

TypeError Constraint (IdConversionErr (k1 -> k2 -> k3 -> k4 -> k5 -> *) t) => Convertible5 k1 k2 k3 k4 k5 t t Source # 

Methods

convert5 :: t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

type IdConversionErr (t :: k) = (Text "Conversion of the same type (`" :<>: ShowType t) :<>: Text "`) is disabled by default. Please use convert' if you want to enable it." Source #

convertTo :: forall t' t. Convertible t t' => t -> t' Source #

convertTo1 :: forall t' t. Convertible1 t t' => forall s1. t s1 -> t' s1 Source #

convertTo2 :: forall t' t. Convertible2 t t' => forall s1 s2. t s1 s2 -> t' s1 s2 Source #

convertTo3 :: forall t' t. Convertible3 t t' => forall s1 s2 s3. t s1 s2 s3 -> t' s1 s2 s3 Source #

convertTo4 :: forall t' t. Convertible4 t t' => forall s1 s2 s3 s4. t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

convertTo5 :: forall t' t. Convertible5 t t' => forall s1 s2 s3 s4 s5. t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

class Convertible' t t' where Source #

Minimal complete definition

convert'

Methods

convert' :: t -> t' Source #

Instances

Convertible t t' => Convertible' t t' Source # 

Methods

convert' :: t -> t' Source #

Convertible' t t Source # 

Methods

convert' :: t -> t Source #

class Convertible1' t t' where Source #

Minimal complete definition

convert1'

Methods

convert1' :: forall s1. t s1 -> t' s1 Source #

Instances

Convertible1 k t t' => Convertible1' k t t' Source # 

Methods

convert1' :: t' s1 -> t' s1 Source #

Convertible1' k t t Source # 

Methods

convert1' :: t s1 -> t' s1 Source #

class Convertible2' t t' where Source #

Minimal complete definition

convert2'

Methods

convert2' :: forall s1 s2. t s1 s2 -> t' s1 s2 Source #

Instances

Convertible2 k1 k2 t t' => Convertible2' k1 k2 t t' Source # 

Methods

convert2' :: t s1 s2 -> t' s1 s2 Source #

Convertible2' k1 k2 t t Source # 

Methods

convert2' :: t s1 s2 -> t' s1 s2 Source #

class Convertible3' t t' where Source #

Minimal complete definition

convert3'

Methods

convert3' :: forall s1 s2 s3. t s1 s2 s3 -> t' s1 s2 s3 Source #

Instances

Convertible3 k1 k2 k3 t t' => Convertible3' k1 k2 k3 t t' Source # 

Methods

convert3' :: t s1 s2 s3 -> t' s1 s2 s3 Source #

Convertible3' k1 k2 k3 t t Source # 

Methods

convert3' :: t s1 s2 s3 -> t' s1 s2 s3 Source #

class Convertible4' t t' where Source #

Minimal complete definition

convert4'

Methods

convert4' :: forall s1 s2 s3 s4. t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

Instances

Convertible4 k1 k2 k3 k4 t t' => Convertible4' k1 k2 k3 k4 t t' Source # 

Methods

convert4' :: t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

Convertible4' k1 k2 k3 k4 t t Source # 

Methods

convert4' :: t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

class Convertible5' t t' where Source #

Minimal complete definition

convert5'

Methods

convert5' :: forall s1 s2 s3 s4 s5. t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

Instances

Convertible5 k1 k2 k3 k4 k5 t t' => Convertible5' k1 k2 k3 k4 k5 t t' Source # 

Methods

convert5' :: t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

Convertible5' k1 k2 k3 k4 k5 t t Source # 

Methods

convert5' :: t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

convertTo' :: forall t' t. Convertible' t t' => t -> t' Source #

convertTo1' :: forall t' t. Convertible1' t t' => forall s1. t s1 -> t' s1 Source #

convertTo2' :: forall t' t. Convertible2' t t' => forall s1 s2. t s1 s2 -> t' s1 s2 Source #

convertTo3' :: forall t' t. Convertible3' t t' => forall s1 s2 s3. t s1 s2 s3 -> t' s1 s2 s3 Source #

convertTo4' :: forall t' t. Convertible4' t t' => forall s1 s2 s3 s4. t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

convertTo5' :: forall t' t. Convertible5' t t' => forall s1 s2 s3 s4 s5. t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

class PartialConvertible t t' where Source #

PartialConvertible allows conversions that could fail with ConversionError.

Minimal complete definition

convertAssert, unsafeConvert

Associated Types

type ConversionError t t' Source #

defConvertAssert :: Default e => (a -> Bool) -> a -> Maybe e Source #

unsafeConvertTo :: forall t' t. PartialConvertible t t' => t -> t' Source #

convertAssertTo :: forall t' t. PartialConvertible t t' => t -> Maybe (ConversionError t t') Source #

maybeConvert :: forall t t'. PartialConvertible t t' => t -> Maybe t' Source #

tryConvert :: forall t t'. PartialConvertible t t' => t -> Either (ConversionError t t') t' Source #

type BiConvertible t t' = (Convertible t t', Convertible t' t) Source #

converted1 :: BiConvertible1 t t' => forall s1. Iso' (t s1) (t' s1) Source #

converted2 :: BiConvertible2 t t' => forall s1 s2. Iso' (t s1 s2) (t' s1 s2) Source #

converted3 :: BiConvertible3 t t' => forall s1 s2 s3. Iso' (t s1 s2 s3) (t' s1 s2 s3) Source #

converted4 :: BiConvertible4 t t' => forall s1 s2 s3 s4. Iso' (t s1 s2 s3 s4) (t' s1 s2 s3 s4) Source #

converted5 :: BiConvertible5 t t' => forall s1 s2 s3 s4 s5. Iso' (t s1 s2 s3 s4 s5) (t' s1 s2 s3 s4 s5) Source #

converted1' :: BiConvertible1' t t' => forall s1. Iso' (t s1) (t' s1) Source #

converted2' :: BiConvertible2' t t' => forall s1 s2. Iso' (t s1 s2) (t' s1 s2) Source #

converted3' :: BiConvertible3' t t' => forall s1 s2 s3. Iso' (t s1 s2 s3) (t' s1 s2 s3) Source #

converted4' :: BiConvertible4' t t' => forall s1 s2 s3 s4. Iso' (t s1 s2 s3 s4) (t' s1 s2 s3 s4) Source #

converted5' :: BiConvertible5' t t' => forall s1 s2 s3 s4 s5. Iso' (t s1 s2 s3 s4 s5) (t' s1 s2 s3 s4 s5) Source #

convertedTo1 :: BiConvertible1 t' t => forall s1. Iso' (t s1) (t' s1) Source #

convertedTo2 :: BiConvertible2 t' t => forall s1 s2. Iso' (t s1 s2) (t' s1 s2) Source #

convertedTo3 :: BiConvertible3 t' t => forall s1 s2 s3. Iso' (t s1 s2 s3) (t' s1 s2 s3) Source #

convertedTo4 :: BiConvertible4 t' t => forall s1 s2 s3 s4. Iso' (t s1 s2 s3 s4) (t' s1 s2 s3 s4) Source #

convertedTo5 :: BiConvertible5 t' t => forall s1 s2 s3 s4 s5. Iso' (t s1 s2 s3 s4 s5) (t' s1 s2 s3 s4 s5) Source #

convertedTo1' :: BiConvertible1' t' t => forall s1. Iso' (t s1) (t' s1) Source #

convertedTo2' :: BiConvertible2' t' t => forall s1 s2. Iso' (t s1 s2) (t' s1 s2) Source #

convertedTo3' :: BiConvertible3' t' t => forall s1 s2 s3. Iso' (t s1 s2 s3) (t' s1 s2 s3) Source #

convertedTo4' :: BiConvertible4' t' t => forall s1 s2 s3 s4. Iso' (t s1 s2 s3 s4) (t' s1 s2 s3 s4) Source #

convertedTo5' :: BiConvertible5' t' t => forall s1 s2 s3 s4 s5. Iso' (t s1 s2 s3 s4 s5) (t' s1 s2 s3 s4 s5) Source #

type ConvertibleVia t p t' = (Convertible t p, Convertible p t') Source #

convertVia :: forall p t t'. ConvertibleVia t p t' => t -> t' Source #

convertVia1 :: forall p t t'. ConvertibleVia1 t p t' => forall s1. t s1 -> t' s1 Source #

convertVia2 :: forall p t t'. ConvertibleVia2 t p t' => forall s1 s2. t s1 s2 -> t' s1 s2 Source #

convertVia3 :: forall p t t'. ConvertibleVia3 t p t' => forall s1 s2 s3. t s1 s2 s3 -> t' s1 s2 s3 Source #

convertVia4 :: forall p t t'. ConvertibleVia4 t p t' => forall s1 s2 s3 s4. t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

convertVia5 :: forall p t t'. ConvertibleVia5 t p t' => forall s1 s2 s3 s4 s5. t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

convertVia' :: forall p t t'. ConvertibleVia' t p t' => t -> t' Source #

convertVia1' :: forall p t t'. ConvertibleVia1' t p t' => forall s1. t s1 -> t' s1 Source #

convertVia2' :: forall p t t'. ConvertibleVia2' t p t' => forall s1 s2. t s1 s2 -> t' s1 s2 Source #

convertVia3' :: forall p t t'. ConvertibleVia3' t p t' => forall s1 s2 s3. t s1 s2 s3 -> t' s1 s2 s3 Source #

convertVia4' :: forall p t t'. ConvertibleVia4' t p t' => forall s1 s2 s3 s4. t s1 s2 s3 s4 -> t' s1 s2 s3 s4 Source #

convertVia5' :: forall p t t'. ConvertibleVia5' t p t' => forall s1 s2 s3 s4 s5. t s1 s2 s3 s4 s5 -> t' s1 s2 s3 s4 s5 Source #

unsafeConvertVia :: forall p t t'. PartialConvertibleVia t p t' => t -> t' Source #