Mínimo y máximo de un montículo
Definir la función
| 1 |    minMax :: Ord a => Monticulo a -> Maybe (a,a) | 
tal que (minMax m) es justamente el par formado por el menor y el mayor elemento de m, si el montículo m es no vacío. Por ejemplo,
| 1 2 3 |    minMax (foldr inserta vacio [4,8,2,1,5])  ==  Just (1,8)    minMax (foldr inserta vacio [4])          ==  Just (4,4)    minMax vacio                              ==  Nothing | 
Nota: Este ejercicio debe realizarse usando únicamente las funciones de la librería de montículo (I1M.Monticulo) que se describe aquí y se encuentra aquí.
Soluciones
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import I1M.Monticulo   -- http://bit.ly/1AKmUQB minMax :: Ord a => Monticulo a -> Maybe (a, a) minMax m | esVacio m = Nothing          | otherwise = Just (menor m,mayor m) -- (mayor m) es el mayor elemento del montículo m. Por ejemplo, --     mayor (foldr inserta vacio [1,8,2,4,5])  ==  8 mayor :: Ord a => Monticulo a -> a mayor m | esVacio r = menor m         | otherwise = mayor r         where r = resto m -- 2ª definición de mayor  mayor2 :: Ord a => Monticulo a -> a mayor2 m = last (monticulo2Lista m) monticulo2Lista :: Ord a => Monticulo a -> [a] monticulo2Lista m | esVacio m = []                   | otherwise = menor m : monticulo2Lista (resto m) |