[commit: haskeline] master: Don't make InputT an instance of our internal MonadState/Reader classes. (c3dd854)
Ian Lynagh
igloo at earth.li
Sat May 19 13:22:03 CEST 2012
Repository : ssh://darcs.haskell.org//srv/darcs/packages/haskeline
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/c3dd85455b1c477966ec8b7b189487fab91fbe0a
>---------------------------------------------------------------
commit c3dd85455b1c477966ec8b7b189487fab91fbe0a
Author: Judah Jacobson <judah.jacobson at gmail.com>
Date: Fri May 18 18:20:55 2012 +0000
Don't make InputT an instance of our internal MonadState/Reader classes.
Haddock displays those instances (which are in actually hidden to the user).
This makes it seem like InputT implements MonadState/Reader from the mtl
package.
>---------------------------------------------------------------
System/Console/Haskeline.hs | 10 +++++-----
System/Console/Haskeline/InputT.hs | 16 +++++++++-------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/System/Console/Haskeline.hs b/System/Console/Haskeline.hs
index 1c1e16d..8894551 100644
--- a/System/Console/Haskeline.hs
+++ b/System/Console/Haskeline.hs
@@ -112,7 +112,7 @@ Unicode characters.
-- | Write a Unicode string to the user's standard output.
outputStr :: MonadIO m => String -> InputT m ()
outputStr xs = do
- putter <- asks putStrOut
+ putter <- InputT $ asks putStrOut
liftIO $ putter xs
-- | Write a string to the user's standard output, followed by a newline.
@@ -166,7 +166,7 @@ getInputLineWithInitial prompt (left,right) = promptedInput (getInputCmdLine ini
getInputCmdLine :: MonadException m => InsertMode -> TermOps -> String -> InputT m (Maybe String)
getInputCmdLine initialIM tops prefix = do
- emode <- asks editMode
+ emode <- InputT $ asks editMode
result <- runInputCmdT tops $ case emode of
Emacs -> runCommandLoop tops prefix emacsCommands initialIM
Vi -> evalStateT' emptyViState $
@@ -176,8 +176,8 @@ getInputCmdLine initialIM tops prefix = do
maybeAddHistory :: forall m . Monad m => Maybe String -> InputT m ()
maybeAddHistory result = do
- settings :: Settings m <- ask
- histDupes <- asks historyDuplicates
+ settings :: Settings m <- InputT ask
+ histDupes <- InputT $ asks historyDuplicates
case result of
Just line | autoAddHistory settings && not (all isSpace line)
-> let adder = case histDupes of
@@ -271,7 +271,7 @@ promptedInput doTerm doFile prompt = do
-- If other parts of the program have written text, make sure that it
-- appears before we interact with the user on the terminal.
liftIO $ hFlush stdout
- rterm <- ask
+ rterm <- InputT ask
case termOps rterm of
Right fops -> liftIO $ do
putStrOut rterm prompt
diff --git a/System/Console/Haskeline/InputT.hs b/System/Console/Haskeline/InputT.hs
index cd100b5..fe203ab 100644
--- a/System/Console/Haskeline/InputT.hs
+++ b/System/Console/Haskeline/InputT.hs
@@ -42,9 +42,11 @@ newtype InputT m a = InputT {unInputT :: ReaderT RunTerm
(StateT History
(StateT KillRing (ReaderT Prefs
(ReaderT (Settings m) m)))) a}
- deriving (Monad, MonadIO, MonadException,
- MonadState History, MonadReader Prefs,
- MonadReader (Settings m), MonadReader RunTerm)
+ deriving (Monad, MonadIO, MonadException)
+ -- NOTE: we're explicitly *not* making InputT an instance of our
+ -- internal MonadState/MonadReader classes. Otherwise haddock
+ -- displays those instances to the user, and it makes it seem like
+ -- we implement the mtl versions of those classes.
instance Monad m => Functor (InputT m) where
fmap = liftM
@@ -58,15 +60,15 @@ instance MonadTrans InputT where
-- | Get the current line input history.
getHistory :: Monad m => InputT m History
-getHistory = get
+getHistory = InputT get
-- | Set the line input history.
putHistory :: Monad m => History -> InputT m ()
-putHistory = put
+putHistory = InputT . put
-- | Change the current line input history.
modifyHistory :: Monad m => (History -> History) -> InputT m ()
-modifyHistory = modify
+modifyHistory = InputT . modify
-- for internal use only
type InputCmdT m = StateT Layout (UndoT (StateT HistLog (StateT KillRing
@@ -101,7 +103,7 @@ runInputT = runInputTBehavior defaultBehavior
-- | Returns 'True' if the current session uses terminal-style interaction. (See 'Behavior'.)
haveTerminalUI :: Monad m => InputT m Bool
-haveTerminalUI = asks isTerminalStyle
+haveTerminalUI = InputT $ asks isTerminalStyle
{- | Haskeline has two ways of interacting with the user:
More information about the Cvs-libraries
mailing list