convertible-1.1.1.1: Typeclasses and instances for converting between types
CopyrightCopyright (C) 2009-2011 John Goerzen
LicenseBSD3
MaintainerJohn Goerzen <jgoerzen@complete.org>
Stabilityprovisional
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Convertible.Utils

Description

 
Synopsis

Documentation

boundedConversion Source #

Arguments

:: (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.

convertVia Source #

Arguments

:: (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.