gpt4 book ai didi

testing - 如何使用带参数化类型的 assertEqual

转载 作者:行者123 更新时间:2023-11-28 19:56:22 28 4
gpt4 key购买 nike

我正在尝试使用 HUnit 以 TDD 方式在 Real World Haskell 中进行练习.正如您可能猜到的那样,我还没有走得太远,所以就 Haskell 而言,我是一个绝对的初学者。给定以下代码,我如何解决 ghci 产生的以下错误:

Ambiguous type variable a' in the constraints:
Show a' arising from a use of assertEqual' at List_Test.hs:6:27-58
Eq a' arising from a use of `assertEqual' at List_Test.hs:6:27-58 Probable fix: add a type signature that fixes these type variable(s)

List_Test.hs:

module List_Test
where
import List
import Test.HUnit

fromEmptyList = TestCase $ assertEqual "" [] (toList (Nil))

main = runTestTT fromEmptyList

列表.hs:

module List
where
data List a = Cons a (List a)
| Nil
deriving (Show)

toList Nil = []
toList (Cons a b) = (:) a (toList b)

我曾尝试向 List 声明和 toList 定义添加类型约束,但没有成功。互联网搜索也没有提供任何信息。

最佳答案

问题部分在于 GHC 不知道 toList Nil 将返回一个空列表。

*List> :i toList
toList :: List a -> [a] -- Defined at List.hs:7:0-5

它只知道它将返回一个类型为 a 的列表,但它不知道 a 是什么——因此出现“不明确的类型变量 a”消息。解决此问题的一种方法是仅指定 toList 将返回的列表类型:

fromEmptyList = TestCase $ assertEqual "" [] (toList (Nil) :: [Int])

改变它,并删除 List_Test 的前两行(它不会在未命名为 Main 的命名模块中寻找 main 函数),给了我这个结果:

$ runghc List_Test.hs Cases: 1  Tried: 1  Errors: 0  Failures: 0

关于testing - 如何使用带参数化类型的 assertEqual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1418967/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com