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 🙏

© 2024 – Pkg Stats / Ryan Hefner

lambda-in-purescript

v0.1.1

Published

Is a lambda claculus implemented in purescript

Downloads

30

Readme

Lambda in PureScript

Is a lambda claculus implemented in purescript

It supports 3 evaluation types:

  • LAZY:

    • pro: most efficient execution
    • cons: unpredictable performance
  • EAGER:

    • pro: good for debugging, predictable
    • cons: some unused arguments could be evaluated
  • SYMBOLIC:

    • pro: good for suggestions and metaprogramming
    • cons: executes unneeded code

optimal use cases symbolic at compile time, eager at debug, lazy at runtime

a naive implementation of and execution broker could be 3 queues lazy, eager, symbolic, where the evaluations will be partitioned naively the all the jobs from lazy would be executed before proceeding to eager and then lazy but a worker could get a task from eager before all from lazy are executed based on data locality (aka cost)

TODO

  • implement and test https://en.wikipedia.org/wiki/Lambda_calculus#Standard_terms

  • see https://en.wikipedia.org/wiki/Lambda_calculus#Optimal_reduction

  • introduce types and metaprogramming

  • debugger

  • source maps

  • syntax highlight (partially implemented as vscode language support)

  • resolve some non terminating samples

  • analyze program for code duplication (η-conversion + α-conversion)

  • check for undeclared variables

  • make possible recursive function by name

  • make possible recursive function by name (for inline functions)

  • hoisting and mutually recursive function

  • memoization

  • single step evaluation (missing for symbolic)

  • infix operators

  • autocompletion

  • wrap syntax errors

  • prettify

  • atoms

  • FFI

  • implement standard data structures

  • documentation

  • documentation generation

  • playground

  • named parameters

  • common design patterns (ex: dependency injection)

  • common functional data structures

  • implement unit testing

  • good practices assistant (clean code, code complete, TDD, DDD, PEA, GOF)

  • implement other languages features

  • refactoring tools

  • code navigation and view tools

  • refactor

  • bundling for browser and node with npm and bower

  • finish tests

  • η-conversion + α-conversion + α-equivalence can be used to validate laws (example comonad laws)

  • parallel execution

  • distributed execution

  • rename symbol (F2 in vscode) with reify

  • import system (throught url + git)

  • derive like in typeclasses

  • stackless interpret (lazy, eager, symbolic)

  • extract value (using symbolic execution)

  • compiler ANF backaend llvm?

  • rust-wasm interpreter

  • extract type from expression with free variables

  • implement beta-abstraction (for free variables binding)

  • eta-abstraction (maybe useful for type restrictions)