diff options
author | Eduardo Julian | 2015-02-10 02:04:46 -0400 |
---|---|---|
committer | Eduardo Julian | 2015-02-10 02:04:46 -0400 |
commit | 38fe9e91f451d9682ff7edf65fc395b85ddde961 (patch) | |
tree | 7d4c8b1f1c01d6edc5976b0c116e999a78b0c54a /src/lux.clj | |
parent | 93ff63219c7528074aae2d7f3e4f913b510a61bd (diff) |
Super refactoring that breaks the system: Part 1
Diffstat (limited to '')
-rw-r--r-- | src/lux.clj | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/lux.clj b/src/lux.clj index 6d2374edb..3e0b3e9c0 100644 --- a/src/lux.clj +++ b/src/lux.clj @@ -32,6 +32,92 @@ ])) + + (deftype (Session c p s) + (-> (-> p s c) c)) + + ;; (: bind (All [m a b] + ;; (-> (-> a (m b)) (m a) (m b)))) + + (do (defn >> [v] + (fn [session] + (session v))) + + (defn >> [v] + (client v (fn [_ client*] + (k _ client*)))) + + (def << + (server nil (fn [v server*] + (k v server*)))) + + (defn pipe []) + + (<< (fn [x server*] + (server* nil (fn [y server**] + (server** (+ x y) k))))) + + (def (select' k) + (lambda [msg session] + (session nil (k msg)))) + + (def (choose choice) + (lambda [msg session] + (session choice ...))) + + (def << + (lambda [next peer] + (peer [] (lambda [x peer'] + (next x peer'))))) + + (def (>> x) + (lambda [next peer] + (peer x (lambda [_ peer'] + (next [] peer'))))) + + (def server + (loop [_ []] + (select #Add + (do [x << + y << + _ (>> (+ x y))] + (recur [])) + + #Neg + (do [x << + _ (>> (neg x))] + (recur [])) + + #Quit + end))) + + (def client + (do [_ (choose #Add) + _ (>> 5) + _ (>> 10) + x+y <<] + (choose #Quit))) + + (def <END> + (fn [session] + nil)) + + (bind << (fn [x] + (bind << (fn [y] + (>> (+ x y)))))) + + (do [x << + y <<] + (>> (+ x y))) + + (defn <$> [consumer producer init] + (let [[x producer*] (producer init) + [y consumer*] (consumer x)] + [consumer* producer* y])) + + ((<$> (<< <END>) ((>> 5) <END>))) + ) + ;; jar cvf test2.jar *.class test2 && java -cp "test2.jar" test2 ;; cd output && jar cvf test2.jar * && java -cp "test2.jar" test2 && cd .. |