如何知道导入中可用函数的完整列表是什么?

时间:2017-08-02 14:29:07

标签: haskell

在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?,(我的意思是我们没有做任何导入的内置可用函数)

3 个答案:

答案 0 :(得分:8)

您可以使用browse:

Prelude> :browse Data.List

它将列出所有可用的方法

答案 1 :(得分:1)

提供在线文档,例如here。但是,通常最佳做法是使用合格的导入,例如import qualified Data.List as Limport 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