匹配簡化記錄圖案考慮下面的例子:內濾波器
data TestType = Free | Occupied { oc_field1 :: Int,
oc_field2 :: Int,
oc_field3 :: Int,
oc_field4 :: Int
}
type SampleTest = [TestType]
filterOccupied :: SampleTest -> SampleTest
filterOccupied test = filter (\x -> case x of
Occupied _ _ _ _ -> True
Free -> False) test
在上述例子中,內部filterOccupied我必須使用4 _
用於匹配Occupied
類型。
當記錄超過10個字段時,這會變得非常痛苦。有一個更好的方法嗎 ?
我不喜歡用平等的測試,你可以使用模式匹配,而不是,因爲它產生虛假的'Eq'約束(這是更糟與'(== [])' ,你在新的Haskellers的代碼中看到的,因爲那麼*元素*就會得到約束)。再加上它不夠優雅。如果你真的想要這樣的話,定義'isFree' /'isOccupied'函數將是我的首選方法。 –