Free Palestine and Lebanon 🍉 Stop the Genocide
Haskell Logo

Programação Funcional

Questão 44: partitionEithers

Voltar

Apresente uma definição recursiva da função pré-definida partitionEithers :: [Either a b] -> ([a],[b]) que divide uma lista de Either em duas listas.

Exemplo

> partitionEithers [Left 1, Right 2, Left 3, Right 4, Left 5]
([1,3,5],[2,4])

Resolução

Clica para revelar

partitionEithers :: [Either a b] -> ([a],[b])
partitionEithers [] = ([],[])
partitionEithers ((Left a):t) = (a : as,bs)
    where (as,bs) = partitionEithers t
partitionEithers ((Right b):t) = (as,b : bs)
    where (as,bs) = partitionEithers t