adding World.hs.

This commit is contained in:
Kazu Yamamoto
2014-09-23 17:34:09 +09:00
parent 9974bcbf79
commit 7db266c22d
5 changed files with 99 additions and 36 deletions

View File

@@ -28,7 +28,7 @@ import Data.List (intercalate)
import Data.List.Split (splitOn)
import Data.Version (showVersion)
import Language.Haskell.GhcMod
import Language.Haskell.GhcMod.Internal (cradle)
import Language.Haskell.GhcMod.Internal
import Paths_ghc_mod
import System.Console.GetOpt
import System.Directory (setCurrentDirectory)
@@ -91,7 +91,7 @@ run opt ref = flip E.catches handlers $ do
prepareAutogen cradle0
-- Asynchronous db loading starts here.
symdbreq <- newSymDbReq opt
(res, _) <- runGhcModT opt $ getCurrentWorld >>= loop symdbreq ref
(res, _) <- runGhcModT opt $ getWorld >>= loop symdbreq ref
case res of
Right () -> return ()
Left (GMECabalConfigure msg) -> do
@@ -126,7 +126,7 @@ loop symdbreq ref world = do
-- blocking
cmdArg <- liftIO $ getCommand ref
-- after blocking, we need to see if the world has changed.
changed <- isWorldChanged world
changed <- isChanged world
when changed $ do
liftIO $ ungetCommand ref cmdArg
E.throw Restart

View File

@@ -3,9 +3,6 @@
module Misc (
GHCModiError(..)
, Restart(..)
, World
, getCurrentWorld
, isWorldChanged
, UnGetLine
, emptyNewUnGetLine
, ungetCommand
@@ -26,13 +23,8 @@ import CoreMonad (liftIO)
import Data.IORef (IORef, newIORef, readIORef, writeIORef)
import Data.List (isPrefixOf)
import Data.Maybe (isJust)
#if __GLASGOW_HASKELL__ <= 704
import System.Time (ClockTime)
#else
import Data.Time (UTCTime)
#endif
import Data.Typeable (Typeable)
import System.Directory (getModificationTime, doesDirectoryExist, getDirectoryContents)
import System.Directory (doesDirectoryExist, getDirectoryContents)
import System.IO (openBinaryFile, IOMode(..))
import System.Process
@@ -53,29 +45,6 @@ instance Exception Restart
----------------------------------------------------------------
data World = World {
#if __GLASGOW_HASKELL__ <= 704
worldCabalFileModificationTime :: Maybe ClockTime
#else
worldCabalFileModificationTime :: Maybe UTCTime
#endif
} deriving (Show, Eq)
getCurrentWorld :: IOish m => GhcModT m World
getCurrentWorld = do
crdl <- cradle
mmt <- case cradleCabalFile crdl of
Just file -> liftIO $ Just <$> getModificationTime file
Nothing -> return Nothing
return $ World { worldCabalFileModificationTime = mmt }
isWorldChanged :: IOish m => World -> GhcModT m Bool
isWorldChanged world = do
world' <- getCurrentWorld
return (world /= world')
----------------------------------------------------------------
newtype UnGetLine = UnGetLine (IORef (Maybe String))
emptyNewUnGetLine :: IO UnGetLine