Skip to main content

A modern list library for Hy

Project description

#+TITLE: dash.hy

A mordern list library for Hy, inspired by Clojure and dash.el.

* dash

Include =dash.dash= and =dash.misc=.

** dash.strtools

str/bytes methods wrapper, such as =s.starts-with?=, =s.concats=,
=s.strip=, etc.

** dash.operator

=hy.pyops= wrapper, such as =o.add=, =o.mul=, =o.sub=, =o.eq?=, etc.

** dash.lodash

Mangled name translation for Python, such as:

- =-map=: =_map=
- =-asssoc!=: =do_assoc=
- =str?=: =is_str=
- =o.eq?=: =o_is_eq=
- =s.starts-with?=: =s_is_starts_with=

* dash.dash

Include =dash.dash.polyfill=, =dash.dash.cons= and =dash.dash.dash=.

** dash.dash.polyfill

Polyfill of Hy/Python, contains lots of simple functions/macros, such
as =identity=, =none?=, =fn?=, =str?=, =inc=, =unless=, =if-let=,
=loop=, etc.

** dash.dash.cons

Implementation of traditional Lisp cons struct and Clojure seq struct.

*** dash.dash.cons.cons

#+begin_src hy
(cons 1) ; (1)
(cons 1 2) ; (1 . 2)
(cons 1 (cons 2 3)) ; (1 2 . 3)
(cons 1 (cons 2 (cons 3))) ; (1 2 3)
#+end_src

Emacs Lisp style of =car=, =cdr=, =caar=, =cddr=, =car-safe=,
=cdr-safe=, =setcar=, =setcdr=, etc.

*** dash.dash.cons.seq

#+begin_src hy
(seq) ; _
(seq [1 2 3]) ; 1 2 3
(seq (fn [] [1 2 3])) ; 1 2 3
(lazy-seq [1 2 3]) ; 1 2 3
#+end_src

Clojure style lazy map:

#+begin_src hy
(defn my-map [f coll]
(let [s (seq coll)]
(if (empty? s)
(seq)
(lazy-seq
(cons (f (first s)) (my-map f (rest s)))))))
#+end_src

Python style lazy map:

#+begin_src hy
(defn my-map [f coll]
(loop [s (seq coll)]
(unless (empty? s)
(yield (f (first s)))
(recur (rest s)))))
#+end_src

** dash.dash.dash

Main iter/func/coll functions/macros, start with =-= for function and
=--= for corresponding ap macro.

- threading macros: =->=, =->>=, =doto=, etc.
- reduce/map/filter: =-each=, =-dotimes=, =-reduce=, =-map=,
=-filter=, =-mapcat=, =-any?=, =-all?=, etc.
- iter gen: =-iterate=, =-repeat=, =-repeatedly=, =-cycle=, etc.
- iter mux: =-concat=, =-zip=, =-interleave=, =-interpose=, etc.
- iter part: =-take=, =-drop=, =-last=, =-butlast=, =split=,
=partition=, etc.
- iter op: =-count=, =-nth=, etc.
- iter misc: =-replace=, =-flatten=, =-group-by=, etc.
- func tools: =-trampoline=, =-partial=, =-notfn=, =-andfn=, =-orfn=,
=-comp=, =-juxt=, etc.
- item tools: =-assoc=, =-assoc-in=, =-dissoc=, =-dissoc-in=,
=-update=, =-update-in=, etc.
- dict tools: =-keys=, =-vals=, =-items=, =-merge=, etc.
- set tools: =-union=, =-difference=, =-intersection=, etc.
- coll tools: =-get=, =-get-in=, =empty=, =-into=, =conj=, =disj=,
=-peek=, =-pop=, etc.


* dash.misc

Misc functions/macros, such as =defmain=, =parse-args=.

** dash.misc.do!

Macro for writing sync and async code parallelly.

#+begin_src hy
(do/a!
(defclass (name/a! Stream) []
(defn/a! read [self]
(wait/a! ((name/a! real-read))))
(defn/a! write [self b]
(wait/a! ((name/a! real-write) b)))))
#+end_src

Expands to:

#+begin_src hy
(do
(defclass SyncStream []
(defn read [self]
(sync-real-read))
(defn write [self b]
(sync-real-write b)))
(defclass AsyncStream []
(defn/a read [self]
(await (async-real-read)))
(defn/a write [self b]
(await (async-real-write b)))))
#+end_src

=do/a!= expands all =/a!= forms to corresponding sync/async forms,
such as =(name/a! Stream)= expands to =SyncStream= in sync context and
=AsyncStream= in async context.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dash_hy-0.1.0.tar.gz (11.8 kB view hashes)

Uploaded Source

Built Distribution

dash_hy-0.1.0-py3-none-any.whl (13.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page