2017-08-02 67 views
7

在Haskell中,如果我導入一個模塊,例如如何知道導入中可用函數的完整列表?

import Data.List 

我怎麼知道Data.List提供的總方法是什麼?

在前奏我喜歡這裏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> 

但我想在這是可以操作,而不是在前奏列表來得到這個。

這個問題是不是內建how to know in Haskell the builtins functions?,(我的意思是建宏我們有可用的功能沒有做任何進口)

+0

的可能的複製[如何在Haskell知道內建功能?](https://stackoverflow.com/questions/45463573/how-to-know- in-haskell-the-builtins-functions) – amalloy

+0

你是什麼意思「不在Prelude」?你是不是在GHCi? – 4castle

+0

要訪問任何類型的Haskell數據結構的模塊導入,您必須使用GHC API(請參見[這裏](https://downloads.haskell.org/~ghc/latest/docs/html/libraries/ghc -8.2.1/index.html)獲取GHC API文檔的最新版本,與您使用的任何版本可能有很大差異)。這是一個相當複雜和複雜的過程,可能有一種更簡單的方式來完成你正在努力完成的任何事情(但你沒有說明是什麼)。 – user2407038

回答

8

您可以使用瀏覽:

Prelude> :browse Data.List 

它會列出所有可用的

方法
1

有在線文檔可用,例如here。儘管如此,通常使用合格的進口產品如import qualified Data.List as Limport Data.List (permutations, foldl')來避免此問題。

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] 
... 

可以安裝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 
+0

目前您無法使用GHC 8.0.1或8.2.1安裝_ghc-mod_。但是它可以安裝GHC 8.0.2。 – Jogger

相關問題