[Haskell-cafe] template haskell -- include a file?

Alfonso Acosta alfonso.acosta at gmail.com
Fri Sep 12 16:33:54 EDT 2008

On Fri, Sep 12, 2008 at 9:47 PM, Jason Dusek <jason.dusek at gmail.com> wrote:
>  I'd like to use template Haskell to include as a string in a
>  Haskell file. How do I do it?

I presume you mean Include a string from the outside world with a IO
action (a file, keyborad, etc ...)

module EmbedStr (embedStr) where

import Language.Haskell.TH
import Language.Haskell.TH.Syntax (lift)

embedStr :: IO String -> ExpQ
embedStr readStr = lift =<< runIO readStr

For example, to get asked about the string you want to embed during
compilation ...

$ ghci -XTemplateHaskell EmbedStr.hs
GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
[1 of 1] Compiling EmbedStr         ( EmbedStr.hs, interpreted )
Ok, modules loaded: EmbedStr.
*EmbedStr> let myStr = $(embedStr ((putStrLn "What string?") >> getLine))
Loading package array- ... linking ... done.
Loading package packedstring- ... linking ... done.
Loading package containers- ... linking ... done.
Loading package pretty- ... linking ... done.
Loading package template-haskell ... linking ... done.
What String?
*EmbedStr> myStr

>  Is there any lengthy documentation with examples for Template
>  Haskell? The pages linked to from `haskell.org` are a little
>  sparse.

Uhm, I only know about


I particularly like Mark Snyder's Template Haskell chapter on the
Software Generation and Configuration Report , but the link is broken

More information about the Haskell-Cafe mailing list