我有以下代码行,当使用GHC编译时,它没有任何障碍:
addRDF c (Just (FILE)) = do
(_:file:_) <- getArgs
check <- doesFileExist file
if check then do rdfG <- TLI.readFile file >>= (return . parseN3fromText)
case rdfG of (Left s) -> putStrLn s
(Right g) -> storeRDF c g
else do putStrLn "Specified files does not exist"
Run Code Online (Sandbox Code Playgroud)
但是当我通过cabal构建过程运行它时,它会转储出以下错误.
Repository/Adder.hs:46:35:
Unexpected semi-colons in conditional:
if check then do { rdfG <- TLI.readFile file
>>=
(return . parseN3fromText);
case rdfG of {
(Left s) -> putStrLn s
(Right g) -> storeRDF c g } }; else do { putStrLn
"Specified files does not exist" }
Perhaps you meant to use -XDoAndIfThenElse?
Run Code Online (Sandbox Code Playgroud)
我可以在错误中看到额外的分号,但我不明白它来自何处.
这是我的cabal配置文件:
cabal-version: >= 1.2
build-type: Simple
library
build-depends:
base,
containers,
HTTP >= 4000.2.2,
directory >= 1.1.0.0,
text >= 0.11.1.13,
swish >= 0.6.5.2
exposed-modules: Repository.Adder, Repository.Configuration
ghc-options: -Wall
executable repository-add
main-is: repository-add.hs
build-depends:
MissingH,
swish >= 0.6.5.2,
split >= 0.1.4.2
ghc-options: -Wall
Run Code Online (Sandbox Code Playgroud)
UPDATE
正确缩进if:
addRDF c (Just (FILE)) = do (_:file:_) <- getArgs
check <- doesFileExist file
if check
then do rdfG <- TLI.readFile file >>= (return . parseN3fromText)
case rdfG of (Left s) -> putStrLn s
(Right g) -> storeRDF c g
else do putStrLn "Specified files does not exist"
Run Code Online (Sandbox Code Playgroud)
我check现在也得到一个分号:
Repository/Adder.hs:46:35:
Unexpected semi-colons in conditional:
if check; then do { rdfG <- TLI.readFile file
>>=
(return . parseN3fromText);
case rdfG of {
(Left s) -> putStrLn s
(Right g) -> storeRDF c g } }; else do { putStrLn
"Specified files does not exist" }
Perhaps you meant to use -XDoAndIfThenElse?
Run Code Online (Sandbox Code Playgroud)
dfl*_*str 15
您的缩进是不正确的,但是当您使用原始GHC编译器时它会起作用,因为它会自动打开错误消息(DoAndIfThenElse)中提到的语法扩展.
在Cabal中,您必须在代码文件的顶部或Cabal文件中指定手动使用的语言扩展名; 否则,编译器将不会启用它们.
if子句缩进的一个正确版本是这样的:
if check
then do
rdfG <- TLI.readFile file >>= (return . parseN3fromText)
case rdfG of
(Left s) -> putStrLn s
(Right g) -> storeRDF c g
else putStrLn "Specified files does not exist"
Run Code Online (Sandbox Code Playgroud)
您必须将then零件和else零件保持在比它们所属的块更深的压痕水平.
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |