aboutsummaryrefslogtreecommitdiff
path: root/src/lux/base.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/lux/base.clj')
-rw-r--r--src/lux/base.clj43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/lux/base.clj b/src/lux/base.clj
index 599ff6c72..689cf205f 100644
--- a/src/lux/base.clj
+++ b/src/lux/base.clj
@@ -1,6 +1,6 @@
(ns lux.base
(:require (clojure [template :refer [do-template]])
- [clojure.core.match :refer [match]]))
+ [clojure.core.match :as M :refer [match matchv]]))
;; [Resources]
;; [Resources/Contants]
@@ -272,3 +272,44 @@
(defn run-state [monad state]
(monad state))
+
+(defn V [tag value]
+ (to-array [tag value]))
+
+(defn ->seq [xs]
+ (matchv ::M/objects [xs]
+ [["Nil" _]]
+ (list)
+
+ [["Cons" [x xs*]]]
+ (cons x (->seq xs*))))
+
+(defn show-ast [ast]
+ (matchv ::M/objects [ast]
+ [["Bool" ?value]]
+ (pr-str ?value)
+
+ [["Int" ?value]]
+ (pr-str ?value)
+
+ [["Real" ?value]]
+ (pr-str ?value)
+
+ [["Char" ?value]]
+ (pr-str ?value)
+
+ [["Text" ?value]]
+ (str "\"" ?value "\"")
+
+ [["Tag" ?tag]]
+ (str "#" ?tag)
+
+ [["Ident" ?ident]]
+ ?ident
+
+ [["Tuple" ?elems]]
+ (str "[" (->> (->seq ?elems) (map show-ast) (interpose " ") (apply str)) "]")
+
+ [["Form" ?elems]]
+ (str "(" (->> (->seq ?elems) (map show-ast) (interpose " ") (apply str)) ")")
+ ))