Consejos para trabajar con Unison en tu computadora a través de la CLI de Exercism
Escribes código de Unison en archivos con el sufijo .u. Los llamamos archivos «scratch» porque los usas para escribir código de Unison, pero el Unison Codebase Manager (UCM) es lo que en última instancia almacena y guarda el contenido en esos archivos. Seguirás enviando estos archivos a través del CLI de Exercism, pero el UCM puede considerarse una «fuente de verdad» para el código de Unison.
Aunque Unison no tiene un REPL (Read Evaluate Print Loop), puedes evaluar rápidamente expresiones de Unison usando «expresiones de observación». En tu archivo con sufijo .u, empieza una línea con > y escribe una expresión a la derecha.
> myFunction 42 "hi"
El UCM mostrará los resultados de evaluar la expresión al guardar el archivo. Esto te puede servir para solucionar problemas en tus implementaciones de los ejercicios.
Para un flujo de trabajo más detallado en Exercism, aquí tienes un video paso a paso sobre cómo implementar y probar un problema de Exercism.
El video paso a paso muestra el flujo de trabajo de una versión anterior de Unison. Consulta el nuevo flujo de trabajo aquí con el nuevo flujo de trabajo de proyectos.
Un código base de Unison se organiza por «espacios de nombres». Los espacios de nombres funcionan un poco como los directorios de un sistema de archivos, solo que en lugar de contener archivos, contienen tus tipos y funciones de Unison. Las rutas de los espacios de nombres se separan con puntos, .. Por ejemplo, podemos referirnos al espacio de nombres Text dentro del espacio de nombres base con base.Text.
Te recomendamos que crees, o que entres con cd, a un espacio de nombres para cada ejercicio que estés completando.
La sintaxis de Unison para gestionar y especificar importaciones es la sintaxis use. Por ejemplo, use base.data.List traería al ámbito todas las funciones del espacio de nombres base.data.List. Esto puede ser útil cuando usas una función como map sobre un List que necesita distinguirse de otras funciones map como Optional.map. También puedes importar funciones específicas escribiendo después del espacio de nombres una lista de funciones separadas por espacios para traerlas al ámbito, como en: use base.data.List tails head flatMap.
Puedes usar la sintaxis use tanto al nivel superior de un archivo como dentro de funciones para especificar importaciones. Las cláusulas use respetan las reglas del ámbito léxico, así que las importaciones más anidadas tienen prioridad sobre las menos anidadas.
La biblioteca estándar de Unison se llama base. De forma predeterminada, se descarga en los nuevos códigos base de Unison. Puedes explorar las funciones disponibles para tus implementaciones en el repositorio en línea de código de Unison, Unison share, o en la interfaz local del código base, o buscando en el Unison Codebase Manager (UCM). Eso lo describimos a continuación.
Puedes ver la lista completa de comandos del UCM escribiendo help en el UCM, pero aquí tienes algunos consejos y convenciones.
Puedes buscar términos por nombre o por prefijo de espacio de nombres en el UCM con el comando find, pero find también permite buscar en un código base por tipo. Para buscar una función por su firma de tipo, escribe find seguido de un espacio y dos puntos, por ejemplo find : [a] -> [[a]].
Puedes listar el contenido de un espacio de nombres con el comando ls, por ejemplo ls base.data.List o ls .exercism.helloWorld. Muchos de los comandos del UCM aceptan argumentos de ruta de espacio de nombres relativos o argumentos de espacio de nombres totalmente cualificados. Las rutas totalmente cualificadas empiezan con un . que representa la «raíz» de tu código base.
Muévete por el UCM con el comando cd en el CLI. Si un espacio de nombres no existe, cd creará uno cuando navegues hacia él. Para subir un nivel de espacio de nombres puedes usar cd ...
Cuando cargo las pruebas, el UCM no encuentra la implementación de mi ejercicio.
Asegúrate de guardar tu archivo stub en tu editor de texto y de update los términos en tu código base antes de cargar las pruebas.
Me estoy topando con conflictos de nombres. No puedo tener dos términos llamados tests.
Puedes tener dos términos con el mismo nombre en espacios de nombres distintos. Si estás completando ejercicios de Exercism, se recomienda crear un espacio de nombres aparte para cada ejercicio, de modo que las pruebas y los stubs queden separados de los demás.
Mis pruebas pasan en local, pero no pasan en el ejecutor de pruebas.
¡Lo sentimos! Primero verifica que tus importaciones no hagan referencia a nada más que a la biblioteca estándar, base, y a las funciones definidas en el archivo scratch que estás probando. Si ese es el caso, avísanos en el Slack de Exercism, canal #track-unison, o abriendo un issue en el repositorio del track de Unison.
Si tienes algún problema, ¡avísanos! 🙂