Opaque types vs automated instance deriving

Hi all, I encountered a problem when trying to
derive makeBinary ''DiffTime
instance Binary UTCTime where put =
with help of *derive* package. The error was: Not in scope: data constructor `MkDiffTime' Which makes a sense, since it's not exported in Data.Time.Clock. I bypassed the problem (yes, I'm too lazy to write instances by hands) with putGeneric
get = getGeneric
But it must be less efficient (and more verbose) than compile-time deriving. If there was such a module like Data.Time.Clock.Internal, I could import it to get hidden constructors (and maybe I'll have to fork the library for this purpose). OTOH, is it possible to change the derive TH function so it can bypass module encapsulation mechanism and access un-exported things?

On Mon, Jun 20, 2011 at 5:07 PM, Alexey Karakulov
Hi all, I encountered a problem when trying to
derive makeBinary ''DiffTime
with help of derive package. The error was:
Not in scope: data constructor `MkDiffTime'
Which makes a sense, since it's not exported in Data.Time.Clock. I bypassed the problem (yes, I'm too lazy to write instances by hands) with
instance Binary UTCTime where put = putGeneric get = getGeneric
But it must be less efficient (and more verbose) than compile-time deriving. If there was such a module like Data.Time.Clock.Internal, I could import it to get hidden constructors (and maybe I'll have to fork the library for this purpose).
OTOH, is it possible to change the derive TH function so it can bypass module encapsulation mechanism and access un-exported things?
I would benchmark putGeneric/getGeneric against:
put = put . toRational get = fromRational <$> get
It looks like that's what the safecopy package on Hackage uses. Antoine
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Alexey Karakulov
-
Antoine Latter