Theo Haskell indentation rules, "Mã số là một phần của một số biểu thức sẽ được thụt lề thêm vào phần đầu biểu thức đó". Tuy nhiên, tôi thấy các ví dụ sau đây, mà dường như vi phạm các quy tắc trên, biên dịch mà không cần bất kỳ lỗi hoặc cảnh báo:vi phạm quy tắc thụt lề Haskell cho if-then-else
someFunction :: Bool -> Int -> Int -> Int
someFunction condition a b = if condition
then a - b
else a + b
Ở đây tôi định nghĩa một hàm someFunction
, cơ thể của nó là một khối if-then-else
. Theo quy tắc thụt đầu dòng, khối then
là một phần của cùng một biểu thức trong dòng đầu tiên, vì vậy nó phải được thụt lề xa hơn dòng trước đó của nó. Tuy nhiên, trong ví dụ của tôi, dòng thứ hai then
bắt đầu ở cùng một cột với dòng đầu tiên và ví dụ này biên dịch.
Tôi không chắc chắn những gì đang diễn ra ở đây. Tôi đang làm việc với GHC phiên bản 8.0.1.
Trong mã bắt buộc, tôi chỉ có thể đứng 'nếu cond sau đó \ n foo \ nelse \ n bar' phong cách thẩm mỹ, những người khác lái xe cho tôi hạt. Cảm ơn GHC dudes. – luqui