File: index.html

package info (click to toggle)
haskell-binary 0.7.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 340 kB
  • ctags: 11
  • sloc: haskell: 4,087; makefile: 40; ansic: 39
file content (161 lines) | stat: -rw-r--r-- 8,766 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Data.Binary - efficient, pure binary serialisation for Haskell</title>
  <link rel="stylesheet" href="http://www.cse.unsw.edu.au/~dons/main.css" type="text/css" />
</head>

<body xml:lang="en" lang="en">

  <div id="content">

  <h2>Data.Binary</h2>

<table width="80%" align="center"> <tr><td>

    <h3>About</h3>
    <p>
    Data.Binary is a library for high performance binary serialisation
    of <a href="http://haskell.org">Haskell</a> data. It uses the
    <a href="http://www.cse.unsw.edu.au/~dons/fps.html"
        >ByteString</a> library to achieve efficient, lazy reading and
    writing of structures in binary format.
    </p>

    <p>
    Chris Eidhof writes on his use of Data.Binary implementing a
    full-text search engine:
    </p>
    <pre>
   "The communication with Sphinx is done using a quite low-level binary
    protocol, but Data.Binary saved the day: it made it very easy for us
    to decode all the binary things. Especially the use of the Get and
    Put monads are a big improvement over the manual reading and keeping
    track of positions, as is done in the PHP/Python clients."
    </pre>

    <h3>Example</h3>
    For example, to serialise an interpreter's abstract syntax tree to
    binary format:
<pre><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Binary</span>
<span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Monad</span>
<span class='keyword'>import</span> <span class='conid'>Codec</span><span class='varop'>.</span><span class='conid'>Compression</span><span class='varop'>.</span><span class='conid'>GZip</span>

<span class='comment'>-- A Haskell AST structure</span>
<span class='keyword'>data</span> <span class='conid'>Exp</span> <span class='keyglyph'>=</span> <span class='conid'>IntE</span> <span class='conid'>Int</span>
         <span class='keyglyph'>|</span> <span class='conid'>OpE</span>  <span class='conid'>String</span> <span class='conid'>Exp</span> <span class='conid'>Exp</span>
   <span class='keyword'>deriving</span> <span class='conid'>Eq</span>

<span class='comment'>-- An instance of Binary to encode and decode an Exp in binary</span>
<span class='keyword'>instance</span> <span class='conid'>Binary</span> <span class='conid'>Exp</span> <span class='keyword'>where</span>
     <span class='varid'>put</span> <span class='layout'>(</span><span class='conid'>IntE</span> <span class='varid'>i</span><span class='layout'>)</span>          <span class='keyglyph'>=</span> <span class='varid'>put</span> <span class='layout'>(</span><span class='num'>0</span> <span class='keyglyph'>::</span> <span class='conid'>Word8</span><span class='layout'>)</span> <span class='varop'>&gt;&gt;</span> <span class='varid'>put</span> <span class='varid'>i</span>
     <span class='varid'>put</span> <span class='layout'>(</span><span class='conid'>OpE</span> <span class='varid'>s</span> <span class='varid'>e1</span> <span class='varid'>e2</span><span class='layout'>)</span>     <span class='keyglyph'>=</span> <span class='varid'>put</span> <span class='layout'>(</span><span class='num'>1</span> <span class='keyglyph'>::</span> <span class='conid'>Word8</span><span class='layout'>)</span> <span class='varop'>&gt;&gt;</span> <span class='varid'>put</span> <span class='varid'>s</span> <span class='varop'>&gt;&gt;</span> <span class='varid'>put</span> <span class='varid'>e1</span> <span class='varop'>&gt;&gt;</span> <span class='varid'>put</span> <span class='varid'>e2</span>
     <span class='varid'>get</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span> <span class='varid'>tag</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getWord8</span>
              <span class='keyword'>case</span> <span class='varid'>tag</span> <span class='keyword'>of</span>
                  <span class='num'>0</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>liftM</span>  <span class='conid'>IntE</span> <span class='varid'>get</span>
                  <span class='num'>1</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>liftM3</span> <span class='conid'>OpE</span>  <span class='varid'>get</span> <span class='varid'>get</span> <span class='varid'>get</span>

<span class='comment'>-- A test expression</span>
<span class='varid'>e</span> <span class='keyglyph'>=</span> <span class='conid'>OpE</span> <span class='str'>"*"</span> <span class='layout'>(</span><span class='conid'>IntE</span> <span class='num'>7</span><span class='layout'>)</span> <span class='layout'>(</span><span class='conid'>OpE</span> <span class='str'>"/"</span> <span class='layout'>(</span><span class='conid'>IntE</span> <span class='num'>4</span><span class='layout'>)</span> <span class='layout'>(</span><span class='conid'>IntE</span> <span class='num'>2</span><span class='layout'>)</span><span class='layout'>)</span>

<span class='comment'>-- Serialise and compress with gzip, then decompress and deserialise</span>
<span class='varid'>main</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>
    <span class='keyword'>let</span> <span class='varid'>t</span>  <span class='keyglyph'>=</span> <span class='varid'>compress</span> <span class='layout'>(</span><span class='varid'>encode</span> <span class='varid'>e</span><span class='layout'>)</span>
    <span class='varid'>print</span> <span class='varid'>t</span>
    <span class='keyword'>let</span> <span class='varid'>e'</span> <span class='keyglyph'>=</span> <span class='varid'>decode</span> <span class='layout'>(</span><span class='varid'>decompress</span> <span class='varid'>t</span><span class='layout'>)</span>
    <span class='varid'>print</span> <span class='layout'>(</span><span class='varid'>e</span> <span class='varop'>==</span> <span class='varid'>e'</span><span class='layout'>)</span>
</pre>

    <h3>Download</h3>

    <table width="100%"><tr valign="top">
    <td><h4>stable release</h4>
    <table>
            <tr><td>
            <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary-0.4.2"
                >binary 0.4.2</a> 
            </td><td>(Apr 2008)</td></tr>

            <tr><td>
            <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary-0.4.1"
                >binary 0.4.1</a> 
            </td><td>(Oct 2007)</td></tr>

            <tr><td>
            <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary-0.4"
                >binary 0.4</a> 
            </td><td>(Oct 2007)</td></tr>

            <tr><td>
            <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary-0.3"
                >binary 0.3</a> 
            </td><td>(Mar 2007)</td></tr>

            <tr><td>
            <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary-0.3"
                >binary 0.2</a> 
            </td><td>(Jan 2007)</td></tr>

    </table> 
    </td>
    <td><h4>development branch</h4>
    <table>
        <tr><td>
        darcs get <a href="http://code.haskell.org/binary"
                >http://code.haskell.org/binary</a>
        </td></tr>
    </table>
    </td> </tr> </table>

    <h3>Download</h3>
    <ul>
        <li>
        <a href="http://hackage.haskell.org/packages/archive/binary/0.4.1/doc/html/Data-Binary.html">Documentation</a>
        </li>
    </ul>

    <h3>Project Activity</h3>

    <center>
        <img src="http://www.cse.unsw.edu.au/~dons/images/commits/community/binary-commits.png"
             alt="binary commit statistics" />
    </center>

    <h3>Starring...</h3>

    The Binary Strike Force
    <ul>
        <li>Lennart Kolmodin </li>
        <li>Duncan Coutts </li>
        <li>Don Stewart </li>
        <li>Spencer Janssen </li>
        <li>David Himmelstrup </li>
        <li>Bjrn Bringert </li>
        <li>Ross Paterson </li>
        <li>Einar Karttunen </li>
        <li>John Meacham </li>
        <li>Ulf Norell </li>
        <li>Bryan O'Sullivan </li>
        <li>Tomasz Zielonka </li>
        <li>Florian Weimer </li>
        <li>Judah Jacobson </li>
    </ul>

</td></tr> </table>

<img src="http://xmonad.org/images/HPC.badge.jpg"  alt="covered by HPC" />
<img src="http://xmonad.org/images/cabal.png"      alt="built with Cabal" />
<img src="http://xmonad.org/images/quickcheck.png" alt="tested with QuickCheck" />

  </div>


  <div id="footer">
Mon Jul 14 11:37:21 PDT 2008
  </div>

</body>
</html>