如何修复函数合法属性QuickCheck测试中的类型匹配错误
错误出现的原因
- 函数调用优先级错误:Haskell中函数应用的优先级最高,你写的
length search x char会被解析为依次给length传3个参数:search函数、x、char,而非你预期的先计算search x char再取长度。 - 类型签名不匹配:你声明
prop_search的类型是String -> Int -> Int -> Bool,意味着需要接收3个参数,但实际实现只接收了x、char两个参数,Haskell会认为你返回的是还需要接收1个Int参数的函数Int -> Bool,和你实际返回的Bool类型冲突;同时search的第二个参数是Char类型,你签名里写的Int也不符合要求。 - 冗余的if判断:
<=表达式本身返回的就是Bool值,不需要额外套一层if判断。
修复后的代码
prop_search :: String -> Char -> Bool prop_search x char = length (search x char) <= length x
内容的提问来源于stack exchange,提问作者idontknowhowtocode
相关产品推荐
相关产品推荐

