Elm Native with Multiple Arity

Elm Native with Multiple Arity

本文关键字:Arity Multiple with Native Elm      更新时间:2023-09-26

当一个术语对一个函数有多个参数时,如何使用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函数,请使用F2F3。。。功能。默认情况下,它们在全局范围内,因此要解决此问题,请执行以下操作:

// ...
    return elm.Native.Foo.values = {
        'someDay': F3(someDay)
    };