Шаблоны на Haskell / Julius - невозможно объединить переменные

Я думаю, что есть кое-что, что я не понимаю о том, как работает сращивание в julius, ни один из встроенных типов не срастется. Единственный способ получить код для компиляции - это rawJS.

Например:

import Prelude.Unicode
import Text.Julius

import Text.Shakespeare    -- not sure if this is needed
import Text.Shakespeare.Text    -- not sure if this is needed
...


test = renderJavascript $ jsCode (⊥)
  where
    yval = rawJS $ show (3 ∷ Int) -- works
    -- yval = show (3 ∷ Int) -- no instance of toJavascript
    -- yval = 3 ∷ Int -- no instance of toJavascript
    jsCode = [js|
      var y = #{yval};
      |]

FWIW Я не использую yesod, просто шаблон библиотеки julius, но здесь это не имеет значения, я думаю.

Если я пытаюсь соединить сам Int, я получаю сообщение об ошибке:

No instance for (ToJavascript Int)
  arising from a use of ‘toJavascript’
In the expression: toJavascript yval
In the first argument of ‘mconcat’, namely
  ‘[Javascript
      ((Data.Text.Internal.Builder.fromText . pack')
         "\n\
         \      var y = "),
    toJavascript yval,
    Javascript
      ((Data.Text.Internal.Builder.fromText . pack')
         ";\n\
         \      ")]’
In the expression:
  mconcat
    [Javascript
       ((Data.Text.Internal.Builder.fromText . pack')
          "\n\
          \      var y = "),
     toJavascript yval,
     Javascript
       ((Data.Text.Internal.Builder.fromText . pack')
          ";\n\
          \      ")]

1 ответ

Как может сказать вам документация, ToJavascript класс имеет только экземпляры

  • Bool
  • RawJavaScript
  • и JSONValue с. Это то, что вы хотите использовать.


import Data.Aeson    

test = renderJavascript $ jsCode (⊥)
  where
    yval = Number 3
    jsCode = [js|
      var y = #{yval};
      |]

...или если yint = 3 :: Int дано, yval = Number $ fromIntegral yint, Оба используют тот факт, что Numberконструктор используетNumтип (чтобы вы могли использовать числовые литералы, а также стандартные функции преобразования), а именноScientific,

Почему, если есть класс ToJavascript во всяком случае, они также не предлагают по крайней мере экземпляр для Int, Я понятия не имею.

Другие вопросы по тегам