hint 0.5.2 → 0.6.0
raw patch · 10 files changed
+140/−26 lines, 10 filesdep ~ghcPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ghc
API changes (from Hackage documentation)
+ Language.Haskell.Interpreter: ApplicativeDo :: Extension
+ Language.Haskell.Interpreter: DeriveLift :: Extension
+ Language.Haskell.Interpreter: DuplicateRecordFields :: Extension
+ Language.Haskell.Interpreter: MonadFailDesugaring :: Extension
+ Language.Haskell.Interpreter: NoApplicativeDo :: Extension
+ Language.Haskell.Interpreter: NoDeriveLift :: Extension
+ Language.Haskell.Interpreter: NoDuplicateRecordFields :: Extension
+ Language.Haskell.Interpreter: NoMonadFailDesugaring :: Extension
+ Language.Haskell.Interpreter: NoOverloadedLabels :: Extension
+ Language.Haskell.Interpreter: NoStaticPointers :: Extension
+ Language.Haskell.Interpreter: NoStrict :: Extension
+ Language.Haskell.Interpreter: NoStrictData :: Extension
+ Language.Haskell.Interpreter: NoTemplateHaskellQuotes :: Extension
+ Language.Haskell.Interpreter: NoTypeApplications :: Extension
+ Language.Haskell.Interpreter: NoTypeInType :: Extension
+ Language.Haskell.Interpreter: NoUndecidableSuperClasses :: Extension
+ Language.Haskell.Interpreter: OverloadedLabels :: Extension
+ Language.Haskell.Interpreter: StaticPointers :: Extension
+ Language.Haskell.Interpreter: Strict :: Extension
+ Language.Haskell.Interpreter: StrictData :: Extension
+ Language.Haskell.Interpreter: TemplateHaskellQuotes :: Extension
+ Language.Haskell.Interpreter: TypeApplications :: Extension
+ Language.Haskell.Interpreter: TypeInType :: Extension
+ Language.Haskell.Interpreter: UndecidableSuperClasses :: Extension
+ Language.Haskell.Interpreter.Extension: ApplicativeDo :: Extension
+ Language.Haskell.Interpreter.Extension: DeriveLift :: Extension
+ Language.Haskell.Interpreter.Extension: DuplicateRecordFields :: Extension
+ Language.Haskell.Interpreter.Extension: MonadFailDesugaring :: Extension
+ Language.Haskell.Interpreter.Extension: NoApplicativeDo :: Extension
+ Language.Haskell.Interpreter.Extension: NoDeriveLift :: Extension
+ Language.Haskell.Interpreter.Extension: NoDuplicateRecordFields :: Extension
+ Language.Haskell.Interpreter.Extension: NoMonadFailDesugaring :: Extension
+ Language.Haskell.Interpreter.Extension: NoOverloadedLabels :: Extension
+ Language.Haskell.Interpreter.Extension: NoStaticPointers :: Extension
+ Language.Haskell.Interpreter.Extension: NoStrict :: Extension
+ Language.Haskell.Interpreter.Extension: NoStrictData :: Extension
+ Language.Haskell.Interpreter.Extension: NoTemplateHaskellQuotes :: Extension
+ Language.Haskell.Interpreter.Extension: NoTypeApplications :: Extension
+ Language.Haskell.Interpreter.Extension: NoTypeInType :: Extension
+ Language.Haskell.Interpreter.Extension: NoUndecidableSuperClasses :: Extension
+ Language.Haskell.Interpreter.Extension: OverloadedLabels :: Extension
+ Language.Haskell.Interpreter.Extension: StaticPointers :: Extension
+ Language.Haskell.Interpreter.Extension: Strict :: Extension
+ Language.Haskell.Interpreter.Extension: StrictData :: Extension
+ Language.Haskell.Interpreter.Extension: TemplateHaskellQuotes :: Extension
+ Language.Haskell.Interpreter.Extension: TypeApplications :: Extension
+ Language.Haskell.Interpreter.Extension: TypeInType :: Extension
+ Language.Haskell.Interpreter.Extension: UndecidableSuperClasses :: Extension
- Language.Haskell.Interpreter: runInterpreter :: (MonadIO m, MonadMask m, Functor m) => InterpreterT m a -> m (Either InterpreterError a)
+ Language.Haskell.Interpreter: runInterpreter :: (MonadIO m, MonadMask m) => InterpreterT m a -> m (Either InterpreterError a)
- Language.Haskell.Interpreter.Unsafe: unsafeRunInterpreterWithArgs :: (MonadMask m, MonadIO m, Functor m) => [String] -> InterpreterT m a -> m (Either InterpreterError a)
+ Language.Haskell.Interpreter.Unsafe: unsafeRunInterpreterWithArgs :: (MonadMask m, MonadIO m) => [String] -> InterpreterT m a -> m (Either InterpreterError a)
- Language.Haskell.Interpreter.Unsafe: unsafeRunInterpreterWithArgsLibdir :: (MonadIO m, MonadMask m, Functor m) => [String] -> String -> InterpreterT m a -> m (Either InterpreterError a)
+ Language.Haskell.Interpreter.Unsafe: unsafeRunInterpreterWithArgsLibdir :: (MonadIO m, MonadMask m) => [String] -> String -> InterpreterT m a -> m (Either InterpreterError a)
Files
- AUTHORS +1/−0
- CHANGELOG.md +5/−0
- hint.cabal +2/−2
- src/Control/Monad/Ghc.hs +4/−0
- src/Hint/Base.hs +24/−8
- src/Hint/Extension.hs +49/−1
- src/Hint/InterpreterT.hs +35/−9
- src/Hint/Parsers.hs +9/−1
- src/Language/Haskell/Interpreter.hs +1/−1
- src/Language/Haskell/Interpreter/Unsafe.hs +10/−4
AUTHORS view
@@ -19,3 +19,4 @@ Pasqualino Titto Assini Rob Zinkov <rob@zinkov.com> Samuel Gélineau+Sid Kapur
CHANGELOG.md view
@@ -1,3 +1,8 @@+### 0.6.0++* Support for GHC 8.0+* Add `displayException` to InterpreterError+ ### 0.5.2 * Add `runInterpreter` variant that takes a GHC libdir at runtime
hint.cabal view
@@ -1,5 +1,5 @@ name: hint-version: 0.5.2+version: 0.6.0 description: This library defines an Interpreter monad. It allows to load Haskell modules, browse them, type-check and evaluate strings with Haskell@@ -45,7 +45,7 @@ Library build-depends: base == 4.*,- ghc >= 7.6 && < 8,+ ghc >= 7.6 && < 8.2, ghc-paths, mtl, filepath,
src/Control/Monad/Ghc.hs view
@@ -25,7 +25,11 @@ pure = return (<*>) = ap +#if __GLASGOW_HASKELL__ >= 800+runGhcT :: (MonadIO m, MonadMask m) => Maybe FilePath -> GhcT m a -> m a+#else runGhcT :: (Functor m, MonadIO m, MonadCatch m, MonadMask m) => Maybe FilePath -> GhcT m a -> m a+#endif runGhcT f = unMTLA . GHC.runGhcT f . unGhcT instance MTL.MonadTrans GhcT where
src/Hint/Base.hs view
@@ -7,7 +7,7 @@ InterpreterState(..), fromState, onState, InterpreterConfiguration(..), - runGhc1, runGhc2, runGhc3,+ runGhc1, runGhc2, ModuleName, PhantomModule(..), findModule, moduleIsLoaded,@@ -26,6 +26,10 @@ import qualified Hint.GHC as GHC +#if MIN_VERSION_base(4,8,0)+import qualified Data.List+#endif+ import Hint.Extension -- | Version of the underlying ghc api. Values are:@@ -74,23 +78,38 @@ type InterpreterSession = SessionData () instance Exception InterpreterError+#if MIN_VERSION_base(4,8,0)+ where+ displayException (UnknownError err) = "UnknownError: " ++ err+ displayException (WontCompile es) = unlines . Data.List.nub . map errMsg $ es+ displayException (NotAllowed err) = "NotAllowed: " ++ err+ displayException (GhcException err) = "GhcException: " ++ err+#endif type RunGhc m a =+#if __GLASGOW_HASKELL__ >= 800+ (forall n.(MonadIO n, MonadMask n) => GHC.GhcT n a)+#else (forall n.(MonadIO n, MonadMask n, Functor n) => GHC.GhcT n a)+#endif -> m a type RunGhc1 m a b =+#if __GLASGOW_HASKELL__ >= 800+ (forall n.(MonadIO n, MonadMask n) => a -> GHC.GhcT n b)+#else (forall n.(MonadIO n, MonadMask n, Functor n) => a -> GHC.GhcT n b)+#endif -> (a -> m b) type RunGhc2 m a b c =+#if __GLASGOW_HASKELL__ >= 800+ (forall n.(MonadIO n, MonadMask n) => a -> b -> GHC.GhcT n c)+#else (forall n.(MonadIO n, MonadMask n, Functor n) => a -> b -> GHC.GhcT n c)+#endif -> (a -> b -> m c) -type RunGhc3 m a b c d =- (forall n.(MonadIO n, MonadMask n, Functor n) => a -> b -> c -> GHC.GhcT n d)- -> (a -> b -> c -> m d)- data SessionData a = SessionData { internalState :: IORef InterpreterState, versionSpecific :: a,@@ -129,9 +148,6 @@ runGhc2 :: MonadInterpreter m => RunGhc2 m a b c runGhc2 f a = runGhc1 (f a)--runGhc3 :: MonadInterpreter m => RunGhc3 m a b c d-runGhc3 f a = runGhc2 (f a) -- ================ Handling the interpreter state =================
src/Hint/Extension.hs view
@@ -127,6 +127,18 @@ | PartialTypeSignatures | NamedWildCards | DeriveAnyClass+ | DeriveLift+ | StaticPointers+ | StrictData+ | Strict+ | ApplicativeDo+ | DuplicateRecordFields+ | TypeApplications+ | TypeInType+ | UndecidableSuperClasses+ | MonadFailDesugaring+ | TemplateHaskellQuotes+ | OverloadedLabels | NoOverlappingInstances | NoUndecidableInstances | NoIncoherentInstances@@ -233,6 +245,18 @@ | NoPartialTypeSignatures | NoNamedWildCards | NoDeriveAnyClass+ | NoDeriveLift+ | NoStaticPointers+ | NoStrictData+ | NoStrict+ | NoApplicativeDo+ | NoDuplicateRecordFields+ | NoTypeApplications+ | NoTypeInType+ | NoUndecidableSuperClasses+ | NoMonadFailDesugaring+ | NoTemplateHaskellQuotes+ | NoOverloadedLabels | UnknownExtension String deriving (Eq, Show, Read) @@ -343,6 +367,18 @@ PartialTypeSignatures, NamedWildCards, DeriveAnyClass,+ DeriveLift,+ StaticPointers,+ StrictData,+ Strict,+ ApplicativeDo,+ DuplicateRecordFields,+ TypeApplications,+ TypeInType,+ UndecidableSuperClasses,+ MonadFailDesugaring,+ TemplateHaskellQuotes,+ OverloadedLabels, NoOverlappingInstances, NoUndecidableInstances, NoIncoherentInstances,@@ -448,5 +484,17 @@ NoPatternSynonyms, NoPartialTypeSignatures, NoNamedWildCards,- NoDeriveAnyClass+ NoDeriveAnyClass,+ NoDeriveLift,+ NoStaticPointers,+ NoStrictData,+ NoStrict,+ NoApplicativeDo,+ NoDuplicateRecordFields,+ NoTypeApplications,+ NoTypeInType,+ NoUndecidableSuperClasses,+ NoMonadFailDesugaring,+ NoTemplateHaskellQuotes,+ NoOverloadedLabels ]
src/Hint/InterpreterT.hs view
@@ -34,8 +34,11 @@ } deriving (Functor, Monad, MonadIO, MonadThrow, MonadCatch, MonadMask) -execute :: (MonadIO m, MonadMask m, Functor m)- => String+execute :: (MonadIO m, MonadMask m+#if __GLASGOW_HASKELL__ < 800+ , Functor m+#endif+ ) => String -> InterpreterSession -> InterpreterT m a -> m (Either InterpreterError a)@@ -47,7 +50,11 @@ instance MonadTrans InterpreterT where lift = InterpreterT . lift . lift -runGhcImpl :: (MonadIO m, MonadThrow m, MonadMask m, Functor m) => RunGhc (InterpreterT m) a+runGhcImpl :: (MonadIO m, MonadMask m+#if __GLASGOW_HASKELL__ < 800+ , MonadThrow m, Functor m+#endif+ ) => RunGhc (InterpreterT m) a runGhcImpl a = InterpreterT (lift a) `catches`@@ -107,22 +114,31 @@ -- NB. The underlying ghc will overwrite certain signal handlers -- (SIGINT, SIGHUP, SIGTERM, SIGQUIT on Posix systems, Ctrl-C handler on Windows). -- In future versions of hint, this might be controlled by the user.-runInterpreter :: (MonadIO m, MonadMask m, Functor m)- => InterpreterT m a+runInterpreter :: (MonadIO m, MonadMask m+#if __GLASGOW_HASKELL__ < 800+ , Functor m+#endif+ ) => InterpreterT m a -> m (Either InterpreterError a) runInterpreter = runInterpreterWithArgs [] -- | Executes the interpreter, setting args passed in as though they -- were command-line args. Returns @Left InterpreterError@ in case of -- error.-runInterpreterWithArgs :: (MonadIO m, MonadMask m, Functor m)- => [String]+runInterpreterWithArgs :: (MonadIO m, MonadMask m+#if __GLASGOW_HASKELL__ < 800+ , Functor m+#endif+ ) => [String] -> InterpreterT m a -> m (Either InterpreterError a) runInterpreterWithArgs args = runInterpreterWithArgsLibdir args GHC.Paths.libdir -runInterpreterWithArgsLibdir :: (MonadIO m, MonadMask m, Functor m)- => [String]+runInterpreterWithArgsLibdir :: (MonadIO m, MonadMask m+#if __GLASGOW_HASKELL__ < 800+ , Functor m+#endif+ ) => [String] -> String -> InterpreterT m a -> m (Either InterpreterError a)@@ -134,8 +150,10 @@ newInterpreterSession = newSessionData () cleanSession = do cleanPhantomModules+#if __GLASGOW_HASKELL__ < 800 runGhc $ do dflags <- GHC.getSessionDynFlags GHC.defaultCleanupHandler dflags (return ())+#endif {-# NOINLINE uniqueToken #-} uniqueToken :: MVar ()@@ -182,7 +200,11 @@ } mkLogHandler :: IORef [GhcError] -> GhcErrLogger+#if __GLASGOW_HASKELL__ >= 800+mkLogHandler r df _ _ src style msg =+#else mkLogHandler r df _ src style msg =+#endif let renderErrMsg = GHC.showSDoc df errorEntry = mkGhcError renderErrMsg src style msg in modifyIORef r (errorEntry :)@@ -203,6 +225,10 @@ -- runGhc = runGhcImpl +#if __GLASGOW_HASKELL__ >= 800+instance (Monad m) => Applicative (InterpreterT m) where+#else instance (Monad m, Applicative m) => Applicative (InterpreterT m) where+#endif pure = return (<*>) = ap
src/Hint/Parsers.hs view
@@ -8,6 +8,10 @@ import qualified Hint.GHC as GHC +#if __GLASGOW_HASKELL__ >= 800+import qualified DynFlags as GHC+#endif+ data ParseResult = ParseOk | ParseError GHC.SrcSpan GHC.Message parseExpr :: MonadInterpreter m => String -> m ParseResult@@ -50,7 +54,11 @@ dflags <- runGhc GHC.getSessionDynFlags let logger' = logger dflags errStyle = GHC.defaultErrStyle dflags- liftIO $ logger' GHC.SevError+ liftIO $ logger'+#if __GLASGOW_HASKELL__ >= 800+ GHC.NoReason+#endif+ GHC.SevError span errStyle err
src/Language/Haskell/Interpreter.hs view
@@ -28,7 +28,7 @@ -- ** Module querying ModuleElem(..), Id, name, children, getModuleExports,- -- ** Anotations+ -- ** Annotations -- In the snippets below we use \'LBRACE\' and \'RBRACE\' -- to mean \'{\' and \'}\' respectively. We cannot put the -- pragmas inline in the code since GHC scarfs them up.
src/Language/Haskell/Interpreter/Unsafe.hs view
@@ -24,8 +24,11 @@ -- context. -- -- Warning: Some options may interact badly with the Interpreter.-unsafeRunInterpreterWithArgs :: (MonadMask m, MonadIO m, Functor m)- => [String]+unsafeRunInterpreterWithArgs :: (MonadMask m, MonadIO m+#if __GLASGOW_HASKELL__ < 800+ , Functor m+#endif+ ) => [String] -> InterpreterT m a -> m (Either InterpreterError a) unsafeRunInterpreterWithArgs = runInterpreterWithArgs@@ -36,8 +39,11 @@ -- a machine in which GHC is not installed. -- -- A typical libdir value would be "/opt/ghc/7.10.3/lib/ghc-7.10.3".-unsafeRunInterpreterWithArgsLibdir :: (MonadIO m, MonadMask m, Functor m)- => [String]+unsafeRunInterpreterWithArgsLibdir :: (MonadIO m, MonadMask m+#if __GLASGOW_HASKELL__ < 800+ , Functor m+#endif+ ) => [String] -> String -> InterpreterT m a -> m (Either InterpreterError a)