功能
GHC 6.12.1
Mac OS X 10.6.4 x64
MacBook Pro
问题
我在使用let
语法时遇到问题。以下代码拒绝编译:
module Main where
main = let x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
我尝试了y = 2
和z = 3
中的标签。没有骰子。
(不受欢迎的)解决方案
我获得编译代码的唯一方法是
let
子句替换where
子句。答案 0 :(得分:16)
正确的代码:
module Main where
main = let
x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
答案 1 :(得分:11)
您无法使用标签正确控制缩进,因为标签的大小未定义。
因此,请勿在Haskell中使用制表符。他们是邪恶的。
答案 2 :(得分:3)
将let-block中的每个声明缩进到相同的程度。同样好的形式是将'in'和'let'缩进到同一级别。例如..
main = let x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
答案 3 :(得分:2)
就个人而言,我在每行的末尾加上分号
module Main where
main = let x = 1 ;
y = 2 ;
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
答案 4 :(得分:1)
如果您在源代码中坚持使用TAB字符,则会进行以下编译:
module Main where
main =
let x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
其中所有前导空格都是一个或两个TAB,let
和x = 1
之间的空格也是TAB。在vi的list mode中查看以显示TAB和行尾:
module Main where$ $ main =$ ^Ilet^Ix = 1$ ^I^Iy = 2$ ^I^Iz = 3$ ^Iin putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z$
如果你切换到空格,你的生活将变得更加简单,你的代码会更漂亮。