次のコード:
import IO
import System(getArgs)
main = do
args <- getArgs
let l = length args
if l == 0
putStrLn "foo"
else
putStrLn "bar"
if-else 句の解析エラーを生成します。中括弧を使用してみましたが、役に立ちませんでした。ヘルプ!
次のコード:
import IO
import System(getArgs)
main = do
args <- getArgs
let l = length args
if l == 0
putStrLn "foo"
else
putStrLn "bar"
if-else 句の解析エラーを生成します。中括弧を使用してみましたが、役に立ちませんでした。ヘルプ!
マークの答えに対する私のコメントを示すために、
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 から恥知らずに真似されました。)
2 つの問題:
句の@ephemientの回答を参照(および受け入れ))in
一部が欠落しています( let-in
句の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"