【发布时间】:2009-11-09 03:23:24
【问题描述】:
我发现它在 Python 或 Common Lisp 中很方便,您可以在运行时列出库的内容。 Haskell 是否有相同的功能,尤其是在 GHCI 提示符下?
【问题讨论】:
标签: haskell
我发现它在 Python 或 Common Lisp 中很方便,您可以在运行时列出库的内容。 Haskell 是否有相同的功能,尤其是在 GHCI 提示符下?
【问题讨论】:
标签: haskell
GHCi 有一个:browse 命令来列出模块的内容:
Prelude> :browse Data.List
(\\) :: (Eq a) => [a] -> [a] -> [a]
delete :: (Eq a) => a -> [a] -> [a]
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteFirstsBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]
elemIndex :: (Eq a) => a -> [a] -> Maybe Int
...
Prelude> :help
...
:browse[!] [[*]<mod>] display the names defined by module <mod>
(!: more details; *: all top-level names)
...
【讨论】:
取决于您打算提取的确切信息...如果您的 GHCi 版本支持制表符补全,那么您可以使用它来列出命名空间的所有可用功能:
Prelude> :m +Data.List
Prelude Data.List> Data.List.<PRESS TAB KEY HERE>
Display all 109 possibilities? (y or n) <PRESS n>
Prelude Data.List> Data.List.un<PRESS TAB KEY HERE>
Data.List.unfoldr Data.List.unlines Data.List.unzip3 Data.List.unzip6
Data.List.union Data.List.unwords Data.List.unzip4 Data.List.unzip7
Data.List.unionBy Data.List.unzip Data.List.unzip5
【讨论】:
:m +Data.List 中已弃用。
import 语句在 ghci 中也允许。所以也可以写import Data.List。我怀疑 EliuX 知道将这种语法添加到 ghci 并假设旧语法已被弃用,但我不认为这是正确的。事实上,没有import 语句与 ghci 的 :m * 语法具有相同的效果,后者经常使用(即使只是隐式使用),所以 :m 被弃用确实令人惊讶。