แก้ไข: ขอบคุณ @interjay และ @Antal Spector-Zabusky สำหรับการอธิบายว่าทำไมคำตอบนี้จึงถูกลดระดับลง พวกเขาเขียน
เอกสารประกอบนั้นทำให้เข้าใจผิดเล็กน้อย ค่าจะถูก hardcoded ลงในคอมไพเลอร์ GHC หลังจาก 48 ปีคุณจะรู้ว่ารหัสจริงสำคัญกว่าเอกสารเสมอ - interjay เมื่อวานนี้ @ andy256 คุณถูกต้องจริง ๆ ว่าเอกสารนั้นไม่ดี (แน่นอนว่าเป็นส่วนหนึ่งของเหตุผลที่ฟรานซิสโกถามคำถามนี้ตั้งแต่แรก) และความสับสนของคุณเป็นที่เข้าใจ สิ่งที่เกี่ยวกับแฮสเค็ลล์คือถ้าค่าของสตริงเหล่านั้นอาจแตกต่างกันไปในขณะรันไทม์นั่นจะเป็นข้อผิดพลาดที่ร้ายแรง - ไม่อนุญาตให้เปลี่ยนตัวแปร นี่คือความสำคัญของคอนสตรัคเตอร์ประเภท IO - เพราะมันหมายถึงการคำนวณที่ได้รับอนุญาตให้เข้าถึง "โลกภายนอก" ดังนั้นสิ่งที่ผลลัพธ์สามารถเปลี่ยนแปลงได้ การเรียกใช้ระบบเป็นตัวอย่างที่ดีของการดำเนินการ IO … [1/2] - Antal Spector-Zabusky 9 ชั่วโมงที่ผ่านมา @ andy256 … (การกระทำของ IO อีกอย่างคือ "อัปเดตตัวนับทั่วโลก") ดังนั้นเมื่อเราเห็นสตริงเรารู้ว่ามันไม่สามารถทำการสื่อสารใด ๆ กับ ระบบปฏิบัติการภายใต้ประทุน นี่อาจเป็นเหตุผลที่น่าแปลกใจหากคุณไม่คุ้นเคยกับ Haskell มันไม่ง่ายเลยที่จะนำระบบปฏิบัติการ :: String ไปใช้ในการเรียกใช้ระบบ - ค่าดังกล่าวไม่สามารถใช้งานได้ใน Haskell พื้นฐานจะเป็นการละเมิดความคาดหวังของโปรแกรมเมอร์ทุกคน ทำงานและอาจรวมถึงการรวบรวมคอมไพเลอร์และออพติไมเซอร์ (ไม่ใช่ความกังวลในเชิงทฤษฎี - มีคำตอบสแต็คโอเวอร์โฟลว์ที่ผู้คนพบเจอกับปัญหาแบบอะนาล็อก) [2/2] - Antal Spector-Zabusky นี่อาจเป็นเหตุผลที่น่าแปลกใจหากคุณไม่คุ้นเคยกับ Haskell มันไม่ง่ายเลยที่จะนำระบบปฏิบัติการ :: String ไปใช้ในการเรียกใช้ระบบ - ค่าดังกล่าวไม่สามารถใช้งานได้ใน Haskell พื้นฐานจะเป็นการละเมิดความคาดหวังของโปรแกรมเมอร์ทุกคน ทำงานและอาจรวมถึงการรวบรวมคอมไพเลอร์และออพติไมเซอร์ (ไม่ใช่ความกังวลในเชิงทฤษฎี - มีคำตอบสแต็คโอเวอร์โฟลว์ที่ผู้คนพบเจอกับปัญหาแบบอะนาล็อก) [2/2] - Antal Spector-Zabusky นี่อาจเป็นเหตุผลที่น่าแปลกใจหากคุณไม่คุ้นเคยกับ Haskell มันไม่ง่ายเลยที่จะนำระบบปฏิบัติการ :: String ไปใช้ในการเรียกใช้ระบบ - ค่าดังกล่าวไม่สามารถใช้งานได้ใน Haskell พื้นฐานจะเป็นการละเมิดความคาดหวังของโปรแกรมเมอร์ทุกคน ทำงานและอาจรวมถึงการรวบรวมคอมไพเลอร์และออพติไมเซอร์ (ไม่ใช่ความกังวลในเชิงทฤษฎี - มีคำตอบสแต็คโอเวอร์โฟลว์ที่ผู้คนพบเจอกับปัญหาแบบอะนาล็อก) [2/2] - Antal Spector-Zabusky และอาจถึงขั้นเดินทางไปยังคอมไพเลอร์และออพติไมเซอร์ (ไม่ใช่ข้อกังวลทางทฤษฎี - มีคำตอบสแต็คโอเวอร์โฟลว์ที่ผู้คนพบเจอปัญหาแบบอะนาล็อก) [2/2] - Antal Spector-Zabusky และอาจถึงขนาดคอมไพเลอร์และออพติไมเซอร์ (ไม่ใช่ความกังวลในเชิงทฤษฎี - มีคำตอบสแต็คโอเวอร์โฟลว์ที่ผู้คนพบเจอกับปัญหาแบบอะนาล็อก) [2/2] - Antal Spector-Zabusky
ขณะนี้มีการลบคะแนนสองรายการ ฉันจะให้กระบวนการนั้นเป็นเรื่องแน่นอน แต่แนะนำว่ามันมีค่าจริง ในบันทึกด้านข้างคำอธิบายของพวกเขาแสดงให้เห็นว่าคำถามนั้นอ่อนแอและเป็นคำตอบเช่นกันเนื่องจากมือใหม่ของ Haskell สามารถติดตามเหตุผลที่ฉันทำได้อย่างง่ายดาย
คำตอบเดิม:
ฉันไม่ใช่โปรแกรมเมอร์ของ Haskell แต่คำตอบสองคำตอบที่ได้รับแล้วไม่ตรงกับเอกสารที่ OP เชื่อมโยง
การตีความเอกสารของฉันมีดังนี้
os :: String
- สิ่งนี้จะให้ "ระบบปฏิบัติการที่โปรแกรมกำลังทำงานอยู่"
ฉันคาดหวังว่านี่จะเป็นการเรียกใช้ระบบเพื่อรับข้อมูล เนื่องจากระบบที่คอมไพล์โปรแกรมอาจแตกต่างจากระบบที่รันอยู่จึงไม่สามารถใส่ค่าโดยคอมไพเลอร์ หากรหัสถูกตีความแล้วล่ามสามารถให้ผลลัพธ์ซึ่งจะต้องได้รับผ่านการเรียกของระบบ
arch :: String
- สิ่งนี้จะให้ "สถาปัตยกรรมเครื่องที่โปรแกรมกำลังทำงาน"
ฉันคาดหวังอีกครั้งว่านี่จะเป็นการเรียกใช้ระบบเพื่อรับข้อมูล เนื่องจากระบบที่คอมไพล์โปรแกรมอาจแตกต่างจากระบบที่รันอยู่จึงไม่สามารถใส่ค่าโดยคอมไพเลอร์
compilerName :: String
- สิ่งนี้จะให้คุณ "การใช้งาน Haskell ซึ่งโปรแกรมรวบรวมหรือกำลังตีความ"
ค่านี้ถูกแทรกโดยตัวแปล / ตัวแปล
compilerVersion :: String
- สิ่งนี้จะให้ "เวอร์ชันcompilerName
ที่โปรแกรมรวบรวมหรือกำลังตีความ"
ค่านี้ถูกแทรกโดยตัวแปล / ตัวแปล
ในขณะที่คุณอาจพิจารณาการเรียกสองครั้งแรกเพื่อรับอินพุตผลลัพธ์มาจากค่าที่ระบบปฏิบัติการถือไว้ โดยทั่วไปแล้ว I / O หมายถึงการเข้าถึงที่เก็บข้อมูลรอง
IO
ในนั้นมีเสื้อคลุมรอบ ๆuname(3)
พร้อมใช้งานบนแฮ็กเกอร์: hackage.haskell.org/package/bindings-uname