Translate

viernes, 26 de septiembre de 2025

Simulando Listas por Comprensión en Elm


En lenguajes como Haskell o Python, las listas por comprensión permiten generar y transformar listas con una sintaxis muy compacta.

En Elm no existen listas por comprensión como sintaxis, pero sí podemos expresar lo mismo con funciones de orden superior como map, filter y concatMap.

En Haskell:


[x * 2 | x <- [1..5]]

-- Resultado: [2,4,6,8,10]


En Elm:


dobles : List Int

dobles =

    [1,2,3,4,5]

        |> List.map (\x -> x * 2)


Resultado: [2,4,6,8,10]


Con condición (filter)


En Haskell:


[x * 2 | x <- [1..5], x > 2]

-- Resultado: [6,8,10]


En Elm:


doblesMayoresQueDos : List Int

doblesMayoresQueDos =

    [1,2,3,4,5]

        |> List.filter (\x -> x > 2)

        |> List.map (\x -> x * 2)


-- Resultado: [6,8,10]


Generando pares (concatMap)


En Haskell:


[(x,y) | x <- [1,2], y <- [3,4]]

-- Resultado: [(1,3),(1,4),(2,3),(2,4)]


En Elm:


pares : List (Int, Int)

pares =

    [1,2]

        |> List.concatMap (\x ->

            [3,4] |> List.map (\y -> (x, y))

        )


-- Resultado: [(1,3),(1,4),(2,3),(2,4)]


Aunque Elm no tiene listas por comprensión como sintaxis, podemos lograr la misma expresividad combinando funciones de orden superior:

  • List.map → transformación.
  • List.filter → condiciones.
  • List.concatMap → anidación (equivalente a los múltiples generadores de Haskell).

De esta forma, Elm mantiene un estilo declarativo y expresivo, alineado con su filosofía de simplicidad y claridad.