对于作业,我必须编写一个函数
filter
在名单上
Maybe
实例,删除值为的所有
Nothing
.我们应该确保该功能使用Hspec工作。
在运行using之前和之后,使用包含元素的case很简单
Data.Maybe (isJust)
:
onlyJust :: [Maybe a] -> [Maybe a]
onlyJust = filter isJust
但是,一旦我尝试将该函数应用于测试用例,例如
it "produces the list []" $
onlyJust [Nothing, Nothing] `shouldBe` []
或
it "produces the list []" $
onlyJust [] `shouldBe` []
测试套件文件未编译,导致类型错误不明确。
⢠Ambiguous type variable âa0â arising from a use of âshouldBeâ
prevents the constraint â(Show a0)â from being solved.
Probable fix: use a type annotation to specify what âa0â should be.
正如错误消息所示,我试图添加类型注释,但找不到与函数本身的类型约束匹配的注释。对于后一个测试用例,我还尝试通过添加一个空用例来修改函数:
onlyJust :: [Maybe a] -> [Maybe a]
onlyJust [] = []
onlyJust l = filter isJust l
但错误依然存在。我是在掩饰一个明显的类型注释来解决这个问题,还是在函数的编写方式上存在缺陷,这意味着它无法处理空列表的输出或将其作为输入?