Подключите новый метод FFI в GHC - PullRequest
7 голосов
/ 24 марта 2012

Есть ли способ подключить функцию Haskell типа

myFFI :: (C a) => String -> IO a

(где C - это некоторый класс типов, описывающий типы переменных, которые я могу импортировать) в GHC как схему FFI, чтобы я могнапишите в моей программе на Haskell такие вещи, как

foreign import myFFI "foo" foo :: T1 -> T2

, которые компилируются в вызов foo = unsafePerformIO $ myFFI "foo" :: T1 -> T2?

Я думаю, что это можно сделать, изменив GHC, но есть ли способэто через плагин я могу написать, не касаясь собственно кодовой базы GHC?

Ответы [ 2 ]

1 голос
/ 18 февраля 2013

Чтобы ответить на вопрос в комментариях (поскольку на главный вопрос отвечает «использовать TH»), вы также можете использовать TH, чтобы собрать список всех имен, которые вы таким образом связали.Затем при запуске вызов init может пройти через это и вызвать их.

0 голосов
/ 23 мая 2012

Нет требования, чтобы второй аргумент был в первую очередь монадой ввода-вывода.

foreign import ccall sin :: Double -> Double

совершенно законно, но ведет к неопределенному поведению, если грех нечист.

...