Как заставить интерпретацию в подсказке

Как включить режим интерпретации в подсказке (Language.Haskell.Interpreter)?

У меня есть этот код:

module Main where

import Language.Haskell.Interpreter
import Control.Monad

main = do 
  res <- runInterpreter (test "test")
  case res of
       Left e -> putStrLn (show e)
       Right t -> putStrLn (show t) 
  return ()

test :: String -> Interpreter ()
test mname = 
  do
    loadModules [mname ++ ".hs"]
    setTopLevelModules ["Main"]

Результатом будет (на основании ответов здесь):

NotAllowed "These modules are not interpreted:\nMain\n"

только если GHC находит test.o!

я пробовал

unsafeSetGhcOption ("-fbyte-code")

1 ответ

Решение

С использованием -fforce-recomp Опция, кажется, заставляет интерпретацию при использовании из GHCi/Hint.

unsafeSetGhcOption "-fforce-recomp"

Хотя я не смог найти никакой документации для проверки этого, кажется разумным, что GHCi/Hint будет повторно использовать проверку перекомпиляции из GHC.


ОБНОВЛЕНИЕ: копаясь немного больше, я нашел билет GHC# 2542, где указано, что префикс имени модуля со звездочкой вызовет интерпретацию в GHCi. Это также подтверждается в документации.

:load *test.hs

Это, кажется, переносится и на подсказку, так что это также работает:

loadModules ["*" ++ mname ++ ".hs"]
Другие вопросы по тегам