我正在通过学习Haskell来学习函数式编程。为了练习语法和构造非常简单的函数,我创建了一个小文件;让我们说它看起来像这样:
removeOdd nums =
if null nums
then []
else
if (mod (head nums) 2) == 0 --is even?
then (head nums) : (removeOdd (tail nums))
else removeOdd (tail nums)
removeOddGuards [] = []
removeOddGuards (x : xs)
| mod x 2 == 0 = x : (removeOdd xs)
| otherwise = removeOdd xs
double nums = case nums of
[] -> []
(x : xs) -> (2 * x) : (double xs)
我想定义一个函数,它返回文件中定义的所有函数名称的列表,如:
["removeOdd", "removeOddGuards", "double"]
我想我会在面向对象的语言中实现反射,但是如果在函数式编程中这甚至是一个有效的概念,我还是太天真了。
出于实际目的,我希望能够调用这样的函数来查看我在此练习文件中创建的函数的基本索引。
答案 0 :(得分:3)
假设你不想定义和执行一个函数,但你只想看看你在文件中定义了哪些函数。说上面的定义是foo.hs
。您可以通过以下方式查看已定义的功能:
$ ghci foo.hs
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling Main ( foo.hs, interpreted )
Ok, modules loaded: Main.
*Main> :browse
removeOdd :: Integral a => [a] -> [a]
removeOddGuards :: Integral a => [a] -> [a]
double :: Num t => [t] -> [t]
*Main>