Mention darcs reository in .cabal
[darcs-mirror-sem_syn.git] / README
1  `b18n-combined`: Combining Syntactic and Semantic Bidirectionalization
2 ======================================================================
3
4 What's This?
5 ------------
6
7 This program, `b18n-combined`, is a prototype implementation of
8 the paper "Combining Syntactic and Semantic Bidirectionalization" 
9 written by Janis Voigtländer, Zhenjiang Hu, Kazutaka Matsuda,
10 and Meng Wang, which is accepted at ICFP'10.
11
12 The program takes input program describing a view function that constructs a view from a source, 
13 and generates a put-back function that reflects updates on the view to the source. 
14 Thanks to combination of syntactic and semantic bidirectionalization, 
15 the program can generates effective put-back functions in the sense that
16 the generated put-back functions can put back more updates than 
17 those obtained by either of syntactic/semantic bidirectionalization.
18
19 Example
20 -------
21  
22 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.shell}
23 $ cat example/init.txt 
24 init []          = []
25 init [a]         = []
26 init (a:b:x)     = a:initWork b x
27 initWork a []    = []
28 initWork a (b:x) = a:initWork b x
29 $ ./dist/build/b18n-combined/b18n-combined example/sieve.txt -syn -hs
30 import Control.Monad
31 import BUtil
32 data Cmpl t0 t1
33     = Csieve_Cmpl_1
34     | Csieve_Cmpl_2 t0
35     | Csieve_Cmpl_3 t1 (Cmpl t0 t1)
36 sieve ([]) = []
37 sieve (a : []) = []
38 sieve (a : (b : x)) = b : sieve (x)
39 sieve_B s v = head (sieve_T_I v (sieve_Cmpl s))
40 sieve_Cmpl ([]) = Csieve_Cmpl_1
41 sieve_Cmpl (a : []) = Csieve_Cmpl_2 a
42 sieve_Cmpl (a : (b : x)) = Csieve_Cmpl_3 a (sieve_Cmpl (x))
43 sieve_T_I x1 x2 = mplus (sieve_T_I_1 x1 x2) (mplus (sieve_T_I_2 x1 x2) (mplus (sieve_T_I_3 x1 x2) mzero))
44 sieve_T_I_1 [] (Csieve_Cmpl_1) = do return ([])
45 sieve_T_I_1 _ _ = mzero
46 sieve_T_I_2 [] (Csieve_Cmpl_2 a) = do return (a : [])
47 sieve_T_I_2 _ _ = mzero
48 sieve_T_I_3 (b : tv1) (Csieve_Cmpl_3 a
49                                      tc1) = do (x) <- sieve_T_I tv1 tc1
50                                                return (a : (b : x))
51 sieve_T_I_3 _ _ = mzero
52 $ ./b18n-combined example/sieve.txt -sem
53 import Data.Bff
54 import BUtil
55 sieve_B s v
56     = bff Main.sieve s v
57 sieve ([]) = []
58 sieve (a : []) = []
59 sieve (a : (b : x)) = b : sieve (x)
60 $ ./b18n-combined example/sieve.txt -comb 
61 import Control.Monad
62 import BUtil
63 sieve_Bb bias s v
64     = gen_put_bias bias Main.sieve(\x y -> castError $ (sieve_22_B $! x) $! y) s v
65 sieve_Bbd = withDefaultBias sieve_Bb
66 sieve_Bd = withDefault sieve_B
67 sieve_B s v = sieve_Bb rear s v
68 data Cmpl
69     = Csieve_22_Cmpl_1
70     | Csieve_22_Cmpl_2
71 sieve ([]) = []
72 sieve (a : []) = []
73 sieve (a : (b : x)) = b : sieve (x)
74 sieve_22_B s v = head (sieve_22_T_I v (sieve_22_Cmpl s))
75 sieve_22_Cmpl (Z) = Csieve_22_Cmpl_1
76 sieve_22_Cmpl (S (Z)) = Csieve_22_Cmpl_2
77 sieve_22_Cmpl (S (S x)) = sieve_22_Cmpl (x)
78 sieve_22_T_I x1 x2 = mplus (sieve_22_T_I_1 x1 x2) (mplus (sieve_22_T_I_2 x1 x2) (mplus (sieve_22_T_I_3 x1 x2) mzero))
79 sieve_22_T_I_1 (Z) (Csieve_22_Cmpl_1) = do return (Z)
80 sieve_22_T_I_1 _ _ = mzero
81 sieve_22_T_I_2 (Z) (Csieve_22_Cmpl_2) = do return (S Z)
82 sieve_22_T_I_2 _ _ = mzero
83 sieve_22_T_I_3 (S tv1) tc1 = do (x) <- sieve_22_T_I tv1 tc1
84                                 return (S (S x))
85 sieve_22_T_I_3 _ _ = mzero
86 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87
88 How to Build
89 ------------
90
91
92   0. Install [GHC] and make sures that following Haskell packages 
93      are installed.
94      * mtl, template-haskell, containers, pretty, parsec (for web interface: directory, xhtml, cgi, utf8-string, bytestring, unix, hint >= 0.3.2)
95   1. Get the source tarball from 
96      [./b18n-combined-0.1.tar.gz](./b18n-combined-0.1.tar.gz).
97   2. Unfold the source tarball
98      * `tar zxvf b18n-combined-0.1.tar.gz` 
99   3. Build the executables by 
100      1. `cabal configure`
101      2. `cabal build`
102     
103 Note that the source code is also available via darcs.
104
105      darcs get http://www.kb.ecei.tohoku.ac.jp/~kztk/darcs/sem_syn/
106
107 [GHC]: http://www.haskell.org/ghc/
108
109
110 Limitation
111 ----------
112
113 Current implementation can handle lists only.
114
115 <div class="footer">
116
117 ----------------------------------------------------
118 <address>Kazutaka Matsuda: <kztk@kb.ecei.tohoku.ac.jp>.</address>
119
120 <p>The first version of this page was published in Jul. 29th, 2010.</p>
121
122 </div>
123