[Haskell-beginners] reading lines with history from bash terminal in OS X

David McBride toad3k at gmail.com
Mon Aug 1 12:43:14 UTC 2016


MonadIO m => MonadIO (InputT m)
MonadException m => MonadException (InputT m)

MonadIO means you have access to liftIO.  liftIO . evaluate . force $
mycode.
MonadException means that you have access to haskeline's exception catching
mechanisms.

In System.Console.Haskeline.MonadException, you have the catch, catches,
and handle functions which will allow you to catch IO exceptions (in
combination with liftIO), and also a bracket which will just let you do
arbitrary IO actions and clean up when you are done (or hit an exception).

>let mycode = undefined :: Handle -> IO ()  -- example code

runInputT _ (bracket (liftIO $ openFile "blah" ReadMode) (liftIO . hClose)
(\fp -> liftIO . mycode $ fp))

Another way to use it might be

runInputT _ (liftIO $ mycode _) `catches` [Handler iohandler, Handler
anotherhandler]
  where
    iohandler :: IOException -> IO ()
    iohandler e = putStrLn "got io exception" >> return ()

Exceptions are always a pain, and so are transformers, but you get used to
them.

On Mon, Aug 1, 2016 at 4:06 AM, Dennis Raddle <dennis.raddle at gmail.com>
wrote:

> I'm looking over haskeline. It looks like I have to modify some of my code
> that is in the IO monad right now. I use 'evaluate' in several places, and
> also 'evaluate $ force', to make sure that IO exceptions are encountered
> where I can catch them. Can I use 'evaluate' with InputT? I'm muddled
> headed about what to do. I guess I would lift 'evaluate' into the inner
> monad? I am not sure what those words mean. How would I catch IO exceptions?
>
> On Thu, Jul 28, 2016 at 5:35 PM, Dennis Raddle <dennis.raddle at gmail.com>
> wrote:
>
>> Thanks. I'll install haskeline
>>
>> On Thu, Jul 28, 2016 at 5:05 PM, David McBride <toad3k at gmail.com> wrote:
>>
>>> You will have to use the haskeline library.  FYI that is the library
>>> that makes ghci work.
>>>
>>> On Thu, Jul 28, 2016 at 6:09 PM, Dennis Raddle <dennis.raddle at gmail.com>
>>> wrote:
>>>
>>>> I wrote a program first in Windows, where it works as expected, and now
>>>> I'm using it in OS X and getting undesired behavior.
>>>>
>>>> It reads lines from the terminal using the getLine function. In Windows
>>>> (DOS, actually) the up and down arrows can be used to choose previously
>>>> entered lines. However, this does not work in bash in OS X.
>>>>
>>>> What do I need to get the history available via the arrow keys?
>>>>
>>>> D
>>>>
>>>>
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> Beginners at haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>>>
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20160801/e9dd928f/attachment.html>


More information about the Beginners mailing list