Move Oxcart module.
Chris Pressey
5 years ago
2 | 2 |
import Haste.DOM (withElems, getValue, setProp)
|
3 | 3 |
import Haste.Events (onEvent, MouseEvent(Click))
|
4 | 4 |
|
5 | |
import Language.Oxcart (run)
|
|
5 |
import Language.Oxcart.ConcatEval (run)
|
6 | 6 |
|
7 | 7 |
|
8 | 8 |
main = withElems ["prog", "result", "run-button"] driver
|
|
0 |
module Language.Oxcart.ConcatEval where
|
|
1 |
|
|
2 |
import Language.Oxcart.Store
|
|
3 |
|
|
4 |
|
|
5 |
type Op = [Elem] -> ([Elem] -> [Elem]) -> [Elem]
|
|
6 |
|
|
7 |
|
|
8 |
nop xs k = k xs
|
|
9 |
push0 xs k = k ((Num 0):xs)
|
|
10 |
incr ((Num x):xs) k = k (Num (x+1):xs)
|
|
11 |
decr ((Num x):xs) k = k (Num (x-1):xs)
|
|
12 |
dbl ((Num x):xs) k = k (Num (x*2):xs)
|
|
13 |
save xs k = k (Cont k:xs)
|
|
14 |
rsr ((Cont j):xs) _ = j xs
|
|
15 |
cont xs@((Cont j):_) _ = j xs
|
|
16 |
swpk xs@((Cont j):_) k = j (Cont k:xs)
|
|
17 |
|
|
18 |
|
|
19 |
m [] = nop
|
|
20 |
m (x:xs) = (m' x) `composeCPS` (m xs)
|
|
21 |
where
|
|
22 |
m' '0' = push0
|
|
23 |
m' '+' = incr
|
|
24 |
m' '-' = decr
|
|
25 |
m' 'X' = dbl
|
|
26 |
m' '*' = save
|
|
27 |
m' '$' = rsr
|
|
28 |
m' '~' = cont
|
|
29 |
m' '_' = swpk
|
|
30 |
composeCPS f g = \x k -> (f x (\s -> (g s k)))
|
|
31 |
|
|
32 |
|
|
33 |
run s = m s [] id
|
|
34 |
|
|
35 |
test = run "0+XX"
|
0 | |
module Language.Oxcart where
|
1 | |
|
2 | |
import Language.Oxcart.Store
|
3 | |
|
4 | |
|
5 | |
type Op = [Elem] -> ([Elem] -> [Elem]) -> [Elem]
|
6 | |
|
7 | |
|
8 | |
nop xs k = k xs
|
9 | |
push0 xs k = k ((Num 0):xs)
|
10 | |
incr ((Num x):xs) k = k (Num (x+1):xs)
|
11 | |
decr ((Num x):xs) k = k (Num (x-1):xs)
|
12 | |
dbl ((Num x):xs) k = k (Num (x*2):xs)
|
13 | |
save xs k = k (Cont k:xs)
|
14 | |
rsr ((Cont j):xs) _ = j xs
|
15 | |
cont xs@((Cont j):_) _ = j xs
|
16 | |
swpk xs@((Cont j):_) k = j (Cont k:xs)
|
17 | |
|
18 | |
|
19 | |
m [] = nop
|
20 | |
m (x:xs) = (m' x) `composeCPS` (m xs)
|
21 | |
where
|
22 | |
m' '0' = push0
|
23 | |
m' '+' = incr
|
24 | |
m' '-' = decr
|
25 | |
m' 'X' = dbl
|
26 | |
m' '*' = save
|
27 | |
m' '$' = rsr
|
28 | |
m' '~' = cont
|
29 | |
m' '_' = swpk
|
30 | |
composeCPS f g = \x k -> (f x (\s -> (g s k)))
|
31 | |
|
32 | |
|
33 | |
run s = m s [] id
|
34 | |
|
35 | |
test = run "0+XX"
|
0 | 0 |
module Main where
|
1 | 1 |
|
2 | 2 |
import System.Environment
|
3 | |
import Language.Oxcart (run)
|
|
3 |
import Language.Oxcart.ConcatEval (run)
|
4 | 4 |
|
5 | 5 |
|
6 | 6 |
main = do
|