2011-12-21 9 views
4

jsonライブラリを使用してJSON文字列を解析しようとしています。このコードは、GHCiの中で完璧に動作します:GHCIでjsonパッケージを使用してJSONを解析できますが、GHCでコンパイルした場合は解析できません

import Text.JSON as JS 
JS.decode "{}" :: Result JSValue 

しかし、私はコンパイルされたプログラムで同じコードを使用する場合:

case JS.decode "{}" of 
    JS.Ok value -> putStrLn value 
    JS.Error err -> error err 

文字列を解析することができません:

Unable to read String 

私はそれはちょうど私が何かばかげていると思うが、私は何を理解することはできません....

非常に非常に歓迎!

更新:

私はそれが問題を引き起こしてアプリの他の部分で何かしたかどうかを確認するために、このコードを書いた:

import qualified Text.JSON as JS 

main :: IO() 
main = do 
    case JS.decode "{}" of 
       JS.Ok value -> putStrLn value 
       JS.Error err -> error err 

私はこれと同じエラーを取得しかし:

test: Unable to read String 

これはGHC 7.0.3でコンパイルされ、ソースはvimで編集されました。しかし、アプリケーションの外部から渡された文字列データでも同じエラーが発生します。今考えているうちに本当に...

答えて

3

利用print代わりのputStrLn、:

import qualified Text.JSON as JS 

main :: IO() 
main = do 
    case JS.decode "{}" of 
      JS.Ok value -> print (value :: JSValue) 
      JS.Error err -> error err 
2

これはちょうどJS.decodeの代わりにJS.Decodeという大文字の問題です。以下は、最新のHaskellプラットフォームでうまく動作します。 Stringのみで動作します

module Foo where 
import qualified Text.JSON as JS 

foo :: IO() 
foo = case JS.decode "{}" of 
    JS.Ok value -> putStrLn value 
    JS.Error err -> error err 
+0

おっと、それはタイプミスでした。実際のコードでは小文字ですが、私に考えを与えてくれました:) – PeterM

+1

実際に大文字の問題だった場合は、別のエラーが発生していました。それでも、よく目撃された。 –

関連する問題