2016-05-04 2 views
2

Как один FFI в Javascript, используя модули Elm's Native, когда термин имеет более одного аргумента функции? Каков способ, которым висет шалфей? Я думаю, что я видел какие-то прогнозы для кортежей, поэтому я остался в стороне от этого и не предполагал, что функции были неровными, но теперь я не уверен, что получаю ошибку типа в своей функции. Вот что у меня есть для моего Native/Foo.js модуля:Elm Native с несколькими Arity

var make = function make(elm) { 
    elm.Native = elm.Native || {}; 
    elm.Native.Foo = elm.Native.Foo || {}; 

    var Result = Elm.Result.make(elm); 

    // Int -> Int -> Int -> Result String Date 
    function someDay (year,month,day) { 
     var d = new Date(year,month-1,day); 
     return isNaN(d.getTime()) 
      ? Result.Err('unable to make date: ' 
          + JSON.stringify({ 
           "year": year, 
           "month": month, 
           "day": day 
          }) 
         ) 
      : Result.Ok(d) 
    } 

    if (elm.Native.Foo.values) return elm.Native.Foo.values; 

    return elm.Native.Foo.values = { 
     'someDay': someDay 
    }; 
}; 

Elm.Native.Foo = {}; 
Elm.Native.Foo.make = make; 

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

module Foo where 

import Native.Foo 

import Date exposing (Date, Month) 
import Date.Extra.Core exposing (monthToInt)  

someDay : Int -> Month -> Int -> Date 
someDay y m d = 
    case Native.Today.someDay y (monthToInt m) d of 
    Ok d -> d 
    Err e -> Debug.crash e 

Это компилируется нормально, но когда я пытаюсь запустить свое приложение, я получаю следующую ошибку:

TypeError: fun(...) is not a function 

Есть ли что-то, что я делаю неправильно здесь?

ответ

2

Чтобы обработать необработанные функции javascript, используйте функции F2, F3 .... По умолчанию они находятся в глобальном масштабе, поэтому исправить это просто так:

// ... 
    return elm.Native.Foo.values = { 
     'someDay': F3(someDay) 
    }; 
Смежные вопросы