haskell-awk-1.2: src/System/Console/Hawk/UserPrelude.hs
-- | In which the user prelude is massaged into the form hint needs.
module System.Console.Hawk.UserPrelude where
import Control.Monad.Trans.Class
import Data.ByteString as B
import Text.Printf
import Control.Monad.Trans.Uncertain
import Data.HaskellModule
import System.Console.Hawk.PackageDbs
import System.Console.Hawk.UserPrelude.Extend
type UserPrelude = HaskellModule
testC :: FilePath -> IO ()
testC f = do
let orig = printf "tests/preludes/%s/prelude.hs" f
m <- runUncertainIO $ readModule orig
B.putStr $ showModule orig (canonicalizeUserPrelude m)
-- |
-- >>> testC "default"
-- {-# LANGUAGE ExtendedDefaultRules, OverloadedStrings #-}
-- module System.Console.Hawk.CachedPrelude where
-- {-# LINE 2 "tests/preludes/default/prelude.hs" #-}
-- import Prelude
-- import qualified Data.ByteString.Lazy.Char8 as B
-- import qualified Data.List as L
--
-- >>> testC "moduleName"
-- module MyPrelude where
-- import Prelude
-- {-# LINE 2 "tests/preludes/moduleName/prelude.hs" #-}
-- t = take
canonicalizeUserPrelude :: HaskellModule -> UserPrelude
canonicalizeUserPrelude = extendModuleName . extendImports
readUserPrelude :: FilePath -> UncertainT IO UserPrelude
readUserPrelude f = canonicalizeUserPrelude <$> readModule f
compileUserPrelude :: FilePath -- ^ the original's filename,
-- used for fixing up line numbers
-> FilePath -- ^ new filename, because ghc compiles from disk.
-- the compiled output will be in the same folder.
-> UserPrelude
-> UncertainT IO ()
compileUserPrelude = compileUserPreludeWithArgs []
compileUserPreludeWithArgs :: [String] -- ^ extra ghc args
-> FilePath -- ^ the original's filename,
-- used for fixing up line numbers
-> FilePath -- ^ new filename, because ghc compiles from disk.
-- the compiled output will be in the same folder.
-> UserPrelude
-> UncertainT IO ()
compileUserPreludeWithArgs args orig f m = do
extraArgs <- lift $ extraGhcArgs
let args' = (extraArgs ++ args)
compileModuleWithArgs args' orig f m