Allow 'default' declarations in GHCi
authorPatrick Palka <patrick@parcs.ath.cx>
Sun, 8 Jul 2012 16:49:22 +0000 (12:49 -0400)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 11 Jul 2012 13:33:04 +0000 (14:33 +0100)
compiler/main/HscMain.hs
compiler/main/HscTypes.lhs
compiler/typecheck/TcRnDriver.lhs
ghc/InteractiveUI.hs

index 0b03e83..215a654 100644 (file)
@@ -1510,6 +1510,8 @@ hscDeclsWithLocation hsc_env0 str source linenumber =
     let finsts = tcg_fam_insts tc_gblenv
         insts  = tcg_insts     tc_gblenv
 
+    let defaults = tcg_default tc_gblenv
+
     {- Desugar it -}
     -- We use a basically null location for iNTERACTIVE
     let iNTERACTIVELoc = ModLocation{ ml_hs_file   = Nothing,
@@ -1561,7 +1563,8 @@ hscDeclsWithLocation hsc_env0 str source linenumber =
 
     let ictxt1 = extendInteractiveContext icontext tythings
         ictxt  = ictxt1 { ic_sys_vars  = sys_vars ++ ic_sys_vars ictxt1,
-                          ic_instances = (insts, finsts) }
+                          ic_instances = (insts, finsts),
+                          ic_default   = defaults }
 
     return (tythings, ictxt)
 
index adaa9a3..343df00 100644 (file)
@@ -943,6 +943,9 @@ data InteractiveContext
              -- ^ The function that is used for printing results
              -- of expressions in ghci and -e mode.
 
+         ic_default :: Maybe [Type],
+             -- ^ The current default types, set by a 'default' declaration
+
 #ifdef GHCI
           ic_resume :: [Resume],
              -- ^ The stack of breakpoint contexts
@@ -987,6 +990,7 @@ emptyInteractiveContext dflags
                          ic_fix_env    = emptyNameEnv,
                          -- System.IO.print by default
                          ic_int_print  = printName,
+                         ic_default    = Nothing,
 #ifdef GHCI
                          ic_resume     = [],
 #endif
index e3ec10a..0d00fb6 100644 (file)
@@ -1197,6 +1197,7 @@ setInteractiveContext hsc_env icxt thing_inside
              -- setting tcg_field_env is necessary to make RecordWildCards work
              -- (test: ghci049)
         , tcg_fix_env      = ic_fix_env icxt
+        , tcg_default      = ic_default icxt
         }) $
 
         tcExtendGhciEnv visible_tmp_ids $ -- Note [GHCi temporary Ids]
index 0dbd8ce..fd5337d 100644 (file)
@@ -794,7 +794,7 @@ enqueueCommands cmds = do
 -- rather than a stmt.
 declPrefixes :: [String]
 declPrefixes = ["class ","data ","newtype ","type ","instance ", "deriving ",
-                "foreign "]
+                "foreign ", "default ", "default("]
 
 -- | Entry point to execute some haskell code from user
 runStmt :: String -> SingleStep -> GHCi Bool