Các hiển thị chức năng trong Haskell dường như không làm những gì nó nên:Haskell: Hiển thị hơi say lên?
Prelude> let str = "stack\n\noverflow"
Prelude> putStrLn str
stack
overflow
Prelude> show str
"\"Stack\\n\\n\\noverflow\""
Prelude>
Khi tôi tuyên bố chức năng, tôi thường đặt chữ ký kiểu như Hiện, mà không đối phó với dòng mới đúng . Tôi muốn nó xử lý \n
làm dòng mới, chứ không phải theo nghĩa đen "\n"
. Khi tôi thay đổi loại thành Chuỗi, các chức năng hoạt động tốt. Nhưng tôi sẽ phải thực hiện một chức năng riêng biệt cho các số nguyên, phao, vv, vv
Ví dụ, tôi có thể tuyên bố một chức năng:
foo :: (Show x) => x -> IO()
foo x = do
putStrLn $ show x
... và gọi nó theo cách này:
foo "stack\n\noverflow"
foo 6
foo [1..]
Làm cách nào để nhận lại hàm được mong đợi? I E. chức năng nào tương tự như show
nhưng có thể trả lại các chuỗi có chứa dòng mới?
Bạn có thể cung cấp cho chúng tôi trường hợp sử dụng cụ thể về điều này không? Nó sẽ làm cho hiểu ý định của bạn dễ dàng hơn. – Martijn
Bạn chỉ có thể thêm một kiểm tra để xem đầu vào có phải là một chuỗi không, và chỉ cần in nó. Kết hợp mẫu là một điều rất hữu ích. – Rayne
"show" giống như 'repr()' trong Python và 'inspect' trong Ruby, nếu bạn đã sử dụng những ngôn ngữ đó trước đây. –