[Haskell-beginners] no instance for monad

Daniel Trstenjak daniel.trstenjak at gmail.com
Sat Oct 20 22:34:27 CEST 2012


On Sat, Oct 20, 2012 at 10:12:39PM +0200, Emmanuel Touzery wrote:
> Thank you, you're right again. I had actually tried that but it failed and
> I didn't look at the compilation error hard enough.
> 
> It said:
> Ambiguous type variable `t0' in the constraints:
>       (Data.Text.Buildable.Buildable
>          t0) arising from a use of `TF.hprint' at JsonWriter.hs:94:17-25
>       (Data.String.IsString t0) arising from the literal `"b"'
>                                 at JsonWriter.hs:94:49-51
> 
> And now that thanks to your email I knew this was the right direction, I
> read properly the error message and got to that working solution:
> 
> TF.hprint handle " {} {}" ["a" :: T.Text, "b" :: T.Text]
> 
>  Unfortunately it's not very compact. I guess the problem is that this
> Buildable data can take either a String or a Text and because I build with
> OverloadedStrings the compiler doesn't know which one to prioritize?

The issue arises, because Text and a type of the Json library you're
using, both have an instance for the type class IsString, which is
the base for the OverloadedStrings extension.

I don't now if there's a "nicer" way to tell GHC which one it should use.

Instead of giving each element a type you could give the whole list a type:
["a", "b"] :: [T.Text]


Greetings,
Daniel



More information about the Beginners mailing list