; Test file, released under MIT License
(ns ^{:doc "Syntax highlighting test file"
:author "Markus Brenneis"}
highlighting)

(defn something-else [f xs]
#_(map #(apply f (% [%])) (cons 1 xs))
(map #(apply f (% xs)) (cons 1 xs))
#_[1 '(2)]
xs)

(def foo [\a \b \n \ucafe \o123 \n
\newline \tab \space \formfeed \backspace])

(def fizz {#{\a \b}
#{\n \newline}})

(def fizz' #{{\a \b}
{\n \newline}})

(defn bar [xs]
(as-> xs <>
(cons :a <>)
(map #(%1 %2) <>) ; TODO improve
(into <> [:konjure.logic.specs/numShips])))

(def x-2-y
#_"do \" sth"
(domonad set-m
[x #{1.1, (+ -2 +4)}
y #{1.1, (- -2.0 4.0)}]
(*' x y)))

(def bases
(and (= -1 -1N)
(= 1/4 -2.5e-1)
(= -1/2 -0.5M)
(= -0x1Ab -0X1ab)
(= +2r101010 25R1h)
(= 39r13 42R10))) ; FIXME this one is not correct

(def ^{:private true}
(= (last #{#{}}) #{{#{}}}))

(def s "#repl\n")
(def r #"repl")

(defn- stuff!
[a]
"This is no \"documentation\"!"
(= (class #'+) (class #'foo))
(let [+ -] [(+ a 1) (@#'+ a 1)]))

(defn- throwIllegalArgumentException!
"Throws an \"IllegalArgumentException\" or
a js/Error."
[message]
#?(:clj (throw (IllegalArgumentException. message))
:cljs (throw (js/Error. message))))

(defmacro let-fn "a nonsense macro" [one-binding & body]
`(+ 1 ~(inc' 1))
(let [[identifier & fn-body] one-binding]
`(let [~identifier (fn ~identifier ~@fn-body)]
~@body `a#)))

(def state (atom [(= false true) nil]))

(defn something-cool [] (first @state))

(defn- something-different [] (first (into @state [12])))

(defn- instance-getfield [this k] (@(.state this) k))