Как я могу загрузить внешний файл JavaScript в Pure-Script?
Все внешние операторы импорта встроены в код javascript, но я хочу загрузить их из внешнего файла.
Как я могу загрузить внешний файл JavaScript в Pure-Script?
Все внешние операторы импорта встроены в код javascript, но я хочу загрузить их из внешнего файла.
Вы можете обернуть стандартную глобальную функцию commonjs require
, используя файл ffi.
foreign import require :: forall a. String -> a
Затем вы можете импортировать библиотеку так
-- Tell the compiler the structure of what you're importing.
type MyLibrary = {
add :: Number -> Number -> Number
}
-- Call the require function and import the library.
-- We need an explicit type annotation so the compiler know what's up
myLib = require './mylib' :: MyLibrary
main = do
let x = myLib.add 1 2
doSomethingWith x
Имейте в виду, что purescript предполагает, что функции во внешней библиотеке были каррированы. Если вам нужно вызвать функцию, которая принимает несколько аргументов, вам понадобится немного больше шаблонов, то есть использование mkFn.
Подробнее о том, как это сделать, смотрите здесь.
https://github.com/purescript/purescript/wiki/FFI-tips
Дополнительное примечание: в этом примере 'require' реализовано как чистая функция, однако, если используемая вами библиотека выполняет побочные эффекты во время импорта (что, к сожалению, не редкость), вы должны вместо этого определить функцию requireEff
, которая оборачивает импорт в монада Eff.