Lưu ý rằng Core là ngôn ngữ được nhập rõ ràng, có thể gây khó khăn cho việc tạo từ các ngôn ngữ khác (trình kiểm tra loại GHC có i đặt tất cả các loại để nó không có vấn đề ở đó). Ví dụ, chức năng nhận diện thông thường (id = \x -> x :: forall a. a -> a)
trở thành
id = \(a :: *) (x :: a) -> a
nơi a
là một biến kiểu loại *
. Nó là một trình giữ chỗ ở mức độ hạn cho ràng buộc loại forall
. Tương tự, khi gọi số id
, bạn cần đặt loại đó làm đối số đầu tiên, do đó biểu thức Haskell (id 42)
được dịch thành (id Int 42)
. Các ràng buộc kiểu và kiểu ứng dụng như vậy sẽ không có mặt trong mã máy được sinh ra, nhưng chúng hữu ích để xác minh các phép biến đổi trình biên dịch là chính xác. Trên mặt tươi sáng, có thể chỉ cần tạo ra Haskell - nếu bạn có thể tạo mã theo cách sao cho GHC sẽ luôn có thể xác định loại của nó thì về cơ bản bạn chỉ sử dụng một tập con nhỏ của Haskell. . Cho dù điều này có thể làm việc phụ thuộc rất nhiều vào ngôn ngữ nguồn của bạn, mặc dù.
"Hiện tại (kể từ phiên bản 6.8.2), GHC không có khả năng đọc trong các tệp External Core dưới dạng nguồn". Bạn sẽ phải sản xuất một đại diện trong lõi _internal_ và chuyển nó cho GHC, tôi sợ. Vì lợi ích của bạn, tôi hy vọng tôi quá bi quan, nhưng tôi tin rằng bạn cần nhiều hơn một vài cuộc gọi đến ghc-api. –