如何一次性搜索许多功能的类型

use*_*526 7 haskell ghci

我如何可以搜索类型length, take, drop, splitAt, !!,并replicate全部一气呵成,没有进入:t length,:t take,:t drop,等等,所有的这些功能呢?

Dan*_*ner 11

ghci包含一个:def命令.该命令具有形式:def <name> <function>,其中<name>是要定义的新命令,并且<function>是类型的Haskell函数,该函数String -> IO String说明如何将参数转换为新命令到现有的命令链中.我们可以利用这个优势:我们将创建一个新命令:manyt,它将获取一个名称列表并:t在每个命令上运行.为简单起见,我会分开空格; 但是如果你想要求许多表达式的类型而不仅仅是名称,你可能想要做一些更复杂的分界/解析.所以,在~/.ghci,添加如下这样的一行:

:def manyt (\s -> Prelude.return (Prelude.unlines [":t " Prelude.++ n | n <- Prelude.words s]))
Run Code Online (Sandbox Code Playgroud)

(过度Prelude限定是这样的,即使-XNoImplicitPrelude启用它也能正常工作.)试一试:

> :manyt length take drop splitAt (!!) replicate
length :: Foldable t => t a -> Int
take :: Int -> [a] -> [a]
drop :: Int -> [a] -> [a]
splitAt :: Int -> [a] -> ([a], [a])
(!!) :: [a] -> Int -> a
replicate :: Int -> a -> [a]
Run Code Online (Sandbox Code Playgroud)