Haskell 用朱利叶斯在外面

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(

我正试图弄清楚如何使用独立的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(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       
}