で解析エラー次のコード:ハスケル
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からaped。)
2つの問題:
あなたはthe のlet-in
clausein
一部が欠落している(参照してください(と受け入れる)@ephemient's answer)
then
一部が欠落しています
そうですね、ただ、マークの答えに私のコメントを実証する
import IO import System(getArgs)
main = do
args <- getArgs
let l = length args in
if l == 0 then
putStrLn "foo"
else
putStrLn "bar"
おかげでたくさん! – sentinel
'do'の中には' let'の後に 'in'は必要ありません。 'do'のインデントに戻ります。 http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-470003.14を参照してください。 – ephemient