Los programas PureScript exportan una función principal que se invoca cuando ejecuta el programa. Pero no está claro cómo pasarle argumentos, o si eso es posible.
Considere el siguiente programa simple, que escribe en mayúscula una cadena.
module Main where import Effect (Effect) import Effect.Console (log) import Prelude (Unit, discard) import Data.String (toUpper) message :: String message = "Satisfaction Rating: 8.23" main ∷ Effect Unit main = do log ( toUpper ( message ) )que salidas
SATISFACTION RATING: 8.23 Este programa se ejecuta cuando se invoca spago run .
Mi pregunta es la siguiente: ¿Cómo se puede pasar el message de argumento en el ejemplo de código a través de la línea de comando, creando un mensaje personalizado en mayúsculas?
El comando de ejecución actualizado se vería así:
spago run --message="new_message"Y la salida actualizada se vería así
NEW_MESSAGEEn resumen, ¿cómo se pasan valores a un programa PureScript desde el exterior?
Cuando ejecuta un programa PureScript con spago run , se ejecuta bajo Node. Por lo tanto, para obtener argumentos de la línea de comandos, debe hacerlo como Node.
Y mire: hay un enlace de PureScript para las instalaciones de Node relevantes: la función argv de purescript-node-process . Es un efecto que devuelve una serie de argumentos:
import Node.Process (argv) main = do args <- argv log $ show args Un examen rápido de spago run --help revela que los argumentos se pueden pasar al programa a través del parámetro -b :
spago run -b someargPara argumentos múltiples, cítelos:
spago run -b "somearg anotherarg" Tenga en cuenta que esto funciona en Linux (y presumiblemente en macOS), pero falla en Windows, donde Spago, por alguna razón, ignora las comillas e intenta interpretar anotherarg como su propio argumento. Esto es claramente un error. Este tema parece relevante.