He escrito una función Haskell que se divide en una lista xs
(init xs, last xs)
así:valor inferior en Haskell
split xs = split' [] xs
where
split' acc (x:[]) = (reverse acc, x)
split' acc (x:xs) = split' (x:acc) xs
Desde una lista vacía no se puede dividir de esta manera, no hay ninguna coincidencia para la lista vacía. Sin embargo, no quería simplemente la función error ...
. Por lo tanto he definido lo siguiente:
split [] = ([], undefined)
Gracias a la evaluación perezosa por lo tanto puedo definir un seguro init
cual simplemente devuelve la lista vacía de la lista vacía:
init' = fst . split
¿Hay alguna manera de cómo podría detectar lo indefinido si trataba de acceder a él, de manera que
last' xs
| isUndefined (snd xs) = ...
| otherwise = ...
sí sé sobre Maybe
y Either
, y que esas son una mejor opción para expresar lo que quiero. Sin embargo, me preguntaba si hay una manera de detectar un valor real de indefinido, es decir, en términos de errores de captura, como capturar excepciones.
La simple respuesta es NO. No es posible detectar indefinido. (Una respuesta más complicado es que se puede capturar las excepciones en el Momad IO, pero eso no es lo que quiere hacer aquí.) – augustss