hchesslib-0.1.0.0: src/Chess/Internal/Piece.hs
module Chess.Internal.Piece (Piece(..), Color(..), PieceType(..), opponent, printPiece,
parsePiece, parsePieceType) where
import Data.Char
data Piece = Piece Color PieceType
deriving (Show, Eq)
data Color = White | Black
deriving (Show, Eq)
data PieceType = Pawn | Knight | Bishop | Rook | Queen | King
deriving (Show, Eq)
opponent :: Color -> Color
opponent White = Black
opponent Black = White
pieceChars :: [(PieceType, Char)]
pieceChars = [(Pawn, 'P'), (Knight, 'N'), (Bishop, 'B'), (Rook, 'R'), (Queen, 'Q'), (King, 'K')]
printPiece :: Piece -> String
printPiece (Piece color pieceType) = case color of
White -> [toUpper c]
Black -> [toLower c]
where (Just c) = lookup pieceType pieceChars
parsePiece :: Char -> Maybe Piece
parsePiece c = do
pieceType <- parsePieceType c
return (if isUpper c then Piece White pieceType else Piece Black pieceType)
parsePieceType :: Char -> Maybe PieceType
parsePieceType c = rlookup (toUpper c) pieceChars
where rlookup x = lookup x . map swap
swap (x, y) = (y, x)