convertible-text-0.0.0: Typeclasses and instances for converting between typesSource codeContentsIndex
Data.Convertible.Utils
Portabilityportable
Stabilityprovisional
MaintainerMichael Snoyman <michael@snoyman.com>
Description
Synopsis
boundedConversion :: (Ord a, Bounded b, Show a, Show b, ConvertAttempt a Integer, ConvertAttempt b Integer, Typeable a, Typeable b) => (a -> Attempt b) -> a -> Attempt b
data ConvertBoundsException v a = ConvertBoundsException v v a
mkTypeName :: String -> TypeRep
convertAttemptVia :: (ConvertAttempt a b, ConvertAttempt b c) => b -> a -> Attempt c
convertSuccessVia :: (ConvertSuccess a b, ConvertSuccess b c) => b -> a -> c
Documentation
boundedConversionSource
:: (Ord a, Bounded b, Show a, Show b, ConvertAttempt a Integer, ConvertAttempt b Integer, Typeable a, Typeable b)
=> a -> Attempt bFunction to do the conversion
-> aInput data
-> Attempt bResult

Utility function to perform bounds checking as part of a conversion.

Does this be examining the bounds of the destination type, converting to the type of the source via safeConvert, comparing to the source value. Results in an error if the conversion is out of bounds.

data ConvertBoundsException v a Source
Constructors
ConvertBoundsException v v a
show/hide Instances
mkTypeName :: String -> TypeRepSource

Useful for defining Typeable instances. Example:

instance Typeable TimeOfDay where
    typeOf _ = mkTypeName "TimeOfDay"
convertAttemptViaSource
:: (ConvertAttempt a b, ConvertAttempt b c)
=> bDummy data to establish intermediate type - can be undefined
-> aInput value
-> Attempt cResult

Useful for defining conversions that are implemented in terms of other conversions via an intermediary type. Instead of:

instance Convertible CalendarTime POSIXTime where
    safeConvert a = do r <- safeConvert a
                       safeConvert (r :: ClockTime)

we can now write:

instance Convertible CalendarTime POSIXTime where
    safeConvert = convertVia (undefined::ClockTime)

which does the same thing -- converts a CalendarTime to a ClockTime, then a ClockTime to a POSIXTime, both using existing Convertible instances.

convertSuccessViaSource
:: (ConvertSuccess a b, ConvertSuccess b c)
=> bDummy data to establish intermediate type - can be undefined
-> aInput value
-> cResult
Same as convertAttemptVia for ConvertSuccess
Produced by Haddock version 2.4.2