-- | A module to contain the magnitude of s-expression parsing. module GHC.Server.Sexp where import qualified Data.AttoLisp as L import qualified Data.Attoparsec as P import qualified Data.ByteString as B -- | Parse a single s-expr followed by optional whitespace and end of -- file. parseLispOnly :: B.ByteString -> Either String L.Lisp parseLispOnly b = case P.parseOnly lisp b of Left err -> Left ("Bad s-expression: " ++ err) Right ok -> Right ok where lisp = L.lisp -- | Parse a single s-expr. fromLispString :: L.FromLisp a => B.ByteString -> Either String a fromLispString str = L.parseEither L.parseLisp =<< parseLispOnly str