gpt4 book ai didi

haskell - 为什么会出现 "No instance for (Arbitrary) arising from a use of ` quickCheck'”错误?

转载 作者:行者123 更新时间:2023-12-04 00:03:53 25 4
gpt4 key购买 nike

我是 Haskell 的新手,遇到这个错误时遇到了一些麻烦。我在 Windows 上使用 ghci。这是代码:

data Direction = North | South | East | West
deriving (Eq, Show)
type Point = (Int, Int)
origin = (0,0)
type Road = [Direction]
movement :: Point -> Road -> Point
{- ... }
test :: Road -> Road -> Bool
test road1 road2 = movement origin road1 == movement origin road2
-- i check if two roads lead to the same destination starting from
-- the origin point in a grid

这是我尝试运行测试时发生的情况:

*Main> quickCheck test
<interactive>:8:1: error:
* No instance for (Arbitrary Direction)
arising from a use of `quickCheck'
* In the expression: quickCheck test
In an equation for `it': it = quickCheck test

我的老师告诉我我的代码是正确的,但没有解释为什么在 Windows 上会出现这种情况,因此没有提供解决方案。我也没有在网上找到任何有用的东西。我真的很感激一个解释。

最佳答案

您定义:

Direction = North | South | East | West
deriving (Eq, Show)

上面没有instance Arbitrary Direction。毕竟,怎么可能呢?您刚刚定义了方向,整个世界中唯一的实例是 EqShow

尝试:

import Test.QuickCheck
data Direction = North | South | East | West
deriving (Eq,Show)

instance Arbitrary Direction where
arbitrary = elements [North,South,East,West]

elements 函数来自 Test.QuickCheck 就像 Arbitrary 一样。

作为元注释:如果您的讲师没有立即看到这里的问题,那么要么是沟通不畅,要么您应该计划补充您的 Haskell 教育,例如使用 wikibooks 等在线资源,以及 The Craft of Functional 等打印 Material 在 freenode 等地方进行编程或大量对话。

关于haskell - 为什么会出现 "No instance for (Arbitrary) arising from a use of ` quickCheck'”错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933324/

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