Какой хороший способ конвертировать List (Maybe a)
в Maybe (List a)
в вязе?
Логика проста:
- вернуть
Just (List a)
, если все элементы Just a
- , в противном случае вернуть
Nothing
.
Example 1:
input: [ Just 1, Just 2, Just 3 ]
output: Just [ 1, 2, 3 ]
Example 2:
input: [ Just 1, Nothing, Just 3 ]
output: Nothing
Можно ли это легко сделать с помощью некоторых встроенных функций?
Лучшее, что я придумал, выглядит так:
listOfMaybesToMaybeList : List (Maybe a) -> Maybe (List a)
listOfMaybesToMaybeList listOfMaybes =
List.foldl
(\maybeItem ->
\maybeResultList ->
case ( maybeItem, maybeResultList ) of
( Just item, Just resultList ) ->
Just (List.append resultList [ item ])
( _, _ ) ->
Nothing
)
(Just [])
listOfMaybes
И что будетподходящее имя для такого рода функции?Когда я искал ответ, я увидел, что в Haskell есть функция sequence
, которая, похоже, делает нечто подобное.