Skip to content

Instantly share code, notes, and snippets.

@UnkindPartition
Created May 18, 2013 15:53
Show Gist options
  • Save UnkindPartition/5604887 to your computer and use it in GitHub Desktop.
Save UnkindPartition/5604887 to your computer and use it in GitHub Desktop.
aeson's parser non-deterministic behaviour
{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
import Data.Aeson
import Data.Aeson.TH
import qualified Data.ByteString.Lazy as BS
import Control.Applicative
import Control.Monad
instance FromJSON GName where
parseJSON (Object v) =
GName <$>
v .: "module" <*>
v .: "name"
parseJSON _ = empty
data SymValueInfo
= SymValue { sv_origName :: GName, sv_fixity :: Maybe String }
| Other
data GName = GName String String
deriveFromJSON (drop 3) ''SymValueInfo
{-# NOINLINE mydecode #-}
mydecode :: BS.ByteString -> Either String [[SymValueInfo]]
mydecode = eitherDecode
main = do
let path = "prim.json"
c <- BS.readFile path
forM_ (replicate 2000 c) $ \c ->
print $ void $ mydecode c
[
[
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
},
{
"SymValue": {
"origName": {
"name": "*#",
"module": "GHC.Prim"
},
"fixity": null
}
}
]
,
[]
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment