[GHC] #9915: GHCi has trouble with 'foreign' when it is not a keyword

GHC ghc-devs at haskell.org
Sun Dec 21 04:49:03 UTC 2014


#9915: GHCi has trouble with 'foreign' when it is not a keyword
-------------------------------------+-------------------------------------
              Reporter:  cactus      |            Owner:
                  Type:  bug         |           Status:  new
              Priority:  normal      |        Milestone:
             Component:  Compiler    |          Version:  7.8.3
  (Parser)                           |         Keywords:  GHCi
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:              |       Difficulty:  Unknown
  Unknown/Multiple                   |       Blocked By:
       Type of failure:              |  Related Tickets:
  None/Unknown                       |
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by cactus):

 Of course, this is because `InteractiveUI.runStmt` decides to evaluate
 lines as declarations instead of statements based on a check vs. some
 hardcoded prefixes:

 {{{#!hs
 -- | Entry point to execute some haskell code from user
 runStmt :: String -> SingleStep -> GHCi Bool
 runStmt stmt step
  -- empty
  | null (filter (not.isSpace) stmt)
  = return False

  -- import
  | "import " `isPrefixOf` stmt
  = do addImportToContext stmt; return False

  -- data, class, newtype...
  | any (flip isPrefixOf stmt) declPrefixes
  = ... -- parse and run as Decl

  | otherwise
  = ... -- parse and run as Stmt

 -- | If we one of these strings prefixes a command, then we treat it as a
 decl
 -- rather than a stmt.
 declPrefixes :: [String]
 declPrefixes = ["class ","data ","newtype ","type ","instance ", "deriving
 ",
                 "foreign ", "default ", "default("]
 }}}

 This gives a wrong result when `foreign` is not a keyword (and thus, a
 prefix of `foreign ` doesn't signify a declaration, like in the `foreign
 -- boo!` line in my original ticket).

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9915#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list