如何在 PureScript FFI 中映射 0 参数 JavaScript 函数

How to map a 0-argument JavaScript function in PureScript FFI

我正在尝试使用 FFI 将以下 JavaScript 函数导入 PureScript:

function getGreeting() {
  return "Hi, welcome to the show."
}

但我不确定应该是什么类型。我最接近的是:

foreign import getGreeting :: Unit -> String

我确实希望 getGreeting 保留一个函数,而不是将其转换为常量。

有没有更好的写法?如果我在 PureScript 本身中使用该类型的签名定义一个虚拟函数,我试图看看 PureScript 会做什么:

var getGreeting = function (v) {
  return "Hi, welcome to the show.";
};

有没有办法摆脱未使用的 v 参数?

TIA

有一个非常有用的包purescript-functions,它在这种情况下很有用,如果你真的必须按原样从 Purescript 调用这个函数(因为我认为它 IS 真的只是一个常数)你可以试试:

module Main where

import Prelude
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Console (CONSOLE, log)
import Data.Function.Uncurried (Fn0, runFn0)

foreign import getString ∷ Fn0 String

main :: forall e. Eff (console :: CONSOLE | e) Unit
main = do
  log (runFn0 getString)

我创建了这个简单的 javascript 模块,因此可以测试这个示例:

/* global exports */
"use strict";

// module Main

exports.getString = function() {
  return "my constant string ;-)";
};

Unit -> String 是一个非常好的类型,或者 forall a. a -> String。后一种类型可能看起来过于宽松,但我们可以肯定地知道 a 由于参数化而未被使用,因此函数仍然必须是常量。