Dans mon application, j'ai besoin de sérialiser un vecteur contenant un type de données arbitraire, dans ce cas est une liste de doubles. Pour la sérialisation du vecteur, j'importe Data.Vector.Binary.Data.Vector.Binary chevauche une instance binaire [a]
Lors du chargement du module dans GHCi l'erreur suivante se pose:
Overlapping instances for Binary [Double]
arising from a use of `decode' at Statistics.hs:57:33-42
Matching instances:
instance (Data.Vector.Generic.Base.Vector v a, Binary a) =>
Binary (v a)
-- Defined in Data.Vector.Binary
instance (Binary a) => Binary [a] -- Defined in Data.Binary
Est-ce la liste une instance de Vector? J'ai regardé la documentation mais je n'ai pas pu trouver une telle instance.
Que puis-je faire pour sérialiser cette structure?
Edit:
J'utilise les versions de package suivantes:
- vecteur-0.6.0.2 instances-0.1.2 vecteur binaire-
- binaire 0.5.0.2
Voici également un extrait qui montre le problème, cette fois avec une liste de caractères:
import Data.Binary
import Data.Vector.Binary
import qualified Data.ByteString.Lazy as L
main = L.writeFile "/tmp/aaa" $ encode "hello"
Pourriez-vous s'il vous plaît publier les versions de Binary et Vector que vous utilisez? –
Je suis d'accord que GHCi semble supposer que les listes sont des vecteurs. J'ai regardé le code source pour les instances vectorielles binaires et je ne l'ai pas trouvé. –
Ce n'est pas évident. Edward Kmett a expliqué ce problème il n'y a pas longtemps dans http://stackoverflow.com/questions/3213490/how-do-i-write-if-typeclass-a-then-a-is-also-an-instance-of-b -by-this-definiti –