편집 :이 답변이 다운 투표 된 이유를 설명해 주신 @interjay 및 @Antal Spector-Zabusky에게 감사드립니다. 그들은 썼다
설명서가 약간 잘못되었습니다. 값은 GHC 컴파일러에 하드 코딩됩니다. 48 년이 지난 후에는 실제 코드가 항상 문서보다 우선합니다. – interjay 어제 @ andy256 당신은 문서가 잘못되었다는 것이 절대적으로 옳습니다 (실제로 Francisco가이 질문을 한 이유 중 하나입니다). Haskell에 대한 것은 런타임에 이러한 문자열 값이 다를 수있는 경우 심각한 버그 일 수 있습니다. 변수를 변경할 수 없습니다. 이는 IO 유형 생성자의 중요성입니다. "외부 세계"에 액세스 할 수있는 계산과 결과가 변경 될 수있는 계산을 나타냅니다. 시스템 호출은 IO 조치의 좋은 예입니다. … [1/2] – Antal Spector-Zabusky 9 시간 전 @ andy256… (또 다른 IO 동작은 "전역 카운터 업데이트"일 수 있습니다.) 따라서 String을 볼 때 어떤 통신도 할 수 없다는 것을 알고 있습니다 후드 아래의 OS. 그렇기 때문에 놀랍게도 Haskell에 익숙하지 않은 경우 시스템 호출을 수행하기 위해 os :: String을 구현하는 것이 쉽지 않을 것입니다. 기본 Haskell에서는 이러한 값을 구현할 수 없습니다. 컴파일러와 옵티 마이저를 작동시킬 수도 있습니다 (이론적 인 문제는 아닙니다. 사람들이 비슷한 문제를 겪는 스택 오버플로 답변이 있습니다). [2/2] – Antal Spector-Zabusky 그렇기 때문에 놀랍게도 Haskell에 익숙하지 않은 경우 시스템 호출을 수행하기 위해 os :: String을 구현하는 것이 쉽지 않을 것입니다. 기본 Haskell에서는 이러한 값을 구현할 수 없습니다. 컴파일러와 옵티 마이저를 작동시킬 수도 있습니다 (이론적 인 문제는 아닙니다. 사람들이 비슷한 문제를 겪는 스택 오버플로 답변이 있습니다). [2/2] – Antal Spector-Zabusky 그렇기 때문에 놀랍게도 Haskell에 익숙하지 않은 경우 시스템 호출을 수행하기 위해 os :: 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 볼 수는 : hackage.haskell.org/package/bindings-uname