{-# LANGUAGE TemplateHaskell #-}
module Snap.Loader.Static
( loadSnapTH
) where
------------------------------------------------------------------------------
import Language.Haskell.TH (Exp, Name, Q, varE)
------------------------------------------------------------------------------
-- | This function provides a non-magical type-compatible loader for
-- the one in snap-dynamic's Snap.Loader.Devel, allowing switching one
-- import to provide production-mode compilation.
--
-- This could be considered a TH wrapper around a function
--
-- > loadSnap :: Typeable a => IO a -> (a -> IO (Snap (), IO ()))
-- > -> [String] -> IO (a, Snap (), IO ())
--
-- The third argument is unused, and only present for
-- type-compatibility with Snap.Loader.Devel
loadSnapTH :: Q Exp -> Name -> [String] -> Q Exp
loadSnapTH initializer action _additionalWatchDirs =
[| do value <- $initializer
(site, conf) <- $(varE action) value
return (value, site, conf) |]