У меня есть небольшой проект, который генерирует некоторый исходный код в зависимости от аргументов командной строки, а затем выполняет сгенерированный код haskell.
Я пытаюсь использовать GHC API runGhc
, чтобы загрузить исходный файл и выполнить его. Я нашел несколько примеров, все файлы исходного кода не импортируют пакеты третьей части.
Но Мой исходный код импортирует некоторые пакеты, и это вызывает Could not find module
исключение.
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE ViewPatterns #-}
import GHC
import GHC.Paths ( libdir )
import DynFlags
main =
defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags $ dflags{
hscTarget = HscInterpreted
, ghcLink = LinkInMemory
}
target <- guessTarget "Demo.hs" Nothing
setTargets [target]
load LoadAllTargets
А мой Demo.hs
похож на
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}
module Demo where
import qualified Data.ByteString.Lazy.Internal as BSL
import qualified Data.Aeson as DA
buildRequestFromJson ::
BSL.ByteString -> BSL.ByteString -> Maybe EchoRequest
buildRequestFromJson payload = (DA.decode payload)
Ошибка
Could not find module ‘Data.Aeson’
Perhaps you meant Data.Version (from base-4.12.0.0)
Use -v to see a list of the files searched for.
|
13 | import qualified Data.Aeson as DA
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Я ищу, как выполнить исходный код. Я не смог использовать hint
, plugins
пакет. И я хочу знать, как справиться с этим.