当我将记录传递给javascript时,它可以工作:
data Record = Record {
elem :: String
}
doSomethingForeign :: Record -> Fay ()
doSomethingForeign = ffi " callJsFun(%1) "
但是当函数不是单态时,记录不会被评估,需要手动完成:
class Passable a
instance Passable Record
instance Passable Text
doSomethingForeign' :: (Passable a) => a -> Fay ()
doSomethingForeign' = ffi " callJsFun(Fay$$_(%1)) "
这是一个简单的情况,当额外的类型Fay$$_
不是那么烦人时,但是如果我将带有类型参数的更复杂的结构传递给 js,那么添加就Fay$$_
不会解决它。我想知道规则,什么时候应用对本机 js 类型的评估,什么时候不应用。