模式匹配数据类型及其在Haskell中的嵌套名称

Dan*_*l O 1 haskell types pattern-matching

我有:

data Color = Blue | Green | Red | White | Yellow deriving (Eq,Ord)
Run Code Online (Sandbox Code Playgroud)

然后

data Term = Color | ...
data Bag = Bag {
color :: Color
...
}
Run Code Online (Sandbox Code Playgroud)

现在我希望能够模式匹配以确保给定的术语是一个颜色,如果是这样,检查它的"值"(蓝色/绿色...).像这样的东西:

func :: Term -> Bag -> Bool
func (c :: Color) bag = (color bag) == c
Run Code Online (Sandbox Code Playgroud)

但是(c :: Color)似乎不起作用.

sdc*_*vvc 8

data Color = Blue | Green | Red | White | Yellow deriving (Eq,Ord)

data Term = Color Color | Trash

data Bag = Bag {
  color :: Color
}

func (Color x) bag = (color bag) == x

-- With the above, a call of func Trash something will fail.
-- (unexhastive pattern match). You can add

func Trash bag = False

-- or

func _ _ = False

-- and it will work all time.
Run Code Online (Sandbox Code Playgroud)