Haskell 用朱利叶斯在外面
我正试图弄清楚如何使用独立的Julius outside YesSOD发出Javascript代码:Haskell 用朱利叶斯在外面,haskell,yesod,yesod-julius,Haskell,Yesod,Yesod Julius,我正试图弄清楚如何使用独立的Julius outside YesSOD发出Javascript代码: {-# LANGUAGE QuasiQuotes #-} import qualified Data.Text.Lazy.IO as LazyIO import Text.Julius main = do let delta = 1 :: Int LazyIO.putStrLn $ renderJavascript $ [julius| function f(
{-# LANGUAGE QuasiQuotes #-}
import qualified Data.Text.Lazy.IO as LazyIO
import Text.Julius
main = do
let delta = 1 :: Int
LazyIO.putStrLn $ renderJavascript $ [julius|
function f(x) {
return x + #{delta};
}
|] undefined
但我得到了这个错误:
t2.hs:8:48:
No instance for (ToJavascript Integer)
arising from a use of ‘toJavascript’
In the expression: toJavascript delta
...
请帮忙。我不知道它需要什么,我刚开始看着朱利叶斯。如果删除插值,则会成功渲染文本。尝试以下操作:
import qualified Data.Text.Lazy.IO as LazyIO
import Text.Julius
import Data.Aeson
main = do
let delta = toJSON (1 :: Int)
LazyIO.putStrLn $ renderJavascript $ [julius|
function f(x) {
return x + #{delta};
}
|] undefined
说明:
错误消息说,delta
需要一个ToJavascript
实例。查找ToJavascript
类显示默认情况下定义了这些实例:
ToJavascript Bool
ToJavascript Value
ToJavascript RawJavascript
缺少Int
(或Integer
)实例解释了错误消息
但是,有一个
值
实例,通过使用Aeson库中的toJSON
,我们可以将Int
转换为值
,使用rawJS
应该可以工作:
{-# LANGUAGE QuasiQuotes #-}
import qualified Data.Text.Lazy.IO as LazyIO
import Text.Julius
main = do
let delta = rawJS $ show (1 :: Int)
LazyIO.putStrLn $ renderJavascript $ [julius|
function f(x) {
return x + #{delta};
}
|] undefined
将产生:
function f(x) {
return x + 1
}