Czy istnieje dobry sposób na znalezienie pierwszego wystąpienia konstruktora na liście, bez wyraźnej rekursji w poniższym przykładzie?Idiomatyczny sposób wywołania pierwszego wystąpienia określonego konstruktora z listy
data Elem = A Int | B Char deriving Show
getA :: [Elem] -> Maybe Elem
getA [] = Nothing
getA (e:es) =
case e of
A a -> Just (A a)
_ -> getA es
To miło, dziękuję! – martingw
Bardzo podoba mi się, w jaki sposób to rozwiązanie wykorzystuje zrozumienie list do obejścia, które wymaga dopasowania wzoru na więcej niż tylko pożądany konstruktor danych. Można go poprawić przy użyciu pustego wzorca rekordu używanego przez @hammar w jego odpowiedzi. –
@ IonuţG.Stan zgodził się, że będzie to bezpieczne w przyszłości. –