Когда я прохожу запись в JavaScript, он работает:Попутный записи в FFI
data Record = Record {
elem :: String
}
doSomethingForeign :: Record -> Fay()
doSomethingForeign = ffi " callJsFun(%1) "
Но когда функция не monomorphical, запись не оценивается, необходимо сделать это вручную:
class Passable a
instance Passable Record
instance Passable Text
doSomethingForeign' :: (Passable a) => a -> Fay()
doSomethingForeign' = ffi " callJsFun(Fay$$_(%1)) "
Это простой случай, когда дополнительная набивка Fay$$_
не является чем-то раздражающим, но если я передаю более сложные структуры с параметрами типа js, то добавление только Fay$$_
не решит его. Я хотел бы знать правило, когда применяется оценка для родных js-типов, а где нет.