data SomeData = A Int
| B Int
| C Int
list :: [SomeData]
list = [ A 1, B 2, C 3]
wantedData = filter (?) list -- wantedData is A 1
上記のコードで、目的のデータを取得するには、どの関数を (?) 入れればよいでしょうか?
data SomeData = A Int
| B Int
| C Int
list :: [SomeData]
list = [ A 1, B 2, C 3]
wantedData = filter (?) list -- wantedData is A 1
上記のコードで、目的のデータを取得するには、どの関数を (?) 入れればよいでしょうか?
リストに値のみを含めたい場合はA
、これが述語として機能するはずです。
isA (A _) = True
isA _ = False
あくまでもパターンマッチングです。
無名関数を書く能力に近く、新しい関数を定義する必要がないのは、リスト内包表記です。
たとえば、次のように言えます。
list = [ A 1, B 2, C 3]
wantedData = [ A n | A n <- list ] -- result: [A 1]
別の可能性:
data SomeData = A Int | B Int | C Int
deriving (Show, Read, Eq)
list :: [SomeData]
list = [ A 1, B 2, C 3 ]
wantedData :: [SomeData]
wantedData = filter (== A 1) list -- wantedData is A 1
テスト:
> wantedData
> [A 1]