Phrasing/code improvements to README
Getty Ritter
10 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 | |