Ted*_*Ted 23 syntax monads haskell
我无法用块中的case表达式弄清楚这个语法问题do.
什么是正确的语法?
如果你能纠正我的例子并解释它是最好的.
module Main where
main = do
putStrLn "This is a test"
s <- foo
putStrLn s
foo = do
args <- getArgs
return case args of
[] -> "No Args"
[s]-> "Some Args"
Run Code Online (Sandbox Code Playgroud)
一点点更新.我的源文件是空格和制表符的混合,它引起了各种各样的问题.对于从Haskell开始的任何其他人来说,只是一个提示.如果您遇到问题,请检查源代码中的选项卡和空格.
wno*_*ise 29
return是一个(重载)函数,并不期望它的第一个参数是关键字.您可以使用括号:
module Main where
import System(getArgs)
main = do
putStrLn "This is a test"
s <- foo
putStrLn s
foo = do
args <- getArgs
return (case args of
[] -> "No Args"
[s]-> "Some Args")
Run Code Online (Sandbox Code Playgroud)
或使用方便的应用程序运算符($):
foo = do
args <- getArgs
return $ case args of
[] -> "No Args"
[s]-> "Some Args"
Run Code Online (Sandbox Code Playgroud)
Stylewise,我将其分解为另一个函数:
foo = do
args <- getArgs
return (has_args args)
has_args [] = "No Args"
has_args _ = "Some Args"
Run Code Online (Sandbox Code Playgroud)
但你仍然需要括号或使用($),因为return接受一个参数,而函数应用程序是最高优先级.
Pet*_*rns 11
等价的:
foo = do
args <- getArgs
case args of
[] -> return "No Args"
[s]-> return "Some Args"
Run Code Online (Sandbox Code Playgroud)
这可能比wnoise建议的更好,但这可能有助于人们更好地理解.
| 归档时间: |
|
| 查看次数: |
13234 次 |
| 最近记录: |