함수 및 데이터 형식 등에 대한 형식 클래스 제약 조건을 내재하는 것은 불가능한 것처럼 보입니다. 그러나 ghci가이를 수행합니다.어떻게해야합니까? ghci의 모든 내성적 인 정보에 액세스 할 수 있습니까?
Prelude> :t show
show :: (Show a) => a -> String
그래서 ... 어떻게 든 그것을 인쇄하기 때문에 형식 클래스 제약 조건을 알고 있습니다. 어떻게 그 일을하고 있니?
함수 및 데이터 형식 등에 대한 형식 클래스 제약 조건을 내재하는 것은 불가능한 것처럼 보입니다. 그러나 ghci가이를 수행합니다.어떻게해야합니까? ghci의 모든 내성적 인 정보에 액세스 할 수 있습니까?
Prelude> :t show
show :: (Show a) => a -> String
그래서 ... 어떻게 든 그것을 인쇄하기 때문에 형식 클래스 제약 조건을 알고 있습니다. 어떻게 그 일을하고 있니?
정보는 인터페이스 파일 (module.hi
)에 보관됩니다. 실행중인 프로그램에서이 파일을 얻으려면 .hi
파일을 찾아서 읽어야합니다 (Hackage의 Hint 패키지가이 작업을 수행합니다). ghci
은 바이트 코드로 컴파일하는 과정에서 .hi
개의 파일을 읽으므로 해당 정보를 편리하게 사용할 수 있습니다.
.hi
파일의 내용은 ghc --show-iface module.hi
입니다.
별도로 컴파일 된 "바이너리"는 ".hi"파일입니다. 여기에는 모든 유형 정보가 들어있어이를 사용하는 코드를 작성할 수 있으며 모든 유형 클래스 정의 및 모든 유형 클래스 인스턴스를 포함하므로 코드에서이 유형 정보를 사용하거나 확장 할 수 있습니다.
따라서 ghci는 소스를 ".hi"로 컴파일하고 모든 종속 ".hi"파일을로드합니다. 이것은 모든 유형의 완벽한 지식을 제공합니다. ghci가 할 필요가없는 것은 가져온 모든 모듈의 소스로 돌아가는 것입니다. ".hi"파일 만 필요합니다.