Плагины 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
или подобное перед загрузкой во второй раз.