Haskell:基于成员类型的过滤器集?

Gov*_*mar 3 haskell set subset

假设我在Haskell中有以下数据结构来表示Checkers/Drafts部分:

data Piece = Reg {pos :: Square, color :: Color}
         | King {pos :: Square, color :: Color}
    deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)

鉴于这些列表,Pieces我如何King从列表中隔离s?我一直在寻找的文档,Data.Sethttp://www.haskell.org/ghc/docs/7.6.2/html/libraries/containers-0.5.0.0/Data-Set.html但无法找到的东西,对我来说似乎很明显

简而言之,我需要一个方法,给定一Data.SetPiece,返回所有King类型片段的子集.我觉得这很简单,但我还没有遇到过因为我是Haskell中的Data.Set类的新手.

tin*_*lyx 5

您可以定义一个布尔函数isKing,然后使用filterin Data.Set,如下所示:

import Data.Set as S
data Color = Int deriving (Show, Eq)
data Square = Square (Int,Int) deriving (Show, Eq)
data Piece = Reg {pos :: Square, color :: Color}
         | King {pos :: Square, color :: Color}
    deriving (Show, Eq)

isKing King{} = True
isKing _ = False

getKings s = S.filter isKing s
Run Code Online (Sandbox Code Playgroud)

  • `isKing King {} = True`如果字段数改变,你可以避免改变`isKing`. (2认同)