Exportar funciones se cubrió en el primer concepto; aquí tienes un repaso rápido.
Cada archivo en Elm es un módulo y debe contener una sentencia module antes que cualquier otro código.
Los nombres de los módulos deben coincidir con el nombre de su archivo, así que el módulo Calculator debe estar en el archivo Calculator.elm, y el módulo Parser.Utils debe estar en el archivo Parser/Utils.elm.
Todo lo que se define dentro de un módulo es privado para ese módulo y no se puede acceder desde fuera, a menos que se incluya en exposing.
-- Calculator.elm
-- Define the Calculator module, and expose the `add` function
module Calculator exposing (add)
six = 3 + 3
add number1 number2 = number1 + number2
-- Calculator.elm
-- Define the Calculator module, and expose everything within: `six` and `add`
module Calculator exposing (..)
six = 3 + 3
add number1 number2 = number1 + number2
https://elm-lang.org/docs/syntax#modules
Se accede a las funciones definidas en otros módulos mediante importaciones. Al importar un módulo, todas las funciones que ese módulo expuso se vuelven accesibles. Pero la forma de acceder a ellas varía según cómo se importe el módulo.
Las importaciones cualificadas son las que se usan por defecto, y para acceder a una función de ese módulo (por ejemplo, la función map del módulo List) se antepone el nombre del módulo (List.map).
Las importaciones abiertas permiten acceder directamente a las funciones expuestas de ese módulo, sin anteponer nada. Se hacen con la palabra clave exposing, como un espejo de la que se usa en las exportaciones. Puedes exponer todas las funciones disponibles (con ..) o solo algunas (por ejemplo, map).
También puedes importar tipos y sus constructores desde otros módulos, lo cual es un concepto posterior.
Se prefieren las importaciones cualificadas para mayor claridad y para evitar conflictos de nombres.
-- qualified imports
import List -- List.map, List.foldl
import List as L -- L.map, L.foldl
-- open imports
import List exposing (..) -- map, foldl, concat, ...
import List exposing ( map, foldl ) -- map, foldl, List.concat
https://elm-lang.org/docs/syntax#modules
Las anotaciones de tipo se definen con name : parameter types -> return type, separando también los tipos de los parámetros con ->.
add : Int -> Int -> Int
add number1 number2 = number1 + number2
Se pueden usar paréntesis para definir los parámetros de una función (que a su vez se definen con la misma sintaxis, de ahí la necesidad de los paréntesis).
-- Transform every character in a string
map : (Char -> Char) -> String -> String
map charMapperFunction string =
-- ...
https://elm-lang.org/docs/syntax#type-annotations
En Elm hay dos tipos de números, definidos por los tipos Int y Float.
Int corresponde al conjunto de los números enteros positivos y negativos.
Float corresponde al conjunto de los números reales, limitado por la precisión de la computadora.
Las operaciones definidas sobre números suelen funcionar con uno u otro tipo, pero no mezclándolos.
Existen funciones para convertir entre ambos, como toFloat, que convierte un Int en un Float, y round, floor, ceiling o truncate, que convierten un Float en un Int con distintas semánticas.
https://package.elm-lang.org/packages/elm/core/latest/Basics#Int
Para describir palabras y oraciones en el código, Elm tiene un tipo String nativo.
Los literales de string se escriben entre comillas dobles, como "Hello World!".
El operador de concatenación de strings ++ y el operador de igualdad == están disponibles por defecto.
hello : String -> String
hello subject = "Hello " ++ subject
hello "World!" --> "Hello World!"
La mayoría de las demás funciones de string están en el módulo String, que hay que importar.
https://package.elm-lang.org/packages/elm/core/latest/String
En este ejercicio vas a escribir algo de código para ayudar a Betty's Bike Shop, una tienda en línea de bicicletas y piezas. Tienes tres tareas, con el objetivo de mostrar correctamente los precios de las bicicletas y las piezas en el sitio web.
penceToPounds
Tu colega ya escribió el esqueleto del módulo, las funciones sin definir penceToPounds y poundsToString.
Sin embargo, olvidó exportar la función penceToPounds, así que por ahora no es visible para otros módulos ni para el conjunto de pruebas.
Agrega penceToPounds a la lista de funciones exportadas.
Actualmente, el precio se guarda como un número entero de peniques (la tienda de bicicletas está en el Reino Unido).
En el sitio web queremos mostrar el precio en libras, donde 1.00 libra equivale a 100 peniques.
Tu segunda tarea es implementar la función penceToPounds, que toma una cantidad de peniques de tipo Int y la convierte en su equivalente en libras de tipo Float.
También debes definir la anotación de tipo de esa función.
penceToPounds 106
--> 1.06
Como las bicicletas de Betty se venden en libras, los precios deben mostrarse con el símbolo «£».
Tu tercera tarea, entonces, es implementar la función poundsToString, que toma una cantidad de libras de tipo Float y devuelve su precio como un String con el símbolo de la libra al inicio.
El módulo String contiene la función String.fromFloat, que te será útil para esto.
Debes importar el módulo String antes de usarlo.
También debes definir la anotación de tipo de poundsToString.
poundsToString 1.06
--> "£1.06"
Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.