使用checker验证Validation的Applicative实现编译失败如何解决
错误原因
checkers库的applicative函数要求传入的类型占位符(也就是你定义的trigger)的结构必须是f (a, b, c):其中f是你要测试的Applicative实例,三个不同的类型参数a,b,c是用来覆盖applicative定律中不同类型组合的校验场景。
你当前定义的ValidationTyped是Validation String Int,第二个类型参数是Int,不符合要求的三元组结构,所以编译时抛出类型不匹配错误。
解决方案
只需要修改你定义的类型别名,把第二个类型参数调整为任意三元组类型即可,trigger作为类型占位符不需要实际有效值,用undefined不会有运行时问题。
修改后的测试代码如下:
-- 把第二个类型参数改为三元组类型即可,这里用(Int, Int, Int)举例,其他任意三元组都可以 type ValidationTyped = Validation String (Int, Int, Int) trigger :: ValidationTyped trigger = undefined main :: IO () main = do quickBatch $ applicative trigger
修改后重新编译运行即可正常校验你的Validation Applicative实现是否符合定律。
内容的提问来源于stack exchange,提问作者Calin
相关产品推荐
相关产品推荐

