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.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.Package.Common Data structures common to all
- 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.