如何查看"和"的实现代码?

Let*_*thi 7 haskell

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

Gab*_*lez 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
Run Code Online (Sandbox Code Playgroud)

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

  • 好奇心:拥有这两个定义有什么意义? (3认同)