我不确定如何很好地解释这一点,所以我只提供一个例子:
-- Create a list of ints if the string contains no numbers
row :: String -> [Maybe Int]
row (isAlpha row) = [ Just $ ord c | c <- row ]
row _ = [Nothing]
当我尝试在 GHCi 中加载一个带有这个的模块时,我得到:
Parse error in pattern: isAlpha
有没有办法做到这一点?还是我必须在 if..else 中完成所有操作?
忍者编辑:这显然不是一个真实的例子。我试图用一个简单的例子来推断我所追求的行为,但事后看来,这显然是没有意义的,因为 isAlpha 会返回一个 Bool,而不是 String,所以这将是错误的参数,并且 isAlpha 无论如何都适用于 Char 而不是 String。但我只是试图描绘我正在寻找的概念,所以我希望它能够实现。
最佳答案
您正在使用 isAlpha
在发生模式匹配(和仅模式匹配)的地方。
改用 guard :
row a | isAlpha a = someFunction
| otherwise = someOtherFunction
关于haskell - 我可以基于 Bool 函数调用重载 Haskell 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575900/