[Haskell-cafe] corner case in Text.JSON 0.4.3

Don Stewart dons at galois.com
Thu May 13 01:05:21 EDT 2010


martin:
> hi,
>
> since i got no answer from the maintainer, maybe someone else can take  
> care of it, or at least point out, what i did wrong.
>
> so, i recently stumbled upon some error while using Text.JSON 0.4.3 [1]:
>
>   Text/JSON/String.hs:(127,4)-(137,49): Non-exhaustive patterns in case
>
> indeed ghc warned:
>
>   [5 of 7] Compiling Text.JSON.String ( Text/JSON/String.hs,  
> dist/build/Text/JSON/String.o )
>
>   Text/JSON/String.hs:127:4:
>       Warning: Pattern match(es) are non-exhaustive
>                In a case alternative: Patterns not matched: []
>
> from looking at the code i couldn't see how this would ever happen, but  
> you can reproduce it be running the files from [2]:
>
>   $ ./test < problem
>   Ok (JSArray [JSString (JSONString {fromJSString = "this"}),JSString  
> (JSONString {fromJSString = "is"}),JSString (JSONString {fromJSString =  
> "some"}),JSString (JSONString {fromJSString = "json"}),JSObject  
> (JSONObject {fromJSObject = [("that",JSString (JSONString {fromJSString  
> = "works"}))]})])
> test: Text/JSON/String.hs:(127,4)-(137,49): Non-exhaustive patterns in case
>
> the patch i put there fixes it (at least for me) to return an Error  
> instead of dying:
>
>   $ ./test < problem
>   Ok (JSArray [JSString (JSONString {fromJSString = "this"}),JSString  
> (JSONString {fromJSString = "is"}),JSString (JSONString {fromJSString =  
> "some"}),JSString (JSONString {fromJSString = "json"}),JSObject  
> (JSONObject {fromJSObject = [("that",JSString (JSONString {fromJSString  
> = "works"}))]})])
>   Error "Unexpected end of String: does"
>   Error "Malformed JSON: invalid token in this context not\"]"
>   test: <stdin>: hGetLine: end of file
>
> have fun
> martin hilbig
>
> [1]: http://hackage.haskell.org/package/json
> [2]: http://friendpaste.com/3IvnChRMoczf0mIKpOtrYE

Send me the patch :-)


More information about the Haskell-Cafe mailing list