La fonction de recherche dans Data.Map et Data.IntMap retour en valeurs enveloppées dans Peut-être avec la signature de typecartes Haskell retour une monade
lookup :: Ord k => k -> Map k a -> Maybe a
Il l'habitude d'avoir le type plus général de
lookup :: (Monad m, Ord k) => k -> Map k a -> m a
Je réalise que le premier réduit probablement le besoin de spécification de type supplémentaire, mais le second le rendrait beaucoup plus général et permettrait d'utiliser la recherche dans les listes de compréhension. Est-il possible d'imiter ce comportement avec la version plus récente, ou devrais-je utiliser une ancienne version de la bibliothèque?
Ceci illustre parfaitement pourquoi l'utilisation de fail est mauvaise: il s'agit presque toujours d'une exception de terminaison de programme. Pas ce que vous voulez en regardant dans les cartes. –
Eh bien, j'ai dit "monades qui implémentent un échec", n'est-ce pas? -) 'error' est indéfini n'est pas mis en œuvre. Je voulais juste illustrer ce cas aussi. Personnellement, j'utilise l'échec de correspondance de modèle dans do-blocks lorsque la monade est aussi un 'MonadPlus' et implémente' fail' comme 'mzero'. C'est quand cette technique est la plus utile. – claus