sexp alternatives and similar packages
Based on the "sexp" category.
Alternatively, view sexp alternatives based on common mentions on social networks and blogs.
Do you think we are missing an alternative of sexp or a related project?
README
sexp
S-Expression parsing/printing made fun and easy
Usage
sexp
provides an S-expression data-type, and printers and parsers
that work on all data-types that have Generic
instances (so,
everything you're ever likely to define yourself).
In order to encode/decode a custom data-type with sexp
, 1) add a
Generic
instance for it, and 2) add an empty Sexpable
instance
for it. The default implementation of Sexpable
's toSexp
and
fromSexp
uses the Generic
representation of the data-type to
encode and decode it.
In order to print a Sexp
, use printHum
(for human-friendly
output), or printMach
(for human-unfriendly output). In order to
parse a Sexp
, use parse
and friends.
See the documentation on Hackage for details.
% ghci
GHCi, version 7.6.2: http://www.haskell.org/ghc/ :? for help
λ > :set -XDeriveGeneric
λ > import Language.Sexp
λ > import GHC.Generics
λ > data MyType = Foo { unFoo :: Int, getBar :: Double } deriving ( Show, Generic )
λ > instance Sexpable MyType
λ > toSexp (Foo 23 42.0)
List [Atom "Foo",List [List [Atom "unFoo",Atom "23"],List [Atom "getBar",Atom "42.0"]]]
λ > printMach (toSexp (Foo 23 42.0))
"(Foo ((unFoo 23) (getBar \"42.0\")))"
λ > parseExn (printMach (toSexp (Foo 23 42.0)))
[List [Atom "Foo",List [List [Atom "unFoo",Atom "23"],List [Atom "getBar",Atom "42.0"]]]]
λ > fromSexp (head (parseExn (printMach (toSexp (Foo 23 42.0))))) :: Maybe MyType
Just (Foo {unFoo = 23, getBar = 42.0})
Installation
This package is on Hackage. To install it, run:
cabal update
cabal install sexp