如何查看“和”的实现代码?

时间:2012-09-22 14:51:21

标签: haskell

我在互联网上找到了和的定义,但我找不到和的实际实现。我确实在我的计算机上搜索了某种前奏的haskell文件,但它没有返回任何可以在文本编辑器中打开的内容。

3 个答案:

答案 0 :(得分:19)

您可以使用Hoogle搜索Haskell函数,如下所示:

http://www.haskell.org/hoogle/?hoogle=and

函数链接将您带到定义函数的库模块,在这种情况下,and的链接将我们带到此处:

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:and

然后单击功能名称右侧的Source链接,它会将您带到该功能的源。对于and的情况,它将我们链接到此处:

http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-List.html#and

and                     :: [Bool] -> Bool
or                      :: [Bool] -> Bool
#ifdef USE_REPORT_PRELUDE
and                     =  foldr (&&) True
or                      =  foldr (||) False
#else
and []          =  True
and (x:xs)      =  x && and xs
or []           =  False
or (x:xs)       =  x || or xs
#endif

您会看到and实际上有两个定义。一个是标准前奏定义,只有在使用USE_REPORT_PRELUDE标志进行编译时才会启用,另一个是Prelude通常编译的定义,通常会进行更优化。

答案 1 :(得分:2)

你不能指望在Haskell的本地发行版中找到源代码 - 这可能是Haskell Platform。相反,转到Hoogle并搜索该功能。一种方法,就是你想要的,就是按名称搜索and,转到它的Haddock,然后点击“source”。

在Hoogle上,您还可以按类型签名进行搜索,即。 [Bool] -> Bool你可能会发现自己经常这样做。

答案 2 :(得分:1)

查看http://www.haskell.org/onlinereport/standard-prelude.html

and定义为foldr (&&) True