gpt4 book ai didi

do block 中 case 表达式的 Haskell 语法

转载 作者:行者123 更新时间:2023-12-02 00:54:56 25 4
gpt4 key购买 nike

我无法完全弄清楚 do block 中的 case 表达式的语法问题。

正确的语法是什么?

如果你能纠正我的例子并解释一下那就最好了。

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"

一点更新。我的源文件是空格和制表符的混合体,它导致了各种各样的问题。只是给其他开始使用 Haskell 的人一个提示。如果您遇到问题,请检查源代码中的制表符和空格。

最佳答案

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")

或使用方便的应用程序运算符 ($):

foo = do
args <- getArgs
return $ case args of
[] -> "No Args"
[s]-> "Some Args"

从风格上来说,我会将其分解为另一个函数:

foo = do
args <- getArgs
return (has_args args)

has_args [] = "No Args"
has_args _ = "Some Args"

但你仍然需要加括号或使用 ($),因为 return 需要一个参数,而函数应用的优先级最高。

关于do block 中 case 表达式的 Haskell 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/156013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com