在Haskell中,如果我导入模块,例如
import Data.List
我怎么知道Data.List提供的总方法是什么?
在Prelude中,我可以使用像Is there a way to see the list of functions in a module, in GHCI? ::
这样的完成Prelude> :m +Data.List
Prelude Data.List> Data.List.<PRESS TAB KEY HERE>
但是我希望在一个可以操作的列表中得到它,而不是在Prelude中。
这个问题不是关于builtins how to know in Haskell the builtins functions?,(我的意思是我们没有做任何导入的内置可用函数)
答案 0 :(得分:8)
您可以使用browse:
Prelude> :browse Data.List
它将列出所有可用的方法
答案 1 :(得分:1)
提供在线文档,例如here。但是,通常最佳做法是使用合格的导入,例如import qualified Data.List as L
或import Data.List (permutations, foldl')
来避免此问题。
答案 2 :(得分:1)
从您的Haskell程序中,您可以致电ghc-mod。这是一个能够做你想做的独立程序:
例如在终端中,命令ghc-mod browse Data.List
返回
all
and
any
break
concat
concatMap
cycle
...
如果您需要功能类型,可以使用ghc-mod browse -d Data.List
。它返回:
all :: Foldable t => (a -> Bool) -> t a -> Bool
and :: Foldable t => t Bool -> Bool
any :: Foldable t => (a -> Bool) -> t a -> Bool
break :: (a -> Bool) -> [a] -> ([a], [a])
concat :: Foldable t => t [a] -> [a]
concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
cycle :: [a] -> [a]
delete :: Eq a => a -> [a] -> [a]
...
您可以使用 cabal 安装 ghc-mod 。要从Haskell程序中调用 ghc-mod ,您可以follow the answers to this SO question。首选的是使用 shelly 库。
这是一个小型演示程序:
{-# LANGUAGE OverloadedStrings #-}
import Shelly
import qualified Data.Text as T
main :: IO ()
main = shelly $ silently $ do
out <- run "ghc-mod" ["browse", "-d", "Data.List"]
-- lns will containes a list of lines with the function names and their types
let lns = T.lines out
-- Here we print out the number of functions and the first 5 functions
liftIO $ putStrLn $ show $ Prelude.length lns
liftIO $ mapM_ (putStrLn .T.unpack) $ take 5 lns