В чем разница между первыми двумя аргументами, заданными пользовательскому препроцессору Haskell при вызове с помощью -F -pgmF? - PullRequest
2 голосов
/ 23 мая 2019

С GHC 8.6.5 Руководство пользователя $ 10.11.3 :

Используйте -pgmF cmd, чтобы выбрать программу для использования в качестве препроцессора.При вызове препроцессор cmd в командной строке задает как минимум три аргумента: первый аргумент - это имя исходного исходного файла, второй - имя файла, содержащего ввод, а третий - имяфайла, в который cmd должен записать свой вывод.

Я попытался написать пример препроцессора, чтобы увидеть, в чем разница между тремя аргументами, передаваемыми препроцессору.

У меня есть следующие два файла:

Main.hs

{-# OPTIONS_GHC -F -pgmF preprocess.sh #-}

preprocess.sh

#!/bin/sh

echo $1 " -- the original source file"
echo $2 " -- file holding the input"
echo $3 " -- the file where cmd should write its output to"

echo "{-# LINE 1 \"$2\" #-}\nmain = return ()" > $3

Когда я компилирую файл на Haskell, используя ghc, я получаю следующий вывод:

Main.hs  -- the original source file
Main.hs  -- file holding the input
/tmp/ghc13496_0/ghc_1.hspp  -- the file where cmd should write its output to

Должны ли первые два аргумента всегда быть идентичными?и в каких случаях они могут иметь разные значения?

...