2011-02-08 125 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

你應該發佈超過這個小片段(前面的行可能有錯誤)。 – 2011-02-08 06:03:12

+2

'輸入解析錯誤'可能表示空白問題...檢查您沒有混合製表符和空格。但正如TomMD指出的那樣,我們需要了解更多信息。 – stusmith 2011-02-08 08:34:44

回答

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 bot」頁面,但大概不在你正在編譯的副本中。

3

這其實很好。如果你在GHCi/Hugs中運行這個,你在IO中,所以你需要一個let。

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

我也將他的代碼複製粘貼到一個空的.hs文件中,並且編譯得很好。 – 2011-02-08 18:40:08