Haskell似乎对我的主要功能中的空白非常挑剔。
以下编译很好
module Main where
import System.Environment
main :: IO()
main = do args <- getArgs
putStrLn ("Hello, " ++ args !! 0)
但是以下两个程序给我一个解析错误
module Main where
import System.Environment
main :: IO()
main = do args <- getArgs
putStrLn ("Hello, " ++ args !! 0)
和
module Main where
import System.Environment
main :: IO()
main = do args <- getArgs
putStrLn ("Hello, " ++ args !! 0)
似乎printStrLn
必须与args
排成一行,否则haskell会合适。这似乎没必要。为什么haskell会这样做?
答案 0 :(得分:2)
要添加到Mephy’s answer,而Haskell,用通常的Haskell样式编写, 关心缩进(在规范中称为'layout'),您可以用样式编写代码这样就会忽略缩进:
module Main where {
import System.Environment;
main :: IO ();
main = do {
args <- getArgs;
putStrLn ("Hello, " ++ args !! 0)
}
}
您通常不会将此样式用于整个模块。偶尔你会看到它被用于一个简短的do
或let
块或其他东西(你可以混合两种样式),但大多数人都依赖布局。
答案 1 :(得分:1)
Haskell确实关心缩进,就像Python一样。使用do
构造时,必须将所有操作放在同一列中。请注意,您还需要使用空格,而不是标签,因为&#39; \ t&#39;通常会被忽略。