idris-1.0: Functional Programming Language with Dependent Types

# idris-1.0: Functional Programming Language with Dependent Types

Idris is a general purpose language with full dependent types. It is compiled, with eager evaluation. Dependent types allow types to be predicated on values, meaning that some aspects of a program's behaviour can be specified precisely in the type. The language is closely related to Epigram and Agda. There is a tutorial at http://www.idris-lang.org/documentation. Features include:

- Full, first class, dependent types with dependent pattern matching
- where clauses, with rule, case expressions, pattern matching let and lambda bindings
- Interfaces (similar to type classes), monad comprehensions
- do notation, idiom brackets, syntactic conveniences for lists, tuples, dependent pairs
- Totality checking
- Coinductive types
- Indentation significant syntax, extensible syntax
- Cumulative universes
- Simple foreign function interface (to C)
- Hugs style interactive environment

Modules

- IRTS
  - IRTS.BCImp Bytecode for a register/variable based VM (e.g. for generating code in an imperative language where we let the language deal with GC)
  - IRTS.Bytecode Bytecode for a stack based VM (e.g. for generating C code with an accurate hand written GC)
  - IRTS.CodegenC The default code generator for Idris, generating C code.
  - IRTS.CodegenCommon Common data structures required for all code generators.
  - IRTS.CodegenJavaScript The JavaScript code generator.
  - IRTS.Compiler Coordinates the compilation process.
  - IRTS.Defunctionalise Defunctionalise Idris' IR.
  - IRTS.DumpBC Serialise Idris to its IBC format.
  - IRTS.Exports Deal with external things.
  - IRTS.Inliner Inline expressions.
  - JavaScript
    - IRTS.JavaScript.AST Data structures and functions used with the JavaScript codegen.
  - IRTS.Lang Internal representation of Idris' constructs.
  - IRTS.LangOpts Transformations to apply to Idris' IR.
  - IRTS.Portable Serialise Idris' IR to JSON.
  - IRTS.Simplified Simplified expressions, where functions/constructors can only be applied to variables.
  - IRTS.System Utilities for interacting with the System.
- Idris
  - Idris.ASTUtils This implements just a few basic lens-like concepts to ease state updates. Similar to fclabels in approach, just without the extra dependency.
  - Idris.AbsSyntax Provides Idris' core data definitions and utility code.
  - Idris.AbsSyntaxTree Core data definitions used in Idris.
  - Idris.Apropos Search loaded Idris code and named modules for things.
  - Idris.CaseSplit Module to provide case split functionality.
  - Idris.Chaser Module chaser to determine cycles and import modules.
  - Idris.CmdOptions A parser for the CmdOptions for the Idris executable.
  - Idris.Colours Support for colours within Idris.
  - Idris.Completion Support for command-line completion at the REPL and in the prover.
  - Core
    - Idris.Core.Binary Binary instances for the core datatypes
    - Idris.Core.CaseTree Module to define and interact with case trees.
    - Idris.Core.Constraints Check universe constraints.
    - Idris.Core.DeepSeq NFData instances for TT.
    - Idris.Core.Elaborate A high level language of tactic composition, for building elaborators from a high level language into the core theory.
    - Idris.Core.Evaluate Evaluate Idris expressions.
    - Idris.Core.Execute Execute Idris code and deal with FFI.
    - Idris.Core.ProofState Proof state implementation.
    - Idris.Core.ProofTerm Proof term. implementation and utilities.
    - Idris.Core.TT The core language of Idris, TT.
    - Idris.Core.Typecheck Idris' type checker.
    - Idris.Core.Unify Idris' unification code.
    - Idris.Core.WHNF Reduction to Weak Head Normal Form
  - Idris.Coverage Clause generation for coverage checking
  - Idris.DSL Code to deal with DSL blocks.
  - Idris.DataOpts Optimisations for Idris code i.e. Forcing, detagging and collapsing.
  - Idris.DeepSeq NFData instances for Idris' types
  - Idris.Delaborate Convert core TT back into high level syntax, primarily for display purposes.
  - Idris.Directives Act upon Idris directives.
  - Idris.Docs Data structures and utilities to work with Idris Documentation.
  - Idris.Docstrings Wrapper around Markdown library.
  - Elab
    - Idris.Elab.AsPat Code to elaborate pattern variables.
    - Idris.Elab.Clause Code to elaborate clauses.
    - Idris.Elab.Data Code to elaborate data structures.
    - Idris.Elab.Implementation Code to elaborate instances.
    - Idris.Elab.Interface Code to elaborate interfaces.
    - Idris.Elab.Provider Code to elaborate type providers.
    - Idris.Elab.Quasiquote Code to elaborate quasiquotations.
    - Idris.Elab.Record Code to elaborate records.
    - Idris.Elab.Rewrite Code to elaborate rewrite rules.
    - Idris.Elab.RunElab Code to run the elaborator process.
    - Idris.Elab.Term Code to elaborate terms.
    - Idris.Elab.Transform Transformations for elaborate terms.
    - Idris.Elab.Type Code to elaborate types.
    - Idris.Elab.Utils Elaborator utilities.
    - Idris.Elab.Value Code to elaborate values.
  - Idris.ElabDecls Code to elaborate declarations.
  - Idris.Erasure Utilities to erase irrelevant stuff.
  - Idris.ErrReverse Utility to make errors readable using transformations.
  - Idris.Error Utilities to deal with error reporting.
  - Idris.Help Utilities to aid with the REPL's HELP system.
  - Idris.IBC Core representations and code to generate IBC files.
  - Idris.IdeMode Idris' IDE Mode
  - Idris.IdrisDoc Generation of HTML documentation for Idris code
  - Idris.Imports Code to handle import declarations.
  - Idris.Info Get information about Idris.
    - Idris.Info.Show
  - Idris.Inliner Idris' Inliner.
  - Idris.Interactive Bits and pieces for editing source files interactively, called from the REPL
  - Idris.Main Main function to decide Idris' mode of use.
  - Idris.ModeCommon Common utilities used by all modes.
  - Idris.Output Utilities to display Idris' internals and other informtation to the user.
  - Idris.Package Functionality for working with Idris packages.
    - Idris.Package.Common Data structures common to all `iPKG` file formats.
  - Idris.Parser Idris' parser.
    - Idris.Parser.Data Parse Data declarations.
    - Idris.Parser.Expr Parse Expressions.
    - Idris.Parser.Helpers Utilities for Idris' parser.
    - Idris.Parser.Ops Parser for operators and fixity declarations.
  - Idris.PartialEval Implementation of a partial evaluator.
  - Idris.Primitives Provision of primitive data types.
  - Idris.ProofSearch Searches current context for proofs'
  - Idris.Prover Idris' theorem prover.
  - Idris.Providers Idris' 'Type Provider' implementation.
  - Idris.REPL Entry Point for the Idris REPL and CLI.
    - Idris.REPL.Browse Browse the current namespace.
    - Idris.REPL.Commands
    - Idris.REPL.Parser Parser for the REPL commands.
  - Idris.Reflection Code related to Idris's reflection system. This module contains quoters and unquoters along with some supporting datatypes.
  - Idris.Termination The termination checker for Idris
  - Idris.Transforms A collection of transformations.
  - Idris.TypeSearch A Hoogle for Idris.
  - Idris.Unlit Turn literate programs into normal programs.
  - Idris.WhoCalls Find function callers and callees.
- Util
  - Util.DynamicLinker Platform-specific dynamic linking support. Add new platforms to this file through conditional compilation.
  - Util.ScreenSize Utilities for getting screen width.
  - Util.System Utilities for interacting with the system.