I'm looking for a reliable way to turn values into Template Haskell expressions. I thought dataToExpQ from Language.Haskell.TH.Quote was the ticket, but it appears to produce constructors different from those produced by [| ... |], including [], (:), (), and (,). Here's an example run for (). I'm using template-haskell-2.5.0.0:<br>
<br> GHCi, version 7.0.4: <a href="http://www.haskell.org/ghc/">http://www.haskell.org/ghc/</a> :? for help<br> Prelude> import Data.Data<br> Prelude Data.Data> import <a href="http://Language.Haskell.TH">Language.Haskell.TH</a><br>
Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a>> :set -XTemplateHaskell<br> Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a>> import Language.Haskell.TH.Quote<br>
Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a> Language.Haskell.TH.Quote> u1 <- runQ (dataToExpQ (const Nothing) ())<br> Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a> Language.Haskell.TH.Quote> u2 <- runQ [| () |]<br>
Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a> Language.Haskell.TH.Quote> u1<br> ConE ()<br> Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a> Language.Haskell.TH.Quote> u2<br>
ConE GHC.Unit.()<br> Prelude Data.Data <a href="http://Language.Haskell.TH">Language.Haskell.TH</a> Language.Haskell.TH.Quote> u1 == u2<br> False<br><br>Any suggestions?<br><br>-- Conal<br><br>