| PackageDescription | 'proxied' is a simple library that exports a function to convert constant
functions to ones that take a 'proxy' value in the "Data.Proxied" module.
This is useful for retrofiting typeclasses that have functions that return a
constant value for any value of a particular type (but still need to consume
some value, since one of the parameterized types must appear in a typeclass
function). Often, these functions are given 'undefined' as an argument, which
might be considered poor design.
'Proxy', however, does not carry any of the error-throwing risks of
'undefined', so it is much more preferable to take 'Proxy' as an argument to a
constant function instead of 'undefined'. Unfortunately, 'Proxy' wasn't
included in 'base' until GHC 7.8, so many of 'base''s typeclasses still contain
constant functions that aren't amenable to passing 'Proxy'. 'proxied' addresses
this issue by providing variants of those typeclass functions that take an
explicit 'proxy' value.
This library also contains the "Data.Proxyless" module, which works in the
opposite direction. That is, one can take functions which take 'Proxy' (or
'undefined') as an argument and convert them to functions which take no
arguments. This trick relies on the '-XTypeApplications' extension, so it is
only available with GHC 8.0 or later. |