С 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
Должны ли первые два аргумента всегда быть идентичными?и в каких случаях они могут иметь разные значения?