Ошибки переполнения экземпляров [дубликат]

Я не видел, чтобы кто-то упоминал этот метод, но 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 с правильным пространством имен отдельно или он не будет работать.

8
задан duplode 14 August 2015 в 15:00
поделиться

2 ответа

По моему мнению, это не будет перекрываться, так как [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)]

, что означает, что вы перекрываетесь (независимо от того, какие экземпляры действительно существуют и какие ограничения имеют каждый из двух экземпляров).

Если выбран экземпляр, то ограничения принимая во внимание, и если они не выполняются, это ошибка типа.

17
ответ дан Daniel Fischer 15 August 2018 в 22:20
поделиться
  • 1
    спасибо за очень подробное объяснение – Jammy Lee 28 May 2013 в 10:52
  • 2
    Кстати: чуть позже в книге указывается, что вы можете использовать прагму OverlappingInstances для «решения». "проблема" описанных в этом ответе. Лично я не понимаю, почему так оно и есть. Надеюсь, когда-нибудь я его выпью. – Brendan 11 August 2014 в 16:49

Они существуют

ghci> :i ToJSON
...
instance ToJSON [Char]
...
instance (ToJSON a, ToJSON b) => ToJSON (a, b)

. Таким образом, было бы перекрытие, даже если бы GHC учитывал контекст (см. ответ Даниэля Фишера).

5
ответ дан J. Abrahamson 15 August 2018 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: