インターネットで and の定義を見つけましたが、and の実際の実装を見つけることができませんでした。コンピューターである種のプレリュード Haskell ファイルを検索しましたが、テキスト エディターで開くことができるものは何も返されませんでした。
3 に答える
次のように、 Hoogleを使用して Haskell 関数を検索できます。
http://www.haskell.org/hoogle/?hoogle=and
関数リンクは、関数が定義されたライブラリ モジュールに移動します。この場合、リンクは次の場所に移動and
します。
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:および
次に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
実際には 2 つの定義があることがわかります。1 つは Standard Prelude 定義であり、フラグを使用してコンパイルした場合にのみ有効になります。もう 1 つは、USE_REPORT_PRELUDE
Prelude が通常コンパイルされるときに使用される定義で、通常はより最適化されています。
Haskell のローカル ディストリビューション (おそらく Haskell Platform) でソース コードを見つけることは期待できません。代わりに、Hoogleにアクセスして関数を検索してください。必要な 1 つの方法は、その名前で検索し、and
その Haddock に移動して、[ソース] をクリックすることです。
Hoogle では、タイプ シグネチャで検索することもできます。[Bool] -> Bool
かなり頻繁にやっていることに気付くでしょう。
http://www.haskell.org/onlinereport/standard-prelude.htmlを見てください。
and
として定義されfoldr (&&) True
ます。