具有多个 Arity 的 Elm Native
Elm Native with Multiple Arity
当一个术语对一个函数有多个参数时,如何使用 Elm 的 Native
模块将一个 FFI 变成 Javascript?榆树洗牌的方式是什么?我想我已经看到了元组的某种预测,所以我远离它并且没有假设函数是非柯里化的,但我现在不确定我的函数是否出现类型错误。这是我的 Native/Foo.js
模块:
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
我这里有什么地方做错了吗?
要咖喱原始 javascript 函数,请使用 F2
、F3
... 函数。默认情况下它们在全局范围内,因此要解决此问题只需执行以下操作:
// ...
return elm.Native.Foo.values = {
'someDay': F3(someDay)
};
当一个术语对一个函数有多个参数时,如何使用 Elm 的 Native
模块将一个 FFI 变成 Javascript?榆树洗牌的方式是什么?我想我已经看到了元组的某种预测,所以我远离它并且没有假设函数是非柯里化的,但我现在不确定我的函数是否出现类型错误。这是我的 Native/Foo.js
模块:
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
我这里有什么地方做错了吗?
要咖喱原始 javascript 函数,请使用 F2
、F3
... 函数。默认情况下它们在全局范围内,因此要解决此问题只需执行以下操作:
// ...
return elm.Native.Foo.values = {
'someDay': F3(someDay)
};