我正在尝试使用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
答案 0 :(得分:2)
有一个非常有用的包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 ;-)";
};
答案 1 :(得分:2)
Unit -> String
是一个非常好的类型,或者forall a. a -> String
。后一种类型似乎过于宽松,但我们确信a
由于参数化而未被使用,因此函数仍然必须是常量。