2011-02-08 13 views
1

私はHaskellにとってまったく新しく、自分が何をしているのかほとんど考えていません。私はいくつかのチュートリアルを読んでいて、今度はRoll your own IRC botの例を試してみようとしています。Haskellをコンパイルするときのエラー

私は上のGHCからコンパイル・エラーが発生します:エラーがある

clean  = drop 1 . dropWhile (/= ':') . drop 1 

irc.hs:34:11: parse error on input '=' 

私が間違って何をしましたか?

+4

この小さなスニペット以上を投稿する必要があります(先行する行にはおそらくエラーがあります)。 –

+2

'入力時の解析エラー'は、空白の問題を示す可能性があります...タブとスペースを混ぜていないことを確認してください。しかしTomMDが指摘しているように、もっと知る必要があります。 – stusmith

答えて

3

これはあなたが作業しているコードですか?

listen :: Handle -> IO() 
listen h = forever $ do 
    t <- hGetLine h 
    let s = init t 
    if ping s then pong s else eval h (clean s) 
    putStrLn s 
    where 
    forever a = a >> forever a 

    clean  = drop 1 . dropWhile (/= ':') . drop 1 

    ping x = "PING :" `isPrefixOf` x 
    pong x = write h "PONG" (':' : drop 6 x) 

cleanのあなたの定義はforeverの先行定義と同じ量だけインデントされていることを確認。 「自分のIRCボットをロールする」ページにありますが、おそらくあなたがコンパイルしようとしているコピーにはありません。

+1

文字を数えた場合、彼の定義が完全にインデントされていない場合は、(=)記号(表示されたコードから)が列11に表示されます。したがって、これが問題である可能性が高いです。 –

+0

それは問題なくOKです。永遠の行には4スペースのインデントがありましたが、クリーンな行にはインデントが付いていました。私はhaskellが空白に敏感だったという警官さえもしなかった。私のチュートリアルでそのセクションを見逃している必要があります。 – sipwiz

3

これは実際には問題ありません。あなたがGHCi/Hugsでこれを実行しているなら、あなたはIOにいるので、letが必要です。

Prelude> let clean  = drop 1 . dropWhile (/= ':') . drop 1 
Prelude> :t clean 
clean :: [Char] -> [Char] 
Prelude> 
+0

私はまた、提示されたとおりにコードを完全にコピーして、それ以外の空の.hsファイルに貼り付けました。 –

関連する問題