在Haskell中解析错误

sen*_*nel 0 haskell parse-error

以下代码:

import IO
import System(getArgs)

main = do
    args <- getArgs
    let l = length args
    if l == 0
        putStrLn "foo"
    else
        putStrLn "bar"
Run Code Online (Sandbox Code Playgroud)

为if-else子句生成解析错误.我尝试使用花括号无济于事.救命!

eph*_*ent 5

只是为了证明我对Mark的答案的评论,

import System.Environment (getArgs)

main :: IO ()
main = do
    args <- getArgs
    let l = length args
    if l == 0
      then putStrLn "foo"
      else putStrLn "bar"
Run Code Online (Sandbox Code Playgroud)

是合法的Haskell.


随着GHC 7.0的{-# LANGUAGE RebindableSyntax #-}扩展,你甚至可以逃脱

class IfThenElse a b c d | a b c -> d where
    ifThenElse :: a -> b -> c -> d
instance IfThenElse Bool a a a where
    ifThenElse True = const
    ifThenElse False = flip const
instance (Monad m, IfThenElse a (m b) (m b) (m b))
      => IfThenElse (m a) (m b) (m b) (m b) where
    ifThenElse = liftM ifThenElse

main =
    if liftM null getArgs
      then putStrLn "foo"
      else putStrLn "bar"
Run Code Online (Sandbox Code Playgroud)

(从blog.n-sch.de无耻地勉强.)