Die Funktion Lookup in Data.Map und Data.IntMap derzeit Werte zurück umwickelt Vielleicht mit der Art SignaturHaskell Karten eine Monade Rückkehr
lookup :: Ord k => k -> Map k a -> Maybe a
Es verwendet, um die allgemeinere Art von
lookup :: (Monad m, Ord k) => k -> Map k a -> m a
haben
Ich realisiere, dass ersteres wahrscheinlich die Notwendigkeit einer zusätzlichen Typspezifikation reduziert, aber letzteres würde es viel allgemeiner machen und ermöglichen, dass Nachschlagen in Listenkompressen verwendet wird. Gibt es eine Möglichkeit, dieses Verhalten mit der neueren Version nachzuahmen, oder müsste ich eine ältere Version der Bibliothek verwenden?
Dies zeigt perfekt, warum die Verwendung von fail schlecht ist: es ist fast immer eine Programm Beendigung Ausnahme. Nicht was du willst, wenn du in Karten nachschaust. –
Nun, ich sagte "Monaden, die einen Fehler implementieren", nicht ich? -) "Fehler" ist undefiniert ist nicht implementiert. Ich wollte diesen Fall auch nur illustrieren. Persönlich verwende ich Muster-Match-Fail in Do-Blöcke, wenn die Monade auch ein 'MonadPlus' ist und' fail' als 'mzero' implementiert. Das ist, wenn diese Technik am nützlichsten ist. – claus