threepenny-gui-0.6.0.1: src/Foreign/JavaScript/Include.hs
{-# LANGUAGE TemplateHaskell, CPP #-}
module Foreign.JavaScript.Include (include) where
import Data.Functor
import qualified Language.Haskell.TH as TH
import Language.Haskell.TH.Quote
import System.IO
#if defined(SAMPLES)
root :: FilePath
root = "../" -- we are running the examples from ghci
#else
root :: FilePath
root = "./"
#endif
include :: QuasiQuoter
include = QuasiQuoter
{ quoteExp = f -- only used as an expression,
, quotePat = undefined -- hence all other use cases undefined
, quoteType = undefined
, quoteDec = undefined
}
where
f s = TH.LitE . TH.StringL <$> TH.runIO (readFileUTF8 $ root ++ s)
readFileUTF8 :: FilePath -> IO String
readFileUTF8 path = do
h <- openFile path ReadMode
hSetEncoding h utf8
hGetContents h