:info features

Claus Reinke claus.reinke at talk21.com
Thu Feb 5 14:07:40 EST 2009


>>    :info Show        -- See class definition only
>>    :instances Show   -- See instances of Show
> 
> If you do not want to wait till this is implemented you can do it 
> yourself using ghci scripting.

Here's a first stab (ghci 6.8.3, using the :redir command from that tutorial),
filtering out lines beginning with "instance" until indentation level returns to
zero):

    Prelude> :{
    Prelude| :def infoNoInsts \x->return $ unlines
    Prelude| [":redir out :info "++x
    Prelude| ,"let noInsts [] = [];
    Prelude|       noInsts (l:ls) = if \"instance\" `Data.List.isPrefixOf` l
    Prelude|                        then noInsts $ dropWhile (Data.Char.isSpace . head) ls
    Prelude|                        else l:noInsts ls"
    Prelude| ,"putStr $ unlines $ noInsts $ lines out"]
    Prelude| :}
    Prelude> :infoNoInsts Show
    class Show a where
      showsPrec :: Int -> a -> ShowS
      show :: a -> String
      showList :: [a] -> ShowS
            -- Defined in GHC.Show
    Prelude> :infoNoInsts [] Maybe Int
    data [] a = [] | a : [a]        -- Defined in GHC.Base
    data Maybe a = Nothing | Just a         -- Defined in Data.Maybe
    data Int = GHC.Base.I# GHC.Prim.Int#    -- Defined in GHC.Base

> Details how to do it are in tutorial from Claus Reinke:
> http://www.haskell.org/pipermail/haskell-cafe/2007-September/032260.html
> Understanding all the possibilities and limitations of ghci scripting 
> may take a day or maybe even more. But once you are done with it you can 
> implement your :instances command and and something like 
> :infoWithoutInstances withing an hour at most. And it is more 
> interesting that you could do much more extensions like this easily if 
> you need them in the future.

Note that "understanding" is unlikely to mean "feel comfortable with"
here:-( the quoting and scope management are rather attrocious in
'ghciscript', and as others have pointed out, my tutorial is rather short
on explanations (you really need to work through the examples).

It does, however, afford you the means to prototype your ghci ideas
quickly, and to build yourself a library of useful definitions for working
with ghci. Please remember to share any interesting ideas/code at the 
ghci wiki page

    http://www.haskell.org/haskellwiki/Ghci

(once haskell wiki access is resurrected)

Claus



More information about the Glasgow-haskell-users mailing list