En mi aplicación necesito serializar un vector que contiene un tipo de datos arbitrario, en este caso es una lista de Dobles. Para serializar el vector, estoy importando Data.Vector.Binary.Data.Vector.Binary se superpone a la instancia binaria [a]
Al cargar el módulo en GHCi surge el siguiente error:
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
es la Lista de una instancia de Vector? Revisé la documentación pero no pude encontrar dicha instancia.
¿Qué puedo hacer para poder serializar esta estructura?
Editar:
estoy usando las siguientes versiones de paquetes:
- vectores 0.6.0.2
- vector de binario instancias-0.1.2
- binary-0.5.0.2
También aquí hay un fragmento que muestra el problema, esta vez con una lista de caracteres:
import Data.Binary
import Data.Vector.Binary
import qualified Data.ByteString.Lazy as L
main = L.writeFile "/tmp/aaa" $ encode "hello"
¿Podría publicar las versiones de Binario y Vector que está utilizando? –
Estoy de acuerdo en que GHCi parece estar asumiendo que las listas son vectores. He buscado en el código fuente para vector-binary-instances y no lo encontré. –
No es obvio. Edward Kmett explicó este problema no hace mucho en http://stackoverflow.com/questions/3213490/how-do-i-write-if-typeclass-a-then-a-is-also-an-instance-of-b -por-esto-definiti –