I made an update to symbol-parser that I think is worth sharing. Copied from reddit thread here.
I previously posted about Symparsec under a different name symbol-parser. Since then I’ve renamed it, rewritten it, fixed bugs, and filled out more basic parsers. Most usefully, I’ve written reified runtime versions of each parser. Now you can do
ghci> import Symparsec
ghci> type ParseSomeStuff = Skip 2 :*>: Literal " " :*>: Isolate 2 NatHex
ghci> :k! Run ParseSomeStuff "xx FFetc"
Run (...
= Right '(255, "etc")
ghci> import Singleraeh.Demote ( demote )
ghci> run' @ParseSomeStuff demote "xx FFetc"
Right (255,"etc")
Notably, these are guaranteed to have identical behaviour to their type-level counterparts, as they are internally defined using singletons.
I’m eager to write some usage examples since I’m conscious that mixing type and term level can be messy. Please let me know if you want a hand using Symparsec!