Popularity
4.4
Stable
Activity
0.0
Stable
4
2
2

Monthly Downloads: 10
Programming language: Haskell
License: GNU General Public License v3.0 only
Tags: Language     Parsing     Sexp    
Latest version: v0.7

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?

Add another 'sexp' Package

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