Я не видел, чтобы кто-то упоминал этот метод, но document.createElementNS()
полезен в этом случае.
Вы можете создавать элементы, используя ванильный Javascript, как обычные DOM-узлы с правильным пространством имен, а затем jQuery-ify их оттуда. Например:
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'),
circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
var $circle = $(circle).attr({ //All your attributes });
$(svg).append($circle);
Единственная нижняя сторона заключается в том, что вам нужно создать каждый элемент SVG с правильным пространством имен отдельно или он не будет работать.
По моему мнению, это не будет перекрываться, так как
blockquote>[a]
не должен быть выбором, так как ограничение наJSON [a]
заключалось в том, чтоa
должен быть экземпляром самогоJSON
. Для(String, a)
нет экземпляраJSON
.Это недоразумение. GHC делает выбор экземпляра, учитывающий только головку экземпляра, а не какие-либо ограничения на экземпляры.
instance (JSON a) => JSON [a] where
означает, что для выбора экземпляра будет тот же, что и
instance JSON [a] where
также контекст
instance (JSON a) => JSON [(String, a)] where
игнорируется, например, для выбора.
Таким образом, GHC видит два экземпляра
instance JSON [a] instance JSON [(String, a)]
, и они оба соответствуют требуемому
instance JSON [(String, String)]
, что означает, что вы перекрываетесь (независимо от того, какие экземпляры действительно существуют и какие ограничения имеют каждый из двух экземпляров).
Если выбран экземпляр, то ограничения принимая во внимание, и если они не выполняются, это ошибка типа.
Они существуют
ghci> :i ToJSON
...
instance ToJSON [Char]
...
instance (ToJSON a, ToJSON b) => ToJSON (a, b)
. Таким образом, было бы перекрытие, даже если бы GHC учитывал контекст (см. ответ Даниэля Фишера).
OverlappingInstances
для «решения». "проблема" описанных в этом ответе. Лично я не понимаю, почему так оно и есть. Надеюсь, когда-нибудь я его выпью. – Brendan 11 August 2014 в 16:49