Ich möchte eine Funktion definieren, safeIndex
dieWie findet man das k-te Element einer 'unendlichen' faltbaren Struktur in Haskell?
safeIndex :: (Foldable t, Integral i) => t a -> i -> Maybe a
safeIndex = foldr step (const Nothing)
where
step :: Integral i => a -> (i -> Maybe a) -> i -> Maybe a
step x f i = if i == 0
then Just x
else f (i - 1)
auf Foldable
Arten funktioniert, aber es für unendliche Listen funktioniert nicht. Für foldr
in der Mitte zu stoppen, ich denke, wir müssen feststellen, ob es nur mit dem ersten Argument von step
aufhören sollte, was unmöglich scheint.
Ist es möglich, die Funktion so zu reparieren, dass sie auf unendlichen Strukturen funktioniert? Wenn nicht, welche Klassen sollten wir auf t
beschränken?
Warum verwenden Sie 'forall' hier? –
Andernfalls wird die explizite Typ-Signatur von 'step' nicht kompiliert. Ich habe 'ScopedTypeVariable' Spracherweiterung aktiviert :) –
' safeIndex [1 ..] 3' Ausgänge 'Just 4'. Es wird jedoch nicht für unendliche Snoc-Listen funktionieren, aber es ist nicht sinnvoll, dass sie von vornherein "von rechts" indexieren. –