生成器表示式中的模式
但是,生成器表示式中的 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 []]