ハスケルエラー:入力「=」で解析エラーが発生しました
-
26-09-2019 - |
質問
仕様
GHC6.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
句。
解決
Saizanは#haskellにlet式での割り当てを整列するために持っている、の を聞かせていないことを自分自身を説明しています。限り割り当てがラインアップとして、それはハードのタブまたはソフトタブを使用しても大丈夫です。
正しいコード:
module Main where
main = let
x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
他のヒント
タブのサイズが定義されていないので、あなたは、単にタブと正しくインデントを制御することはできません。
そのため、Haskellではタブを使用しないでください。彼らだ悪ます。
インデント同程度にLETブロック内の各宣言。また、良い形は「で」インデントと同じレベルに「せ」することです。例えば..
main = let x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
個人的に、私はそれぞれの行の末尾にセミコロンを置く
module Main where
main = let x = 1 ;
y = 2 ;
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
あなたは、あなたのソースにタブ文字で次のコンパイルを主張する場合:
module Main where
main =
let x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
すべての先頭の空白が1つまたは2つのタブ、let
とx = 1
間の空白であるはまた、TABです。タブや行末を明示的にするためのVIのリストモードの中で見て:
module Main where$ $ main =$ ^Ilet^Ix = 1$ ^I^Iy = 2$ ^I^Iz = 3$ ^Iin putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z$
あなたがスペースに切り替える場合はあなたの人生ははるかに簡単とあなたのコードをきれいになります。
所属していません StackOverflow