生成器表示式中的模式

但是,生成器表示式中的 x 不僅可以變數,而且可以是任何模式。在模式不匹配的情況下,跳過生成的元素,並且列表的處理繼續下一個元素,因此像過濾器一樣:

[x | Just x <- [Just 1, Nothing, Just 3]]     -- [1, 3]

在其模式中具有變數 x 的生成器建立包含其右側的所有表示式的新範圍,其中 x 被定義為生成的元素。

這意味著警衛可以編碼為

[ x | x <- [1..4], even x] ==
[ x | x <- [1..4], () <- [() | even x]] ==
[ x | x <- [1..4], () <- if even x then [()] else []]