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

时间:2014-10-21 01:55:48

标签: haskell set subset

让我们说我在Haskell中有以下数据结构来表示Checkers /稿件:

data Piece = Reg {pos :: Square, color :: Color}
         | King {pos :: Square, color :: Color}
    deriving (Show, Eq)

鉴于这些Pieces的列表,我如何从列表中隔离King?我一直在http://www.haskell.org/ghc/docs/7.6.2/html/libraries/containers-0.5.0.0/Data-Set.html查看Data.Set的文档,但无法找到对我来说显而易见的内容。

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

1 个答案:

答案 0 :(得分:5)

您可以定义布尔函数isKing,然后在filter中使用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