Copyright | Copyright (C) 2009-2011 John Goerzen |
---|---|
License | BSD3 |
Maintainer | John Goerzen <jgoerzen@complete.org> |
Stability | provisional |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Synopsis
- boundedConversion :: (Bounded b, Show a, Show b, Convertible a Integer, Convertible b Integer, Typeable a, Typeable b) => (a -> ConvertResult b) -> a -> ConvertResult b
- convertVia :: (Convertible a b, Convertible b c) => b -> a -> ConvertResult c
Documentation
:: (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.
:: (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.