Программы PureScript экспортируют основную функцию, которая вызывается при запуске программы. Но неясно, как передать ему аргументы и возможно ли это.
Рассмотрим следующую простую программу, которая пишет строку с заглавной буквы.
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 ) )
Какие выходы
SATISFACTION RATING: 8.23
Эта программа выполняется при spago runвызове.
Мой вопрос заключается в следующем: как аргумент messageв примере кода может быть передан через командную строку, создавая собственный заглавный символ сообщения?
Обновленная команда запуска будет выглядеть примерно так:
spago run --message="new_message"
И обновленный вывод будет выглядеть так
NEW_MESSAGE
Короче говоря, как вы передаете значения программе PureScript извне?
Решение проблемы
Когда вы запускаете программу PureScript с помощью spago run, она запускается под управлением Node. Следовательно, чтобы получить аргументы командной строки, вам нужно, как Node.
И посмотрите: есть привязка PureScript для соответствующих средств Node — функцияargv из purescript-node-process. Это эффект, который возвращает массив аргументов:
import Node.Process (argv)
main = do
args <- argv
log $ show args
Беглый осмотр spago run --helpпоказывает, что аргументы могут быть переданы в программу через -bпараметр:
spago run -b somearg
Для нескольких аргументов укажите их в кавычках:
spago run -b "somearg anotherarg"
Обратите внимание, что это работает в Linux (и, предположительно, в macOS), но не работает в Windows, где Spago по какой-то причине игнорирует кавычки и пытается интерпретировать anotherargкак собственный аргумент. Это явно ошибка. Этот вопрос представляется актуальным.
Комментариев нет:
Отправить комментарий