如何一次性搜索length, take, drop, splitAt, !!
和replicate
的所有类型,而无需输入:t length
,:t take
,:t drop
等,所有这些功能?
答案 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]