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

时间:2018-03-16 11:42:33

标签: haskell ghci

如何一次性搜索length, take, drop, splitAt, !!replicate的所有类型,而无需输入:t length:t take:t drop等,所有这些功能?

1 个答案:

答案 0 :(得分:11)

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

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

(过多的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]