M4s*_*1nd 3 haskell types instance show
我正在为学校作业制作一个国际象棋游戏,我的作品已定义
    data Piece = Piece { piecetype :: PieceType, color :: PieceColor }
    data PieceType = Pawn | Knight | Bishop | Rook | Queen | King
    data PieceColor = Black | White deriving Eq
现在我必须打印一块作为单个字符(king = k,queen = q,knight = n等)的黑色部分,该值是其白色值的大写(king = K,queen = Q,knight = N等等)所以我做了三个节目实例
    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)
我收到以下错误(我也尝试了很多,但根据这个链接,我似乎非常接近有点类似的东西
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(类型名称和构造函数对于您的情况都是相同的)而不是元组.所以你应该在构造函数上进行模式匹配而不是在元组上.
toUpper并且toLower存在于Data.Char并且正在处理Char类似"B"的东西String(String是类型的同义词[Char]).所以要制作String大写,你可以使用map toUpper.
比较字符串show color == "B"就不是很有效,而是可以在构造函数名称上使用模式匹配.
| 归档时间: | 
 | 
| 查看次数: | 479 次 | 
| 最近记录: |