[Haskell-cafe] suggestions for doing date/time values with Data.Generics ?

Thomas Hartman tphyahoo at gmail.com
Mon Oct 5 15:39:15 EDT 2009

I want to patch the time package, which I darcs got head on. Goal is
to be able to do newtype deriving for UTCTime which I reckon is the
base time value, for use in happstack applications state.

basically, need instances for UTCTime, for Data and Typeable.

on #haskell:

<patch-tag> I just darcs got time package and attempted to install.
           install didn't work because missing configure fle. there's
a .ac
           file there, so I tried first autoconf, then cabal
           install. configure file got created, but failed with
           config.status: error: cannot find input file:
           include/HsTimeConfig.h.in. now what?
<patch-tag> my goal is to patch time package so can do data generics deriving.

<Berengal> patch-tag, use System.Time instead?
* Berengal shrugs and sighs                                             [12:20]
<patch-tag> could try that...
*** o-regalia (n=o-regali at host-0-130.mimpvbg.clients.pavlovmedia.com)
   quit: "Lost terminal"
<Berengal> It already has a Serializeable instance defined in one of
          happstack modules, so there's probably a Typeable and Data
          somewhere as well

<Berengal> patch-tag, unfortunately, UTCTime has a component of a
          datatype which isn't an instance of Typeable or Data, and
          it's not exported it's impossible to create the instance as well
<Berengal> If it were exported, it'd be pretty easy
<patch-tag> hw can I use UTCTime, deriving Typeable and Data? (want to
           UTCTime in happstack).
<patch-tag> http://moonpatio.com/fastcgi/hpaste.fcgi/view?id=4278#a4278
<patch-tag> I guess I should have said I'd like to use newtype
deriving rather
           than define instance myself if that's possible.

<Berengal> patch-tag, that's possible, but could break other things.
          correct solution is to patch the existing package, but that
<Berengal> patch-tag, Day, or something. Can't remember off the top of my head
*** paolino (n=paolino at has quit: "Leaving."
<ski> Philonous : if you can't implement both operations (satisfying
     though, it is probably better to make a new class                 [12:09]
<patch-tag> Berengal: a package is hidden if when you do :info in
ghci, it
           comes out as fully qualified, right?
<patch-tag> pity also that newtype deriving doesn't give you a nicer
           message like "deriving choked at type blah"
<Berengal> patch-tag, it comes fully qualified if it's not imported,
so you'll
          have to try to import it to see if it's really hidden        [12:10]


Seems like the right thing to do is patch the time package anyway.

File Edit Options Buffers Tools Haskell Help
{-# LANGUAGE DeriveDataTypeable #-}
module TypeableTime where

import Data.Time
import Data.Data
import Data.Generics
import Data.Typeable

-- doesn't work
--data MyUTCTime = MyUTCTime UTCTime
--   deriving (Typeable,Data)

-- should I work up to UTCTime by doing this...?
data MyDay = MyDay {toMyDayModifiedJulianDay :: Integer}
 deriving (Typeable,Data)

newtype MyString = MyString String
 deriving (Read,Show,Ord,Eq,Typeable,Data)

-- should I just modify time package? is this easier?

More information about the Haskell-Cafe mailing list