QuasiQuotation, blogpost, .
1: ( StringEmbed.hs,
module StringEmbed(embedStr, embedStrFile) where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
embedStr :: QuasiQuoter
embedStr = QuasiQuoter { quoteExp = stringE,
quotePat = undefined,
quoteDec = undefined,
quoteType = undefined }
embedStrFile :: QuasiQuoter
embedStrFile = quoteFile embedStr
, - TH , .
2a: :
{-# LANGUAGE QuasiQuotes #-}
import StringEmbed
cCode :: String
cCode = [embedStr|
int main(int argc, char** argv) {
doStuff();
}
|]
, QuasiQuotes LANGUAGE. TemplateHaskell .
QuasiQuotes |], .
2b: . , code.c , .
{-# LANGUAGE QuasiQuotes #-}
import StringEmbed
cFooter :: String
cFooter = [embedStrFile|code.c|]
haskell StringEmbed.hs, heredoc ( Ørjan Johansen !)
{-# LANGUAGE QuasiQuotes #-}
import Text.Heredoc
cCode :: String
cCode = [here|
int main(int argc, char** argv) {
doStuff();
}
|]