编译Haskell时出错

时间:2011-02-08 05:35:53

标签: haskell

我是Haskell的新手,对我正在做的事情一无所知。我一直在阅读一些教程,现在正试图逐步完成Roll your own IRC bot示例。

我从ghc上得到了编译错误:

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

错误是:

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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

这实际上很好。如果你在GHCi / Hugs中运行它,那么你就在IO中,所以你需要一个let。

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

答案 1 :(得分: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机器人”页面上,但可能不在你想要编译的副本中。