2015-02-18 2 views
1

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

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

+0

Почему бы просто не включить файл JavaScript на свою страницу или использовать FFI для загрузки файла JavaScript с помощью загрузчика вашего модуля? –

+0

Я не в среде браузера. Я планирую генерировать код JavaScript в haskellish способом. У меня есть файл javascript с объектами и вспомогательными функциями. Я хотел бы ссылаться на эти объекты js в предписывающем приложении. Но я думаю, что это невозможно, потому что в этом случае prescript wourl должен проанализировать внешний файл js и создать внутреннее представление всех объектов. Я очень новичок в purescript, и я думаю, что неправильно понимаю его работу. Конечно, я могу встроить весь код с иностранным импортом, но я думал, что могу импортировать существующую библиотеку js из внешнего файла. – agreif

+0

Вы можете определенно дать типы своим функциям с помощью FFI, и вам, вероятно, не нужно писать встроенные JS, но это зависит от структуры вашей библиотеки. Я бы предложил посмотреть одну из многих библиотек в организации purecript-contrib GitHub. –

ответ

4

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

Примечание стороны - «требуют» реализован в виде чистой функции в этом примере, однако, если библиотека вы используете Исполняет побочные эффекты во время импорта (который, к сожалению, не редкость), вы должны вместо определите функцию requireEff, которая обертывает импорт в монаде Eff.

Смежные вопросы