[Haskell-beginners] Deserializing data with ProtocolBuffers

Daniel Fischer daniel.is.fischer at googlemail.com
Thu May 12 18:39:10 CEST 2011


On Thursday 12 May 2011 18:21:45, Raphael Päbst wrote:
> Hey!
> I am currently working on a project, where I need to serialize data
> with ProtocolBuffers.
> I have managed to compile a .proto file and serialize messages with
> messagePut. However, when I try to deserialize a ByteString again, I
> get the following error:
> 
> ambiguous type variable `msg0' in the constraints:
> (Text.ProtocolBuffers.WireMessage.Wire msg0) arising from a use of
> "messageGet" at...
> (Text.ProtocolBuffers.Reflections.ReflectDescriptor msg0) arising from
> a use of "messageGet" at ...
> Probable fix: add a type signature that fixes these type variables in
> the expression "messageGet bs"
> in an equation for `IT':  "IT = messageGet bs"
> 
> I'm trying to call messageGet from the prompt in ghc. What exactly am
> I doing wrong? And how can I fix this?

You have to tell it which type you want, so it can choose the correct 
messageGet.

If you type

ghci> read "True"

it doesn't know either and you have to tell it (and of course the result 
would be different for result type Bool than for Integer).

So you have to type

ghci> messageGet bs :: WhateverWireYouWant

to disambiguate the type.

In programmes, there's rarely a need to provide such expression type 
signatures because the type can usually be inferred from the context.
If there's not enough context to infer the type - especially if there's no 
context - you have to provide an explicit type.

> 
> Many Thanks
> 
> Raphael



More information about the Beginners mailing list