EDIT: Terima kasih kepada @interjay dan @Antal Spector-Zabusky karena telah menjelaskan mengapa jawaban ini diturunkan. Mereka menulis
Dokumentasinya agak menyesatkan. Nilai-nilai tersebut di-hardcode ke dalam kompiler GHC. Setelah 48 tahun Anda pasti tahu bahwa kode aktual selalu mengalahkan dokumentasi. - interjay kemarin @ andy256 Anda memang benar bahwa dokumentasinya buruk (memang, itulah sebabnya mengapa Francisco mengajukan pertanyaan ini sejak awal), dan kebingungan Anda dapat dimengerti. Hal tentang Haskell adalah jika nilai-nilai String tersebut dapat bervariasi pada saat runtime, itu akan menjadi bug yang mengerikan - variabel tidak diizinkan untuk berubah. Ini adalah signifikansi dari konstruktor tipe IO - ini merupakan perhitungan yang diizinkan untuk mengakses "dunia luar", dan karenanya hasilnya dapat berubah. Membuat panggilan sistem adalah contoh yang baik dari tindakan IO. ... [1/2] - Antal Spector-Zabusky 9 jam yang lalu @ andy256 ... (Tindakan IO lainnya bisa jadi "memperbarui penghitung global".) Jadi ketika kita melihat sebuah String, kita tahu bahwa itu tidak dapat melakukan komunikasi dengan OS di bawah tenda. Inilah sebabnya, mungkin secara mengejutkan jika Anda tidak terbiasa dengan Haskell, tidak akan mudah untuk mengimplementasikan os :: String untuk melakukan panggilan sistem - nilai apa pun yang tidak dapat diterapkan di Haskell dasar, akan melanggar harapan setiap programmer tentang cara program bekerja, dan bahkan berpotensi meningkatkan kompiler dan pengoptimal (bukan masalah teoretis - ada jawaban Stack Overflow di mana orang mengalami masalah analog). [2/2] - Antal Spector-Zabusky Inilah sebabnya, mungkin secara mengejutkan jika Anda tidak terbiasa dengan Haskell, tidak akan mudah untuk mengimplementasikan os :: String untuk melakukan panggilan sistem - nilai apa pun yang tidak dapat diterapkan di Haskell dasar, akan melanggar harapan setiap programmer tentang cara program bekerja, dan bahkan berpotensi meningkatkan kompiler dan pengoptimal (bukan masalah teoretis - ada jawaban Stack Overflow di mana orang mengalami masalah analog). [2/2] - Antal Spector-Zabusky Inilah sebabnya, mungkin secara mengejutkan jika Anda tidak terbiasa dengan Haskell, tidak akan mudah untuk mengimplementasikan os :: String untuk melakukan panggilan sistem - nilai apa pun yang tidak dapat diterapkan di Haskell dasar, akan melanggar harapan setiap programmer tentang cara program bekerja, dan bahkan berpotensi meningkatkan kompiler dan pengoptimal (bukan masalah teoretis - ada jawaban Stack Overflow di mana orang mengalami masalah analog). [2/2] - Antal Spector-Zabusky dan bahkan berpotensi meningkatkan kompilator dan pengoptimal (bukan masalah teoretis - ada jawaban Stack Overflow di mana orang mengalami masalah analog). [2/2] - Antal Spector-Zabusky dan bahkan berpotensi meningkatkan kompilator dan pengoptimal (bukan masalah teoretis - ada jawaban Stack Overflow di mana orang mengalami masalah analog). [2/2] - Antal Spector-Zabusky
Saat ini memiliki dua penghapusan suara. Saya akan membiarkan proses itu mengambil jalannya saja, tetapi menyarankan itu sebenarnya memiliki beberapa nilai. Di samping catatan, penjelasan mereka menunjukkan bahwa pertanyaan itu lemah, dan begitu pula jawabannya, karena seorang pemula Haskell dapat dengan mudah mengikuti alasan yang saya lakukan.
Jawaban asli:
Saya bukan programmer Haskell, tetapi dua jawaban yang sudah diberikan tidak cocok dengan dokumentasi yang ditautkan oleh OP.
Interpretasi saya terhadap dokumentasi berikut.
os :: String
- Ini memberi Anda "Sistem operasi tempat program berjalan."
Saya berharap ini akan mengeluarkan panggilan sistem untuk mendapatkan informasi. Karena sistem, program yang dikompilasi mungkin berbeda dengan yang dijalankannya tidak dapat berupa nilai yang dimasukkan oleh kompiler. Jika kode ditafsirkan maka penerjemah dapat memberikan hasil, yang harus diperoleh melalui panggilan sistem.
arch :: String
- Ini memberi Anda "Arsitektur mesin tempat program berjalan."
Sekali lagi, saya berharap ini akan mengeluarkan panggilan sistem untuk mendapatkan informasi. Karena sistem, program yang dikompilasi mungkin berbeda dengan yang dijalankannya tidak dapat berupa nilai yang dimasukkan oleh kompiler.
compilerName :: String
- Ini memberi Anda "Implementasi Haskell dengan mana program ini disusun atau sedang ditafsirkan."
Nilai ini tentu saja dimasukkan oleh kompiler / interpreter.
compilerVersion :: String
- Ini memberi Anda "Versi compilerName
program yang dikompilasi atau sedang ditafsirkan."
Nilai ini tentu saja dimasukkan oleh kompiler / interpreter.
Meskipun Anda dapat mempertimbangkan dua panggilan pertama untuk mendapatkan input, hasilnya berasal dari nilai yang dipegang oleh Sistem Operasi. I / O umumnya mengacu pada akses penyimpanan sekunder.
IO
di sana, ada pembungkusuname(3)
tersedia di Hackage: hackage.haskell.org/package/bindings-uname