+runSessionWithHandler :: (Handle -> Session ())
+ -> FilePath
+ -> Session a
+ -> IO a
+runSessionWithHandler serverHandler rootDir session = do
+ absRootDir <- canonicalizePath rootDir
+
+ (Just serverIn, Just serverOut, Nothing, serverProc) <- createProcess
+ (proc "hie" ["--lsp", "-d", "-l", "/tmp/hie-test.log"])
+ { std_in = CreatePipe, std_out = CreatePipe }
+
+ hSetBuffering serverIn NoBuffering
+ hSetBuffering serverOut NoBuffering
+
+ messageSema <- newEmptyMVar
+
+ let context = SessionContext messageSema serverIn absRootDir
+ initState = SessionState (IdInt 9)
+
+ forkIO $ void $ runReaderT (runStateT (serverHandler serverOut) initState) context
+ (result, _) <- runReaderT (runStateT session initState) context