Data.Convertible.Utils

| convertible-1.0.9: Typeclasses and instances for converting between types | Contents | Index
Data.Convertible.Utils |
Portability | portable
Stability | provisional
Maintainer | John Goerzen <jgoerzen@complete.org>
Description
Synopsis
boundedConversion :: (Ord a, Bounded b, Show a, Show b, Convertible a Integer, Convertible b Integer, Typeable a, Typeable b) => (a -> ConvertResult b) -> a -> ConvertResult b
mkTypeName :: String -> TypeRep
convertVia :: (Convertible a b, Convertible b c) => b -> a -> ConvertResult c
Documentation
boundedConversion
:: (Ord a, Bounded b, Show a, Show b, Convertible a Integer, Convertible b Integer, Typeable a, Typeable b) |
=> (a -> ConvertResult b) | Function to do the conversion
-> a | Input data
-> ConvertResult b | Result
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.
mkTypeName :: String -> TypeRep
Useful for defining `Typeable` instances. Example:
    instance Typeable TimeOfDay where
        typeOf _ = mkTypeName "TimeOfDay"
convertVia
:: (Convertible a b, Convertible b c) |
=> b | Dummy data to establish intermediate type - can be undefined
-> a | Input value
-> ConvertResult c | Result
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.
Produced by Haddock version 2.7.2