Плагины Haskell выдают старые значения при перекомпиляции файла

Я использовал пакет плагинов Haskell для компиляции строк в функции / значения, которые можно использовать в Haskell во время выполнения. Однако у меня есть проблема: когда я пытаюсь загрузить разные значения с одним и тем же именем, он выдает только первое значение.

Вот мой тестовый файл:

import System.Plugins
import System.IO.Temp
import System.Directory


deleteIfExists :: String -> IO ()
deleteIfExists filePath = do
  exists <- doesFileExist filePath
  if exists 
    then
      (removeFile filePath)
    else
      (return ())

compileInt :: String -> IO Int
compileInt codeMinusModule = do

  withTempDirectory "./.tmp" "__compileTemp" $ \path -> do
    let filePath = (path ++ "/GetInt.hs" )
    let code = "module GetInt where\n" ++ codeMinusModule

    deleteIfExists filePath
    writeFile filePath code

    status <- makeAll filePath []
    objectPath <- 
      case status of
        MakeSuccess _ opath -> return opath
        MakeFailure elist -> error $ "Couldn't make object:\n" ++ (concat elist)


    strat <- loadInt objectPath path

    deleteIfExists path

    return strat
    where 
      loadInt objectPath folderPath = do
        loadStatus <- load objectPath [folderPath] [] "myInt"
        case loadStatus of
            LoadFailure msg -> error $ "Failed to compile " ++ ( concat msg )
            LoadSuccess _ strat -> return strat

И мой GHCI запустить:

*Main> compileInt "myInt = 4"
Loading package array-0.4.0.1 ... linking ... done.
...
4
*Main> compileInt "myInt = 3"
4

Даже когда я даю ему другое значение, оно сохраняет старое. Я удаляю свои временные каталоги и все.

Это внутреннее ограничение пакета плагинов, или я что-то не так делаю?

1 ответ

Решение

Вам просто нужно позвонить unloadAll или подобное перед загрузкой во второй раз.

Другие вопросы по тегам