capturing ghci command output; :redir/:grep/:find

Pepe Iborra mnislaih at gmail.com
Sat Sep 8 05:55:13 EDT 2007


Neat! /me is going to love :grep and :redir

All these are for playing with the debugger.

-- running main in tracing mode
*Main> :main arg1 arg2 ...
*Main> :maintraced arg1 arg2 ...

-- stepping into main
*Main> :mainstep arg1 arg2 ...

-- eval to whnf
Prelude> let li = map Just [1..3]
Prelude> :sp li
li = _
Prelude> :eval li
()
Prelude> :sp li
li = _ : _

-------------- next part --------------
A non-text attachment was scrubbed...
Name: .ghci
Type: application/octet-stream
Size: 434 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20070908/722851b0/ghci.obj
-------------- next part --------------

On 08/09/2007, at 3:30, Claus Reinke wrote:

> having only recently started to play with ghci's :def and :cmd,
> i'm still in the process of figuring out what is and what isn't  
> possible,
> and i've been wondering what wonderful things other ghci users have  
> in their .ghci files?
> to start with, here are my current favourites (definitions  
> attached, this is using a recent ghc 6.7). i'm looking forward to  
> seeing your
> gems and favourites:-)
>
> -- capturing command output in variables:
> *Main> :redir out :info Monad
> *Main> putStrLn out
> class Monad m where
>  (>>=) :: m a -> (a -> m b) -> m b
>  (>>) :: m a -> m b -> m b
>  return :: a -> m a
>  fail :: String -> m a
>        -- Defined in GHC.Base
> instance Monad Maybe -- Defined in Data.Maybe
> instance Monad [] -- Defined in GHC.Base
> instance Monad IO -- Defined in GHC.IOBase
>
> -- filtering command output for lines matching pattern:
> *Main> :grep break :?
>
>   :abandon                    at a breakpoint, abandon current  
> computation
>   :break [<mod>] <l> [<col>]  set a breakpoint at the specified  
> location
>   :break <name>               set a breakpoint on the specified  
> function
>   :continue                   resume after a breakpoint
>   :delete <number>            delete the specified breakpoint
>   :delete *                   delete all breakpoints
>   :step                       single-step after stopping at a  
> breakpoint
>   :trace                      trace after stopping at a breakpoint
>   :trace <expr>               trace into <expr> (remembers  
> breakpoints for :history)
>   :set stop <cmd>             set the command to run when a  
> breakpoint is hit
>   :show breaks                show the active breakpoints
>   :show context               show the breakpoint context
>
> *Main> :grep class :browse Control.Monad
>
> class Monad m where
> class Functor f where fmap :: (a -> b) -> f a -> f b
> class (Monad m) => MonadPlus m where
>
> -- Hugs' :find <id>, calling editor to open definition of <id>
> *Main> :find main
>
> probably, there should be a wiki page collecting such :definitions,
> and other ways of improving the ghci usage experience. but i'm  
> unsure whether to add to the haskell wiki
>
>    http://haskell.org/haskellwiki/GHC/GHCi
>
> or to the ghc developer's wiki
>
>    http://hackage.haskell.org/trac/ghc
>
> opinions? suggestions? tips? tricks?-)
> claus<cmds.ghci>_______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



More information about the Glasgow-haskell-users mailing list