Фильтровать список типов алгебры c - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу отфильтровать список типов алгебраических данных c в haskell. Например:

data Both = Foo Int Int
            | Bar Int

Если у меня есть этот тип данных, я хочу отфильтровать Foos. Эта функция должна возвращать только Foos:

sortFoos :: [Both] -> [Both]

Я просто не могу понять, как это сделать. У кого-нибудь есть решение?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Использование списка понимания:

[(Bar i) | (Bar i) <- ls]
0 голосов
/ 23 апреля 2020

Вы можете определить функцию фильтрации, используя сопоставление с образцом:

skipFoo (Foo _ _) = False
skipFoo _ = True

, а затем передайте ее filter:

filter skipFoo [Foo 1 2, Bar 3]  -- returns [Bar 3]
...