загрузка внешнего файла javascript в purescript

Как я могу загрузить внешний файл JavaScript в Pure-Script?

Все внешние операторы импорта встроены в код javascript, но я хочу загрузить их из внешнего файла.


person agreif    schedule 18.02.2015    source источник
comment
Почему бы просто не включить файл JavaScript на свою страницу или использовать FFI для загрузки файла JavaScript с помощью загрузчика модулей?   -  person Phil Freeman    schedule 18.02.2015
comment
Я не в среде браузера. Я планирую генерировать javascript-код на хаскеле. У меня есть файл javascript с объектами и вспомогательными функциями. Я хотел бы сослаться на эти объекты js в приложении prescript. Но я думаю, что это невозможно, потому что в этом случае prescript wourl должен разобрать внешний файл js и создать внутреннее представление всех объектов. Я очень новичок в purescript, и я думаю, что немного неправильно понимаю его работу. Конечно, я могу встроить весь код с помощью внешнего импорта, но я подумал, что могу импортировать существующую библиотеку js из внешнего файла.   -  person agreif    schedule 19.02.2015
comment
Вы определенно можете указать типы своим функциям, используя FFI, и вам, вероятно, не нужно писать встроенный JS, но это зависит от структуры вашей библиотеки. Я бы посоветовал взглянуть на одну из многих библиотек в организации GitHub purescript-contrib.   -  person Phil Freeman    schedule 19.02.2015


Ответы (1)


Вы можете обернуть стандартную глобальную функцию 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.

person James Davies    schedule 06.03.2015