estoy leyendo un tutorial que utiliza el siguiente ejemplo (que voy a generalizar un poco):Cuando se desestructuran las tuplas en Haskell, ¿dónde se pueden usar los elementos?
f :: Foo -> (Int, Foo)
...
fList :: Foo -> [Int]
fList foo = x : fList bar
where
(x, bar) = f foo
Mi pregunta radica en el hecho de que parece que se puede hacer referencia a x
y bar
, por su nombre, fuera del la tupla donde se obtienen. Esto parece actuar como una desestructuración de listas de parámetros en otros idiomas, si mi conjetura es correcta. (En otras palabras, no tuve que hacer lo siguiente :)
fList foo = (fst tuple) : fList (snd tuple)
where
tuple = f foo
¿Tengo razón sobre este comportamiento? Nunca lo he visto mencionar en los tutoriales/libros que he estado leyendo. ¿Puede alguien indicarme más información sobre el tema?
Editar: ¿Se puede desestructurar algo (listas, matrices, etc.) de forma similar o solo se puede hacer con tuplas?
Si finalmente no encuentra una explicación de la coincidencia de patrones en ese tutorial, es posible que desee complementarlo con una explicación más completa de Haskell. La coincidencia de patrones es básica e importante para el idioma. –