如何解决Haskell中do-block中的if-then-else简明表示法
| 我无法弄清楚[http://hackage.haskell.org/trac/haskell-prime/wiki/DoAndIfThenElse]中提到的if-then-else简洁表示法的工作方式。这样有效import System.Environment
main = do
args <- getArgs
if (args !! 0) == \"hello\"
then
print \"hello\"
else
print \"goodbye\"
但这不是,插入所说的分号(请参阅链接)只会对我造成解析错误。
import System.Environment
main = do
args <- getArgs
if (args !! 0) == \"hello\" then
print \"hello\"
else
print \"goodbye\"
解决方法
您提供的链接描述了一个提案,听起来像它不是Haskell标准的一部分(尽管该链接提到它是在jhc,GHC和Hugs中实现的)。您正在使用的Haskell编译器版本或您正在使用的标志集可能不允许链接中描述的可选分号行为。
尝试这个:
import System.Environment
main = do
args <- getArgs
if (args !! 0) == \"hello\" then
print \"hello\"
else
print \"goodbye\"
,在Haskell 98中,“如果...则...否则...”是一个单独的表达式。如果分成多行,则第一行之后的行必须缩进。
就像以下是错误的一样…
do
1 +
2
…以及以下作品…
do
1 +
2
……以下也是错误的……
do
if True then 1
else 2
…以及以下作品。
do
if True then 1
else 2
正如其他评论已经提到的那样,Haskell 2010允许将“ then”和“ else”部分的缩进程度与“ if”部分的缩进程度相同。
,Haskell语法和语言通过源文件开头的{-#LANGUAGE ...#-}编译指示进行了扩展。由于DoAndIfThenElse扩展名是Cabal文档中列出的扩展名之一,因此可以识别。当前的GHC默认情况下启用此功能。
,我通常将ѭ7缩进一个空格,而不是ѭ8缩进一个空格。否则,整个if
都非常适合单行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。