Commit 021e3bf0 authored by Andrew Gibiansky's avatar Andrew Gibiansky

Merge pull request #330 from cje/th

Permit use of inline template haskell
parents de20c696 f36c89af
...@@ -85,6 +85,7 @@ library ...@@ -85,6 +85,7 @@ library
system-argv0 -any, system-argv0 -any,
system-filepath -any, system-filepath -any,
tar -any, tar -any,
template-haskell -any,
text >=0.11, text >=0.11,
transformers -any, transformers -any,
unix >= 2.6, unix >= 2.6,
......
...@@ -20,6 +20,7 @@ import Data.Char as Char ...@@ -20,6 +20,7 @@ import Data.Char as Char
import Data.Dynamic import Data.Dynamic
import Data.Typeable import Data.Typeable
import qualified Data.Serialize as Serialize import qualified Data.Serialize as Serialize
import qualified Language.Haskell.TH as TH
import System.Directory import System.Directory
import Filesystem.Path.CurrentOS (encodeString) import Filesystem.Path.CurrentOS (encodeString)
import System.Posix.IO import System.Posix.IO
...@@ -704,9 +705,28 @@ evalCommand output (Expression expr) state = do ...@@ -704,9 +705,28 @@ evalCommand output (Expression expr) state = do
let widgetExpr = printf "(IHaskell.Display.Widget (%s))" expr :: String let widgetExpr = printf "(IHaskell.Display.Widget (%s))" expr :: String
isWidget <- attempt $ exprType widgetExpr isWidget <- attempt $ exprType widgetExpr
-- Check if this is a template haskell declaration
let declExpr = printf "((id :: DecsQ -> DecsQ) (%s))" expr::String
isTHDeclaration <- attempt $ exprType declExpr
write $ "Can Display: " ++ show canRunDisplay write $ "Can Display: " ++ show canRunDisplay
write $ " Is Widget: " ++ show canRunDisplay write $ "Is Widget: " ++ show isWidget
write $ "Is Declaration: " ++ show isTHDeclaration
if isTHDeclaration
-- If it typechecks as a DecsQ, we do not want to display the DecsQ,
-- we just want the declaration made.
then do
write $ "Suppressing display for template haskell declaration"
GHC.runDecls expr
return EvalOut {
evalStatus = Success,
evalResult = mempty,
evalState = state,
evalPager = "",
evalComms = []
}
else do
if canRunDisplay if canRunDisplay
then do then do
-- Use the display. As a result, `it` is set to the output. -- Use the display. As a result, `it` is set to the output.
...@@ -716,7 +736,6 @@ evalCommand output (Expression expr) state = do ...@@ -716,7 +736,6 @@ evalCommand output (Expression expr) state = do
if isWidget if isWidget
then registerWidget out then registerWidget out
else return out else return out
else do else do
-- Evaluate this expression as though it's just a statement. -- Evaluate this expression as though it's just a statement.
-- The output is bound to 'it', so we can then use it. -- The output is bound to 'it', so we can then use it.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment