$ cabal sandbox init
$ cabal install aeson
$ ghci
Prelude> :set prompt "> "
> :set -XOverloadedStrings
> :l Deep.hs
[1 of 1] Compiling Deep ( Deep.hs, interpreted )
Ok, modules loaded: Deep.
> -- some data:
> jsonTxt
"{\"foo\":{\"bar\":{\"baz\":\"deeeeeep\"}}}"
> -- go deep
> decodeP (top >>: "foo" >>: "bar" >>: "baz") jsonTxt :: Either String Text
Right "deeeeeep"
> -- continue parsing at depth
> let checkString = (\s -> when (s /= "quux") (fail $ "unexpected string: " ++ show s)) :: Text -> Parser ()
> decodeP (top >>: "foo" >>: "bar" >>: "baz" >=> checkString) jsonTxt
Left "unexpected string: \"deeeeeep\""