gpt4 book ai didi

Haskell - 显示实例多种数据类型

转载 作者:行者123 更新时间:2023-12-02 10:46:01 25 4
gpt4 key购买 nike

我目前正在为学校作业制作国际象棋游戏,我的棋子已定义

    data Piece = Piece { piecetype :: PieceType, color :: PieceColor }
data PieceType = Pawn | Knight | Bishop | Rook | Queen | King
data PieceColor = Black | White deriving Eq

现在我必须将一 block 打印为单个字符(国王= k,女王= q,骑士= n等)对于黑色 block ,该值是其白色值的大写(国王= K,女王= Q , 骑士 = N 等)所以我做了三个 show 实例

    instance Show PieceColor where
show Black = "B"
show White = "W"

instance Show PieceType where
show Pawn = "P"
show Knight = "N"
show Bishop = "B"
show Rook = "R"
show Queen = "Q"
show King = "K"

第三个是问题

    instance Show Piece where
show (piecetype, color) = show piecetype
if show color == "W"
then show piecetype
else toUpper (show piecetype)

我收到以下错误(我也尝试了更多的方法,但根据此链接,我似乎非常接近 Something somewhat similar

Couldn't match expected type `Piece' with actual type `(t0, t1)'

我很感激任何帮助亲切的问候,我

最佳答案

直接回答:

instance Show Piece where
show (Piece piecetype Black) = map toLower $ show piecetype
show (Piece piecetype White) = show piecetype

说明:

  • Piece 是一种带有构造函数 Piece 的数据类型(类型名称和构造函数对于您的情况都是相同的),而不是元组。因此,您应该在构造函数上进行模式匹配,而不是在元组上进行模式匹配。

  • toUppertoLower 存在于 Data.Char 中,并在 Char 上工作,而诸如"B"String (String[Char] 的类型同义词)。因此,要将 String 设置为大写,您可以使用 map toUpper

  • 比较 show color == "B" 这样的字符串效率不高,您可以在构造函数名称上使用模式匹配。

关于Haskell - 显示实例多种数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917393/

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