Shen
About

Shen is a portable functional programming language by Mark Tarver. It is the successor to the award-winning Qi language, with the added goal of being highly portable across platforms.

More information is available on the official website and in The Book of Shen.

Features
Pattern Matching
(define filter
  _ []       -> []
  F [X | Xs] -> [X | (filter F Xs)] 
                where (F X)
  F [_ | Xs] -> (filter F Xs))

(define element?
  _ []      -> false
  X [X | _] -> true
  X [_ | Y] -> (element? X Y))
Backtracking
(define walk
  _ []      <- (fail)
  F [X | _] -> X where (F X)
  F [_ | Y] -> (walk F Y))
Lambda Calculus Consistency
(define y-combinator
  F -> ((/. X (X X))
        (/. X (F (/. Y ((X X) Y))))))
Lazy Evalution
(let F (freeze (output "Hello!"))
  (thaw F))

> "Hello!"
Optional Type Checking
(tc +)

(define map
  {(A --> B) --> (list A) --> (list B)}
  _ []       -> []
  F [X | Xs] -> [(F X) | (map F Xs)])

(map (+ 1) ["a" "b" "c"])

> type error
Configurable Type Rules
(datatype maybe-type

  _____________________
    none : (maybe A);

         X : A;
  _____________________
  (some X) : (maybe A);

      M : (maybe A);
  _____________________
     (unwrap M) : A;)
Integrated Logic Engine
(defprolog member
  X [X | _] <-- ;
  X [_ | Y] <-- (member X Y);)

(prolog?
  (member X [1 2 3])
  (member X [3 4 5])
  (return X))

> 3
Built-in Compiler-Compiler
(define bit?
  B -> (element? B [0 1]))

(defcc <b>
  B <b> := [B | <b>] where (bit? B);
  B     := [B] where (bit? B);)
Unique Macros
(defmacro infix-macro
  [X + Y] -> [+ X Y]
  [X * Y] -> [* X Y])
Demo

An in-browser REPL is hosted here where you can try out Shen and take a brief tutorial.

Downloads

There are implementations of Shen for most platforms. Some have fallen out of date and could use support to reach Certified status and stay current.

An implementation is considered Certified if it passes the test suite included with the kernel sources.

To port Shen to a new platform, see the porting guide. You can submit a pull request to get it added here.

Contributing

The Shen Open Source Kernel is authored in Shen itself and hosted on GitHub. Bug reports and suggested enhancements are welcome!

Community

The following is a (non-exhaustive) list of developers who have contributed to the Shen Language Open Source Community. Thanks to everyone for contributing!