Portability | portable |
---|---|
Stability | provisional |
Maintainer | John Goerzen <jgoerzen@complete.org> |
Safe Haskell | Safe-Infered |
- 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
:: (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 -> TypeRepSource
Useful for defining Typeable
instances. Example:
instance Typeable TimeOfDay where typeOf _ = mkTypeName "TimeOfDay"
:: (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.