npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

oiseau

v1.0.0

Published

A program language based on lambda calculus

Downloads

9

Readme

Oiseau

Oiseau is a program language which based on lambda calculus or combinator logic.
Features of Oiseau are shown as follows.

  • Macro definition: combinators are implemented by macros
  • Beta reduction
  • Evaluate expression strictly or nonstrictly
  • T[] transform

How to use

node.js

You can download Oiseau from npm.

npm install -g oiseau

To execute REPL, type "oiseau" from command line.

$ oiseau
Oiseau Ver. 1.0.0
> SKK
^a.a

Reference

Exprssion elements

Variable

Variables are described by lower case Latin alphabet or lower case alphabet with numbers.
For example, x and x27 are valid variable.

Macro

Macro are described by upper case Latin alphabet or upper case alphabet with numbers.
Macro are also described by any character except [,],= surrounded by [ and ].
For example, S, S27 and [Cons] are valid macro name.

Print expression

Print expression is an identity function with printing message to log.
Print expression is a sequence <, characters without >, >.
Side effect of print expression is used only in evaluation, and ignored in beta reduction.

<Hello, world>

Block expression

Block expression is a list of expression surrounded by (, ).
By block expression, association of expression can be changed.

Expressions

Lambda expression

Lambda expression is a sequence ^, variables, . and list of expression.

^xyz.xz(yz)

Oiseau can use Greek alphabet λ instead of ^.

Macro definition

Macro definition is a sequence [, macro name, ], = or := and list of expression.
If spaces are not included in the macro name, [, ] are optional. Macro can not be redefined.

True = ^xy.x
[this is false] = ^xy.y

Church numeraals

Natural numbers is interpreted as Church numerals.
For example, number 2 is interpreted as ^ab.a(ab).

Evaluate expressions

Reduction

To reduce an expression, you just type expression to reduce.

> SKK
^a.a

Evaluation (strict)

To evaluate expression, you add ` before the list of expression.
For example, Print "Hello, world." to log.

> `<Hello, world.>I
Hello, world.
^ab.a

Evaluation (nonstrict)

If `` are used instead of `, the expressions are evaluated nonstrictly.

T[] Transform

To transform expression to SKI-combinator form, put @ before the list of expression. SKI-combinator form will be printed to log.

> @SKK
I
^ab.a

Predefined Macros

Macros which are shown as follows are predefined.

S = ^xyz.xz(yz)
K = ^xy.z
I = ^x.x
T = ^xy.x
F = ^xy.y
Cons = ^cdf.fcd
Car = ^p.pT
Cdr = ^p.pF
Isnil = ^x.x(^abc.F)T

Grammar of Oiseau

input:
    macro |
    evaluation

macro:
    macro-definition-name macro-eq expression-list

macro-definition-name:
    <characters except "=", "[", "]", or space> |
    "[" <characters except "=", "[", or "]"> "]"

macro-eq:
    "=" | ":="

evalation:
    expression-list "==" expression-list |
    "``" expression-list |
    "`" expression-list |
    "@" expression-list

expression-list:
    "(" expression-list ")" |
    lambda-clause |
    variable-name |
    macro-name |
    "<" <characters except ">"> ">" |
    "[[" list "]]"
    number

lambda-clause:
    lambda-mark variable-list "." expression-list

lambda-mark:
    "^" | "λ"

variable-list:
    variable-name variable-list |
    variable-name

variable-name:
    "a" .. "z" ("0" .. "9")*

macro-name:
    "A" .. "Z" (("0" .. "9")+ | "*"+)? |
    "[" <characters except "=", "[", or "]"> "]"

list:
    lambda-clause list |
    lambda-clause "|" lambda-clause |
    lambda-caluse

number:
    ("0" .. "9")+