I는 타입 함수 싶은 :catMaybes 좋아 하스켈 함수이지만 갖는 형태 [아마] -> 아마 [A]
f :: [Maybe a] -> Maybe [a]
예를 내 f
이 Nothing
에 대한 매우 심각한 상태에서 그 catMaybes
이 Nothing
무시를 제외하고
f [Just 3, Just 5] == Just [3, 5]
f [Just 3, Nothing] == Nothing
f [] == Just []
그것은 Data.Maybe
에서 catMaybes :: [Maybe a] -> [a]
유사하다.
f :: [Maybe a] -> Maybe [a]
f xs = let ys = catMaybes xs
in if length ys == length xs
then Just ys
else Nothing
또는
f :: [Maybe a] -> Maybe [a]
f xs = if all isJust xs
then catMaybes xs
else Nothing
일반적인 휴리스틱 스 - 일반적인 목록 기능을 작성하고 '길이'(특히 두 번 이상 사용하는 경우)를 사용하여 자신을 발견하면 아마도 잘못된 결과를 낳을 것입니다. Haskell의 대부분의 목록 코드에는 적합하지 않습니다. 항상 그런 것은 아니지만 배우는 동안 사용하지 않는 편이 잘못되었습니다. :-) – shachaf
의심스러운 경우 [hoogle] (http://www.haskell.org/hoogle/?hoogle=%5BMaybe+a%5D+-%3E+Maybe+%5Ba%5D). Hoogle에서'[Maybe a] -> Maybe [a]'를 검색하여 아래에 올바른 답을 얻었습니다 ('sequence'). – aaronlevin
나는 그걸 알아보고'catMaybes'에 주목했다. 'sequence'가 목록의 첫 번째 항목이었습니다. 형식이 'Maybe'가 아니고 'Monad'가 아니기 때문에 무시 했으므로 연결을 인식하지 못했습니다. – Causality