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