Haskell 转换或处理多种自定义数据类型

Haskell Converting or Dealing with Multiple Custom Data Types

我是 Haskell 的新手,正在尝试过滤特定的自定义数据类型。我一直在阅读 Graham Hutton 的 Haskell 书中的编程,但似乎越来越让自己感到困惑。

所以给定以下类型定义:

data Suit= Hearts
    deriving Eq

data Rank= Numeric Int | Jack
    deriving Eq

data Card= NormalCard Rank Suit | Joker
    deriving Eq

我正在尝试创建一个过滤特定卡片的条件,即

filterCondition:: Card -> Bool
filterCondition i = isJack && isJoker
    where 
        isAce = i == Jack -- error here: Couldn't match expected type ‘Card’ with actual type ‘Rank’
        isJoker = i == Joker

问题是以下错误

Couldn't match expected type ‘Card’ with actual type ‘Rank’

我想知道如何处理 'Rank' 应该被视为“卡片”的条件?

在这种情况下你需要解构i

isAce = case i of
  NormalCard r s -> r == Jack
  _ -> False