2017-06-11 3 views
0

私はHaskellでidentantionを使用する方法を知っているが、私は、このコードに問題があると思う:インデントエラー?

module TestTSPGA where 

import TSPGA -- in this we have the type used on the second function 
import Data.List 

main :: IO() 
main = do 
      contents <- readFile "aaaa.txt" 
      let s = map words (lines contents) 
      let cities = map stringsToCity s 

stringsToCity :: [String] -> City 
stringsToCity [c, x, y] = (read c, (read x, read y)) 

エラーがStackOverflowの中にn個の質問の同じですが、私はこのn回を修正するためにしようと試みたが、ドン成功していた。

エラー:

C:\ Users \ユーザーxxxは\デスクトップ\ TestTSPGA.hs:11:10:エラー:

'行う' ブロックの最後の文でなければなりません表現

let cities = map stringsToCity s

私は何かを学んだことがあると思うとき、私はハズケルの初心者です。言語は私に新しいエラーを示します。

+1

これはインデントエラーではありません。問題は 'IO'モナドを使うことですが、あなたの最後の行はモナドの行ではありません。何かを印刷したいですか? –

答えて

2

ブロックはlet(またはx <- ...)で終了することはできません。バインドする変数で何かしたいことがあります。

main = do 
    contents <- readFile "aaaa.txt" 
    let s = map words (lines contents) 
    let cities = map stringsToCity s 
    return() 

は、きっとあなたの mainを継続する方法についていくつかの良いアイデアを持っている:

最も簡単な修正は何もしないことです。例えば。 print citiesとするか、もっと計算してください。

+0

これは非常に簡単なテストです、デバッグのように、私はこのコードで関数を複写する必要があります。私は式の説明を理解しました。ありがとう! –

関連する問題