packages feed

lambdabot-4.0: Plugin/Haddock.hs

--
-- | Hackish Haddock module.
--
module Plugin.Haddock (theModule) where

import Plugin

import qualified Data.Map as M
import qualified Data.ByteString.Char8 as P

PLUGIN Haddock

type HaddockState = M.Map P.ByteString [P.ByteString]

instance Module HaddockModule HaddockState where
    moduleCmds      _ = ["index"]
    moduleHelp    _ _ = "index <ident>. Returns the Haskell modules in which <ident> is defined"
    moduleDefState  _ = return M.empty
    moduleSerialize _ = Just $ Serial { deserialize = Just . readPacked
                                      , serialize   = const Nothing }
    process_ _ _ rest = do
       assocs <- readMS
       return . (:[]) $ maybe "bzzt" (concatWith ", " . (map P.unpack))
                                     (M.lookup (P.pack (stripParens rest)) assocs)

-- | make \@index ($) work.
stripParens :: String -> String
stripParens = reverse . dropWhile (==')') . reverse . dropWhile (=='(')