我有一个自定义数据类型需要进行比较。
我希望执行
我尝试使用
以下是完整的样例代码。
data Tile = Wall | Ground | Storage | Box | Blank
我希望执行
instance-of-tile == Box
。我尝试使用
==
,如下图所示:tileToInteger :: Tile -> Integer
tileToInteger tile
| tile == Blank || tile == Wall = 1
| otherwise = 2
我也尝试过
tileToInteger :: Eq => Tile -> Integer
< p >来自stack build
的错误信息为:
No instance for (Eq Tile) arising from a use of ‘==’
• In the first argument of ‘(||)’, namely ‘tile == Blank’
In the expression: tile == Blank || tile == Wall
In a stmt of a pattern guard for an equation for ‘tileToInteger’: tile == Blank || tile == Wall
以下是完整的样例代码。
data Tile = Wall | Ground | Storage | Box | Blank
getTileAtXY :: Integer -> Integer -> Tile
getTileAtXY x y
| x == 0 && y == 0 = Box
| otherwise = Ground
tileToInteger :: Tile -> Integer
tileToInteger tile
| tile == Blank || tile == Wall = 1
| otherwise = 2
main :: IO ()
main = print (tileToInteger (getTileAtXY 1 0))
背景
- 这是来自宾夕法尼亚大学工程学院课程的练习题。
- 使用的堆栈版本为1.9.3.1。
stack.yaml
文件中指定(如果你不确定它在哪里,可以使用stack path --config-location
命令查看)。 - duplode