I suppose a deriveAll command from template haskell would work.  Is that
really possible?

Asking people who have more knowledge of template haskell, I'm still not sure.

What it would really rely on is:

getDataDeclarationsInCurrentModule :: Q [Dec]

Whether that can be done or not is still not something I'm sure on.

it's been a while since i played with TH, but the "stage fright" (staging 
restrictions)
are likely to get in the way. you could do something like the two-level approach
below, though, giving you:

   *Main> ds
   "[DataD [] Hi [] [NormalC Hi [(NotStrict,ConT GHC.Base.String)]] []]"
   *Main> ds'
   "[DataD [] Hi [] [NormalC Hi [(NotStrict,ConT GHC.Base.String)]] 
[GHC.Show.Show]]"
   *Main> :i Hi
   data Hi = Hi String
           -- Defined at C:/Documents and Settings/cr3/Desktop/TH.hs:12:2
   instance Show Hi
     -- Defined at C:/Documents and Settings/cr3/Desktop/TH.hs:12:2

but do you want to go down that route? what is the reason for avoiding simple
preprocessing using sed or Data.Derive or just Haskell? it isn't as if your 
clients
would have to know about where those generated modules came from, is it?
all they would see would be another Haskell module to compile. all you would
see would be an extra line in the build script for creating a source 
distribution.

claus

-----------------------------------------------------
{-# OPTIONS_GHC -fth #-}
module THI where

import Language.Haskell.TH
import Language.Haskell.TH.Syntax

rds = [d| data Hi = Hi String |]

add c (DataD ctxt n ns cs ds) = DataD ctxt n ns cs (c:ds)
add c d = d

rds' = rds >>= return . map (add ''Show)
-----------------------------------------------------
{-# OPTIONS_GHC -fth #-}
module Main where

import Language.Haskell.TH
import Language.Haskell.TH.Syntax
import THI

ds = $(rds >>= lift . show)

ds' = $(rds' >>= lift . show)

$(rds')

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to