Haskell:开始时出现函数分析错误
我是haskell的初学者,正在尝试执行密码验证函数Haskell:开始时出现函数分析错误,haskell,Haskell,我是haskell的初学者,正在尝试执行密码验证函数 validateCipher :: [Char] -> Bool validateCipher cipher = if length $ nub cipher == length cipher then return True else return False 当我通过ghci运行它时,它只告诉我:错误:在输入“validateCipher”时解析错误。。 不确定出了什么问题,我
validateCipher :: [Char] -> Bool
validateCipher cipher =
if length $ nub cipher == length cipher
then return True
else return False
当我通过ghci运行它时,它只告诉我:错误:在输入“validateCipher”时解析错误。。
不确定出了什么问题,我是否应该添加Eq或任何东西(我也不确定它能做什么)?这里有两个错误:
return
。在Haskell中没有return
关键字,有一个函数,但工作方式不同;及$
导致将length$nub cipher==length cipher
解析为length(nub cipher==length cipher)
,这不满足类型约束,因为nub cipher
返回[Char]
,而length cipher
将返回Int
返回True
,或者返回True
,因为我们可以只返回检查条件的结果。我们还可以使用括号编写正确的表达式:
validateCipher :: [Char] -> Bool
validateCipher cipher = length (nub cipher) == length cipher
validateCipher::[Char]->Bool
validateCipher cipher=长度(nub cipher)==长度密码
删除返回值
。在Haskell中没有return
关键字,只有return
函数。此外,$
将其解析为`length(nub cipher==length cipher),因此您应该使用括号。Q1原因是我在Haskell中搜索并发现有人使用return True。。。。。非常感谢您提供了一个更可靠的答案。@GTTT:对于一元计算,例如IO
,可能
,等等。有时确实可以使用返回
。但是对于非一元的,比如这里的一个,我不完全理解$operator,但是现在由于你的解释,我会对此更有信心!thx alot@GTTT:($)
是一个优先级很低的运算符(),它基本上用于将左侧的部分和右侧的部分分组,并生成函数应用程序。所以,…$
,几乎总是等同于(…)(…)
(但不带括号)。