【问题标题】:How to know what are the full list of function availlable in an import?如何知道导入中可用的完整功能列表是什么?
【发布时间】:2017-08-02 14:29:07
【问题描述】:

如果我导入一个模块,例如在 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 中。

这个问题不是关于内置函数how to know in Haskell the builtins functions?,(我的意思是内置函数我们没有做任何导入)

【问题讨论】:

  • “不在前奏曲中”是什么意思?你的意思是不在 GHCi 中?
  • 要以任何类型的 Haskell 数据结构访问模块的导入,您必须使用 GHC API(有关 GHC API 的最新版本文档,请参阅 here,这可能与无论您使用什么版本)。这是一个相当复杂和复杂的过程,可能有一种更简单的方法来完成你想要完成的任何事情(但你没有说明那是什么)。

标签: list haskell


【解决方案1】:

您可以使用浏览:

Prelude> :browse Data.List

它将列出所有可用的方法

【讨论】:

    【解决方案2】:

    从您的 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
    

    【讨论】:

    • 目前您无法使用 GHC 8.0.1 或 8.2.1 安装 ghc-mod。但是它可以与 GHC 8.0.2 顺利安装。
    • 我正在尝试使用它,但 ghc-mod 已弃用 haskell-ide-engine 已弃用 haskell-language-server
    【解决方案3】:

    有可用的在线文档,例如here。不过,通常最好的做法是使用合格的导入,例如 import qualified Data.List as Limport Data.List (permutations, foldl') 来避免这个问题。

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2023-02-08
      • 2016-09-14
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多