Phrasing/code improvements to README
Getty Ritter
9 years ago
126 | 126 | could easily be written by hand as |
127 | 127 | |
128 | 128 | ~~~~ |
129 | *Data.SCargot.General> let mySpec = addReader '\'' (fmap go) spec | |
130 | where go c = SCons (SAtom "quote") (SCons c SNil) | |
131 | *Data.SCargot.General> decode (asRich mySpec) "(1 2 '(3 4))" | |
132 | Right [RSList [RSAtom "1",RSAtom "2",RSList [RSAtom "quote",RSList [RSAtom "3",RSAtom "4"]]]] | |
129 | *Data.SCargot.General> let doQuote c = SCons (SAtom "quote") (SCons c SNil) | |
130 | *Data.SCargot.General> let qReader = addReader '\'' (\ p -> fmap doQuote p) | |
131 | *Data.SCargot.General> decode (qReader mySpec) "'foo" | |
132 | Right [SCons (SAtom "quote") (SCons (SAtom "foo") SNil)] | |
133 | 133 | ~~~~ |
134 | 134 | |
135 | 135 | A reader macro is passed the parser that invoked it, so that it can |
139 | 139 | parsing anything else and merely returns a new token: |
140 | 140 | |
141 | 141 | ~~~~ |
142 |
*Data.SCargot.General> |
|
142 | *Data.SCargot.General> let qmReader = addReader '?' (\ _ -> pure (SAtom "huh")) | |
143 | *Data.SCargot.General> decode (qmReader mySpec) "(?1 2)" | |
143 | 144 | Right [SCons (SAtom "huh") (SCons (SAtom "1") (SCons (SAtom "2") SNil))] |
144 | 145 | ~~~~ |
145 | 146 |