Giter Club home page Giter Club logo

carry's Introduction

Carry

A functional programming language with lazy evaluation and a Haskell like syntax.

Project Structure

  • /interpreter will contain a carry interpreter written in Haskell

  • /compiler will contain a carry compiler written in carry

  • /runtime will contain runtime libraries for various targets. Most will be written in C, but some backends may require other languages.

  • /libs will contain the base library (including the Prelude module), libraries closely related to the base library, and any library used by the comiler.

  • /snippets will contain short carry programs for testing the interpreter and compiler.

  • /snippets/fail will contain short carry programs containing deliberate errors which the interpreter and compiler should both reject.

  • /test will contain unit tests and quickcheck tests for all components.

  • /design will contain notes and documents on the design of the Carry language

Notable Differences from Haskell (assuming GHC)

  1. The Num typeclass will be separated into classes of more closely related functions.

  2. Type variables will be identified via explicit forall (with shorter syntax), and although carry will be case sensitive it will allow any identifier to begin with any case.

  3. Carry will support full integration with APIs written in supported object oriented languages (feature yet to be designed)

  4. Rank n types and impredicative types will be enabled by default. The current design does not include support for existential types

  5. Cyclic dependencies between modules will be handled without using bootfiles or similar.

  6. The template metaprogramming system will not require all functions used in splices to be defined in separate modules, but will require that no cycle in the definition graph includes any splices.

  7. As well as an IO monad, there will be an INIT monad and an InitMonad typeclass implemented by IO and INIT. INIT will get special treatment by the compiler: when replacing the '=' in a top level definition with '<-': if the right hand side has type 'INIT a', it will be run once when the left hand side is first evaluated. Only functions which are relatively safe to use in this manner will have the INIT type.

carry's People

Contributors

quickdudley avatar

Stargazers

 avatar Max Bernstein avatar Conrad Steenberg avatar Jose Fernando Lopez Fernandez avatar zaoqi avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.