編集:なぜこの回答が反対投票されているのかを説明してくれた@interjayと@Antal Spector-Zabuskyに感謝します。彼らが書きました
ドキュメントは少し誤解を招くものです。値はGHCコンパイラにハードコードされます。48年後、あなたは確かに実際のコードが常にドキュメンテーションよりも優先されることを知っています。– interjay昨日@ andy256文書が悪いことは確かに正しく(実際、Franciscoが最初にこの質問をした理由の一部です)、あなたの混乱は理解できます。Haskellの重要な点は、これらのString値が実行時に変化する可能性がある場合、それは重大なバグとなるでしょう–変数は変更できません。これがIO型コンストラクタの重要性です。「外界」へのアクセスが許可されている計算を表し、その結果が変わる可能性があります。システムコールの作成は、IOアクションの良い例です。…[1/2] – Antal Spector-Zabusky 9時間前@ andy256…(別のIOアクションは「グローバルカウンターの更新」である可能性があります。)したがって、文字列を表示すると、文字列と通信できないことがわかります。フードの下のOS。そのため、おそらく驚くべきことに、Haskellに慣れていない場合、os :: Stringを実装してシステムコールを実行するのは簡単ではありません。そのような値は、基本的なHaskellでは実装できず、すべてのプログラマーがプログラムをどのように期待するかに違反します。動作し、場合によってはコンパイラとオプティマイザが作動する可能性もあります(理論上の問題ではありません。類似の問題が発生した場合、Stack Overflowの回答があります)。[2/2] –アンタルスペクターザブスキー そのため、おそらく驚くべきことに、Haskellに慣れていない場合、os :: Stringを実装してシステムコールを実行するのは簡単ではありません。そのような値は、基本的なHaskellでは実装できず、すべてのプログラマーがプログラムをどのように期待するかに違反します。動作し、場合によってはコンパイラとオプティマイザが作動する可能性もあります(理論上の問題ではありません。類似の問題が発生した場合、Stack Overflowの回答があります)。[2/2] –アンタルスペクターザブスキー そのため、おそらく驚くべきことに、Haskellに慣れていない場合、os :: Stringを実装してシステムコールを実行するのは簡単ではありません。そのような値は、基本的なHaskellでは実装できず、すべてのプログラマーがプログラムをどのように期待するかに違反します。動作し、場合によってはコンパイラとオプティマイザが作動する可能性もあります(理論上の問題ではありません。類似の問題が発生した場合、Stack Overflowの回答があります)。[2/2] –アンタルスペクターザブスキー コンパイラやオプティマイザが作動する可能性もあります(理論的な問題ではありません。類似の問題が発生した場合、Stack Overflowの回答があります)。[2/2] –アンタルスペクターザブスキー コンパイラやオプティマイザが作動する可能性もあります(理論的な問題ではありません。類似の問題が発生した場合、Stack Overflowの回答があります)。[2/2] –アンタルスペクターザブスキー
現在、2つの削除投票があります。私はそのプロセスがコースを取るようにしますが、それは実際にいくつかの価値があることを示唆しています。余談ですが、Haskellの初心者は私がした推論を簡単にたどることができるので、彼らの説明は質問が弱いことを示しており、答えもそうです。
元の答え:
私はHaskellプログラマではありませんが、すでに与えられた2つの回答は、OPがリンクしたドキュメントと一致しません。
ドキュメントの私の解釈は次のとおりです。
os :: String
-これにより、「プログラムが実行されているオペレーティングシステム」が表示されます。
これにより、情報を取得するためのシステムコールが発行されることを期待しています。プログラムがコンパイルされるシステムは、プログラムが実行されるシステムと異なる場合があるため、コンパイラーが挿入する値にすることはできません。コードが解釈されている場合、インタープリターは結果を提供できます。これは、システムコールを介して取得する必要があります。
arch :: String
-これにより、「プログラムが実行されているマシンアーキテクチャ」が表示されます。
この場合も、情報を取得するためのシステムコールが発行されることを期待しています。プログラムがコンパイルされるシステムは、プログラムが実行されるシステムと異なる場合があるため、コンパイラーが挿入する値にすることはできません。
compilerName :: String
-これにより、「プログラムのコンパイルまたは解釈に使用されたHaskell実装」が得られます。
この値は、コンパイラー/インタープリターによって確実に挿入されます。
compilerVersion :: String
-これにより、「compilerName
プログラムがコンパイルされた、または解釈されているバージョン」が表示されます。
この値は、コンパイラー/インタープリターによって確実に挿入されます。
最初の2つの呼び出しは入力を取得していると考えることもできますが、結果はオペレーティングシステムが保持する値から得られます。I / Oは通常、セカンダリストレージアクセスを指します。
IO
ラッパーがuname(3)
あります。hackage.haskell.org/ package