Haskell class functions: very confusing error -


i have confusing error in piece of code. using data.aeson package. don't think bug of package.

class toarrayformat      getobjects :: (tojson b) => -> b      toarrayformat :: -> value     toarrayformat = tojson $ getobjects 

this piece of code fail compile error message :

    not deduce (tojson s0) arising use of ‘tojson’ context (toarrayformat a)   bound class declaration ‘toarrayformat’   @ <interactive>:(103,1)-(108,43) type variable ‘s0’ ambiguous in expression: tojson in expression: tojson $ getobjects in equation ‘toarrayformat’:     toarrayformat = tojson $ getobjects 

i'm confused now. getobjects returns tojson b instance can consumed tojson in toarrayformat. can't deduce instance of b getobjects definition? why tojson s0 ambiguous?

the key part:

the type variable ‘s0’ ambiguous 

note tojson has type:

tojson :: tojson b => b -> value 

also, declaration:

getobjects :: (tojson b) => -> b 

says getobjects can convert a any type b in tojson class. instance, if blah value of type a, legally ask for:

getobjects blah :: int getobjects blah :: string getobjects blah :: char 

and convert blah int, string or char since of in tojson class. that's not had in mind, nor getobjects function does.

to understand error message, problem in expression tojson $ getobjects a, ghc doesn't know how type getobjects b - member of tojson class should - int?, string?, char?, other type?

you specify concrete type this:

toarrayformat = tojson $ (getobjects :: char) 

but, i've said, that's not had in mind.


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -