EDITAR: Gracias a @interjay y @Antal Spector-Zabusky por explicar por qué se rechaza esta respuesta. Ellos escribieron
La documentación es un poco engañosa. Los valores están codificados en el compilador GHC. Después de 48 años, seguramente sabrá que el código real siempre supera la documentación. - Interjay ayer @ andy256 Tienes toda la razón de que la documentación es mala (de hecho, eso es parte de por qué Francisco hizo esta pregunta en primer lugar), y tu confusión es comprensible. Lo que pasa con Haskell es que si esos valores de cadena pueden variar en tiempo de ejecución, eso sería un error notorio: las variables no pueden cambiar. Este es el significado del constructor de tipo IO: representa un cálculo al que se le permite acceder al "mundo exterior" y, por lo tanto, uno cuyo resultado puede cambiar. Hacer una llamada al sistema es un buen ejemplo de una acción IO. ... [1/2] - Antal Spector-Zabusky hace 9 horas @ andy256 ... (Otra acción de E / S podría ser "actualizar un contador global".) Entonces, cuando vemos una Cadena, sabemos que no se puede comunicar con El sistema operativo bajo el capó. Esta es la razón por la cual, quizás sorprendentemente, si no está acostumbrado a Haskell, no sería fácil implementar os :: String para hacer una llamada al sistema: cualquier valor de este tipo no es implementable en Haskell básico, violaría las expectativas de cada programador de cómo los programas trabajo, y posiblemente incluso disparar el compilador y el optimizador (no es una preocupación teórica, hay respuestas de desbordamiento de pila donde las personas se encuentran con problemas análogos). [2/2] - Antal Spector-Zabusky Esta es la razón por la cual, quizás sorprendentemente, si no está acostumbrado a Haskell, no sería fácil implementar os :: String para hacer una llamada al sistema: cualquier valor de este tipo no es implementable en Haskell básico, violaría las expectativas de cada programador de cómo los programas trabajo, y posiblemente incluso disparar el compilador y el optimizador (no es una preocupación teórica, hay respuestas de desbordamiento de pila donde las personas se encuentran con problemas análogos). [2/2] - Antal Spector-Zabusky Esta es la razón por la cual, quizás sorprendentemente, si no está acostumbrado a Haskell, no sería fácil implementar os :: String para hacer una llamada al sistema: cualquier valor de este tipo no es implementable en Haskell básico, violaría las expectativas de cada programador de cómo los programas trabajo, y potencialmente incluso disparar el compilador y el optimizador (no es una preocupación teórica, hay respuestas de desbordamiento de pila donde las personas se encuentran con problemas análogos). [2/2] - Antal Spector-Zabusky y potencialmente incluso disparar el compilador y el optimizador (no es una preocupación teórica, hay respuestas de desbordamiento de pila donde las personas se encuentran con problemas análogos). [2/2] - Antal Spector-Zabusky y potencialmente incluso disparar el compilador y el optimizador (no es una preocupación teórica, hay respuestas de desbordamiento de pila donde las personas se encuentran con problemas análogos). [2/2] - Antal Spector-Zabusky
Actualmente tiene dos votos eliminados. Dejaré que el proceso siga su curso, pero sugiero que en realidad tiene algún valor. En una nota al margen, sus explicaciones muestran que la pregunta era débil, y también lo son las respuestas, ya que un novato de Haskell podría seguir fácilmente el razonamiento que hice.
Respuesta original:
No soy un programador de Haskell, pero las dos respuestas ya dadas no coinciden con la documentación que el OP enlazó.
Mi interpretación de la documentación sigue.
os :: String - Esto le proporciona "El sistema operativo en el que se ejecuta el programa".
Espero que esto emita una llamada al sistema para obtener la información. Debido a que el sistema en el que se compila el programa puede ser diferente del que se ejecuta, no puede ser un valor insertado por el compilador. Si el código se está interpretando, el intérprete puede proporcionar el resultado, que debe obtenerse a través de una llamada al sistema.
arch :: String - Esto le proporciona "La arquitectura de la máquina en la que se ejecuta el programa".
Nuevamente, espero que esto emita una llamada al sistema para obtener la información. Debido a que el sistema en el que se compila el programa puede ser diferente del que se ejecuta, no puede ser un valor insertado por el compilador.
compilerName :: String - Esto le brinda "La implementación de Haskell con la que se compiló el programa o se está interpretando".
Este valor es ciertamente insertado por el compilador / intérprete.
compilerVersion :: String- Esto le proporciona "La versión compilerNamecon la que se compiló el programa o se está interpretando".
Este valor es ciertamente insertado por el compilador / intérprete.
Si bien puede considerar que las dos primeras llamadas obtienen información, el resultado proviene de los valores que posee el sistema operativo. E / S generalmente se refiere al acceso al almacenamiento secundario.
IOallí, hay un envoltoriouname(3)disponible en Hackage: hackage.haskell.org/package/bindings-uname