javascript - 具有多种数量的 Elm Native

标签 javascript ffi currying elm

当一个术语对一个函数有多个参数时,FFI 如何使用 Elm 的 Native 模块将其转换为 Javascript? elm 的洗牌方式是什么?我想我已经看到了某种元组的投影,所以我远离了它并且没有假设函数是非柯里化(Currying)的,但我现在不确定我的函数中是否出现了类型错误。这是我的 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;

在我尝试使用它的模块中,我假设它已经被柯里化(Currying)了:

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

我在这里做错了什么吗?

最佳答案

要柯里化(Currying)原始 JavaScript 函数,请使用 F2F3... 函数。默认情况下,它们位于全局范围内,因此要解决此问题,只需执行以下操作:

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

关于javascript - 具有多种数量的 Elm Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039870/

相关文章:

javascript - 无法在全局变量中存储值

javascript - 什么是 JSONP,为什么要创建它?

c++ - 在 Rust FFI 中将数组从 C++ 返回到 Rust

c - Rust 字符串和 C 可变参数函数

Grails:绝妙的子集合

javascript - 在 mouseenter div 上动画轻松

javascript - 如果特定的 HTML 标签之间包含特定字符串,则使用正则表达式

c - 如何调用函数 glMultiDrawElements::GLenum -> GHC.Ptr.Ptr GLsizei -> GLenum -> GHC.Ptr.Ptr (GHC.Ptr.Ptr a) -> GLsizei -> IO ()

racket - 在打字 Racket 中进行 curry

f# - 反向柯里化(Currying)?