La función de búsqueda en Data.Map y Data.IntMap valores envueltos en la actualidad Tal vez volver con la firma de tipomapas Haskell que regresan una mónada
lookup :: Ord k => k -> Map k a -> Maybe a
Se solía tener el tipo más general de
lookup :: (Monad m, Ord k) => k -> Map k a -> m a
Me doy cuenta de que el primero probablemente reduce la necesidad de especificación de tipo adicional, pero esto último lo haría mucho más general y permitiría que la búsqueda se usara en la lista de comprensiones. ¿Hay alguna manera de imitar este comportamiento con la versión más nueva, o tendría que usar una versión anterior de la biblioteca?
Esto ilustra perfectamente por qué el uso del error es malo: casi siempre es una excepción de finalización del programa. No es lo que quieres cuando buscas en los mapas. –
Bueno, dije "mónadas que implementan un error", ¿verdad? -) 'error' no está definido no está implementado. Solo quería ilustrar ese caso también. Personalmente, utilizo el patrón match failure en do-blocks cuando la mónada también es un 'MonadPlus' e implementa' fail' como 'mzero'. Entonces es cuando esta técnica es más útil. – claus