Foundation

Functional Programming

Scala

Scala is the host of Axle for many reasons, principled and not.

It's support for functional programming is chief among them.

Axle makes extensive use of Scala 2's "Context Bounds".

When Axle moves to Scala 3, much of this will use the enw given / using syntax.

Typelevel and Cats

Axle makes use of several Typelevel libraries including

Architecture

Ideal

Laws are organized into a separate axle-laws jar for use in tests by code that builds upon these typeclasses. Many such witnesses are provided by Axle for native Scala collections.

Witnesses are also defined for other common jars from the Java and Scala ecosystems. Read more about "these third party libraries".

Remaining Design Issues

Please get in touch if you'd like to discuss these or other questions.

Algebra

The spire project is a dependency of Axle. spire.algebra defines typeclasses for Monoid, Group, Ring, Field, VectorSpace, etc, and witnesses for many common numeric types as well as those defined in spire.math

The axle.algebra package defines several categories of typeclasses:

Axioms are defined in the axle.algebra.laws package as ScalaCheck properties.

They are organized with Discipline.

Support for Third Party Libraries

Witnesses for 3rd party libraries.

Parallel Collections

"org.axle-lang" %% "axle-parallel" % "0.6.6"

For use with Scala Parallel Collections library ("org.scala-lang.modules" %% "scala-parallel-collections" % ...)

XML

"org.axle-lang" %% "axle-xml" % "0.6.6"

For use with Scala XML library ("org.scala-lang.modules" %% "scala-xml" % ...)

XML includes axle.web, where HTML and SVG visualizations reside.

JBLAS

"org.axle-lang" %% "axle-jblas" % "0.6.6"

Linear Algebra and other witnesses for JBLAS which itself is a wrapper for LAPACK. Includes Principal Component Analysis (PCA).

JODA

"org.axle-lang" %% "axle-joda" % "0.6.6"

Witnesses for the Joda time library.

JUNG

"org.axle-lang" %% "axle-jung" % "0.6.6"

Directed and Undirected Graph witnesses for the JUNG library.

AWT

"org.axle-lang" %% "axle-awt" % "0.6.6"

Witnesses for AWT

Future Work

Scala 3

Bugs and adoption barriers

Types and Axioms

Compute Engines

Hygiene

Site

Near term / minor

Later

Build