Cassava Megaparsec
The package provides alternative parser for the
Cassava package written with
Megaparsec so you can get
better error messages at expense of some speed.
Quick start
The package works seamlessly with Cassava by replacing the following
functions:
decode
decodeWith
decodeByName
decodeByNameWith
The functions work just the same as Cassava’s equivalents, but also take
name of file they parse (to include into error messages) and return typed
high-quality error messages produced by
Megaparsec.
The import section typically looks like this:
import Data.Csv hiding (decode, decodeWith, decodeByName, decodeByNameWith)
import Data.Csv.Parser.Megaparsec (decode, decodeWith, decodeByName, decodeByNameWith)
Next you call appropriate function and get either result of parsing
identical to that of Cassava or error message. The error message is
well-typed so you can examine it in Haskell code easily. Conversion error
are considered parsing errors by the cassava-megaparsec
package and are
reported via custom error message component Cec
supported by Megaparsec 5.
Since Cassava’s conversion errors are plain strings, we have no choice but
to represent them as strings too:
-- | Custom error component for CSV parsing. It allows typed reporting of
-- conversion errors.
data Cec
= CecFail String
| CecIndentation Ordering Pos Pos
| CecConversionError String
deriving (Eq, Data, Typeable, Ord, Read, Show)
To pretty print a error message use the parseErrorPretty
function from
Text.Megaparsec
.
This should be enough to start using the package, please consult Haddocks
for detailed per-function documentation.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
License
MIT, see the LICENSE file.
Contributing
Do you want to contribute to this project? Please take a look at our contributing guideline to know how you can help us build it.
Check out our libraries | Join our team