0

次のコード:

import IO
import System(getArgs)

main = do
    args <- getArgs
    let l = length args
    if l == 0
        putStrLn "foo"
    else
        putStrLn "bar"

if-else 句の解析エラーを生成します。中括弧を使用してみましたが、役に立ちませんでした。ヘルプ!

4

2 に答える 2

5

マークの答えに対する私のコメントを示すために、

import System.Environment (getArgs)

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

正当な 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"

(blog.n-sch.de から恥知らずに真似されました。)

于 2010-12-01T03:19:41.570 に答える
1

2 つの問題:

  1. in一部が欠落しています( let-in@ephemientの回答を参照(および受け入れ))

  2. then一部が欠落していますif-then-else

したがって、次のようになります。

import IO import System(getArgs)

main = do
    args <- getArgs
    let l = length args in
        if l == 0 then
            putStrLn "foo"
        else
            putStrLn "bar"
于 2010-12-01T02:18:47.607 に答える