Haskell 2010 đảm bảo rằng nó tương đương với giá trị tương đương với chuỗi đã hợp nhất, nhưng không có gì để nói về cách biên dịch. Thật dễ dàng để kiểm tra với công cụ ghc-core
.
-- Test.hs
main = putStrLn $ "Hello " ++ "world"
và khi chúng ta chạy ghc-core Test.hs
[1 of 1] Compiling Main (Test.hs, Test.o)
==================== Tidy Core ====================
Result size of Tidy Core = {terms: 19, types: 23, coercions: 9}
main2 :: [Char]
[GblId,
Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
ConLike=False, WorkFree=False, Expandable=False,
Guidance=IF_ARGS [] 60 0}]
main2 = unpackCString# "Hello world"
...
và thấy rằng chuỗi đã được sáp nhập vào ngôn ngữ trung gian Core.
Chỉnh sửa: Để làm nổi bật thỏa thuận của tôi với các câu trả lời khác, không đảm bảo trình biên dịch sẽ thực hiện tất cả các chuỗi. Việc tuân thủ đặc tả Haskell không hàm ý nhiều về cách mọi thứ được biên dịch.
Nguồn
2013-07-07 15:23:37
cẩn thận về việc sử dụng "dump cốt lõi" để in mã lõi trung gian :-) – David
Tôi có thể đã truyền đạt ý thức nhân tạo về cách dễ dàng nhìn trộm lõi và học cách mọi thứ đang hoạt động ... nhưng! Tôi thường thấy nó không quá khó khăn. Chỉ cần nản lòng lúc đầu. –