您好,有人可以告诉我此错误来自何处吗? 错误是 DKA-2-MKA.hs:39:5: “ do”块中的最后一条语句必须是表达式 argv <-getArgs
我已经检查了意图,但没有帮助
import System.Environment
import System.Console.GetOpt
import Data.Maybe ( fromMaybe )
data Options = Options { optI :: Boo , optT :: Bool } deriving (Show)
defaultOptions :: Options
defaultOptions = Options { optI = False, optT = False }
options :: [OptDescr (Options -> Options)]
options = [ Option ['i'] ["I"]
(NoArg (\ opts -> opts {optI = True}))
"I is true"
, Option ['t'] ["T"]
(NoArg (\ opts -> opts {optT = True}))
"T is true"
]
programOpt :: [String] -> IO (Options, String)
programOpt argv =
case getOpt Permute options argv of
(o, n, [] ) -> return (foldl (flip id) defaultOptions o, n)
(o, _, [] ) -> ioError $ userError $ exactlyone ++ usageInfo header options
(_, _, errs) -> ioError $ userError $ concat errs ++ usageInfo header options
where
header = "Usage [OPTIONS...] filename"
exactlyone = "One input"
main :: IO ()
main = do
argv <-getArgs
答案 0 :(得分:2)
DKA-2-MKA.hs:39:5:'do'块中的最后一条语句必须为表达式argv <-getArgs
39:5
指示错误在第39行第5列,看起来像argv <- getArgs
“表达式”是语法上有效,具有类型并且可以求值的一些代码。表达式的例子包括
let x = 1 in x + 2
if b then x else y
5
return ()
非表达式的示例包括:
(1
let x = 5
if b then x
argv <-getArgs
不是 表达式,它只是语法的一小部分,其本身并不有意义。您不能问ghci :t argv <-getArgs
。
为了了解为什么 do
块中的最后一行必须是表达式,请在此站点或其他位置搜索“ desugaring do notation haskell”(也许其他人可以推荐一个具体资源)。这也将出现在任何haskell入门书籍中。