在 Yesod 之外使用 Julius
using Julius outside Yesod
我正在尝试弄清楚如何在 yesod 之外使用独立的 Julius 发出 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(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
...
请帮忙。我不知道它需要什么,我刚刚开始关注 Julius。如果我删除插值,那么它会成功呈现文本。
试试这个:
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
class 显示这些实例是默认定义的:
ToJavascript Bool
ToJavascript Value
ToJavascript RawJavascript
缺少 Int
(或 Integer
)实例解释了错误消息。
但是,有一个 Value
实例,通过使用 Aeson 库中的 toJSON
,我们可以将 Int
变成 Value
。
使用 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
}
我正在尝试弄清楚如何在 yesod 之外使用独立的 Julius 发出 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(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
...
请帮忙。我不知道它需要什么,我刚刚开始关注 Julius。如果我删除插值,那么它会成功呈现文本。
试试这个:
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
class 显示这些实例是默认定义的:
ToJavascript Bool
ToJavascript Value
ToJavascript RawJavascript
缺少 Int
(或 Integer
)实例解释了错误消息。
但是,有一个 Value
实例,通过使用 Aeson 库中的 toJSON
,我们可以将 Int
变成 Value
。
使用 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
}