【发布时间】:2014-10-21 01:55:47
【问题描述】:
假设我在 Haskell 中有以下数据结构来表示 Checkers /草稿:
data Piece = Reg {pos :: Square, color :: Color}
| King {pos :: Square, color :: Color}
deriving (Show, Eq)
鉴于这些Pieces 的列表,我如何从列表中隔离Kings?我一直在查看Data.Sethttp://www.haskell.org/ghc/docs/7.6.2/html/libraries/containers-0.5.0.0/Data-Set.html 的文档,但找不到对我来说似乎很明显的东西。
简而言之,我需要一个方法,给定一个Data.Set 集合Piece,返回所有King 类型片段的子集。我觉得这是一件非常简单的事情,但我还没有遇到过,因为我是 Haskell 中 Data.Set 类的新手。
【问题讨论】:
-
为什么不使用
data PieceType = Reg | King和data Piece = Piece { pieceType :: PieceType, pos :: Square, color :: Color }? -
然后您可以过滤该字段的值:
filter ((== King) . pieceType)。显然你想为此派生Eq