idris: Functional Programming Language with Dependent Types

[ bsd3, compilers-interpreters, dependent-types, library, program ] [ Propose Tags ]

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 https://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


[Skip to Readme]

Modules

  • IRTS
    • IRTS.Bytecode
    • IRTS.CodegenC
    • IRTS.CodegenCommon
    • IRTS.CodegenJavaScript
    • IRTS.Compiler
    • IRTS.Defunctionalise
    • IRTS.DumpBC
    • IRTS.Exports
    • IRTS.Inliner
    • JavaScript
      • IRTS.JavaScript.AST
      • IRTS.JavaScript.Codegen
      • IRTS.JavaScript.LangTransforms
      • IRTS.JavaScript.Name
      • IRTS.JavaScript.PrimOp
      • IRTS.JavaScript.Specialize
    • IRTS.Lang
    • IRTS.LangOpts
    • IRTS.Portable
    • IRTS.Simplified
    • IRTS.System
  • Idris
    • Idris.ASTUtils
    • Idris.AbsSyntax
    • Idris.AbsSyntaxTree
    • Idris.Apropos
    • Idris.CaseSplit
    • Idris.Chaser
    • Idris.CmdOptions
    • Idris.Colours
    • Idris.Completion
    • Core
      • Idris.Core.Binary
      • Idris.Core.CaseTree
      • Idris.Core.Constraints
      • Idris.Core.DeepSeq
      • Idris.Core.Elaborate
      • Idris.Core.Evaluate
      • Idris.Core.Execute
      • Idris.Core.ProofState
      • Idris.Core.ProofTerm
      • Idris.Core.TT
      • Idris.Core.Typecheck
      • Idris.Core.Unify
      • Idris.Core.WHNF
    • Idris.Coverage
    • Idris.DSL
    • Idris.DataOpts
    • Idris.DeepSeq
    • Idris.Delaborate
    • Idris.Directives
    • Idris.Docs
    • Idris.Docstrings
    • Elab
      • Idris.Elab.AsPat
      • Idris.Elab.Clause
      • Idris.Elab.Data
      • Idris.Elab.Implementation
      • Idris.Elab.Interface
      • Idris.Elab.Provider
      • Idris.Elab.Quasiquote
      • Idris.Elab.Record
      • Idris.Elab.Rewrite
      • Idris.Elab.RunElab
      • Idris.Elab.Term
      • Idris.Elab.Transform
      • Idris.Elab.Type
      • Idris.Elab.Utils
      • Idris.Elab.Value
    • Idris.ElabDecls
    • Idris.Erasure
    • Idris.ErrReverse
    • Idris.Error
    • Idris.Help
    • Idris.IBC
    • Idris.IdeMode
    • Idris.IdrisDoc
    • Idris.Imports
    • Idris.Info
      • Idris.Info.Show
    • Idris.Inliner
    • Idris.Interactive
    • Idris.Main
    • Idris.ModeCommon
    • Idris.Options
    • Idris.Output
    • Idris.Package
      • Idris.Package.Common
      • Idris.Package.Parser
    • Idris.Parser
      • Idris.Parser.Data
      • Idris.Parser.Expr
      • Idris.Parser.Helpers
      • Idris.Parser.Ops
      • Idris.Parser.Stack
    • Idris.PartialEval
    • Idris.Primitives
    • Idris.ProofSearch
    • Idris.Prover
    • Idris.Providers
    • Idris.REPL
      • Idris.REPL.Browse
      • Idris.REPL.Commands
      • Idris.REPL.Parser
    • Idris.Reflection
    • Idris.Termination
    • Idris.Transforms
    • Idris.TypeSearch
    • Idris.Unlit
    • Idris.WhoCalls
  • Util
    • Util.DynamicLinker
    • Util.ScreenSize
    • Util.System

Flags

Manual Flags

NameDescriptionDefault
ffi

Build support for libffi

Disabled
gmp

Use GMP for Integers

Disabled
release

This is an official release

Disabled
freestanding

Build an Idris that doesn't use cabal

Disabled
ci

Built everything using "-Werror", meant for CI-builds only

Disabled
execonly

Build executables only, skip the libraries and RTS

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Versions [RSS] 0.1.3, 0.1.3.1, 0.1.4, 0.1.5, 0.1.7, 0.1.7.1, 0.9.0, 0.9.1, 0.9.2, 0.9.2.1, 0.9.3, 0.9.3.1, 0.9.4, 0.9.4.1, 0.9.5, 0.9.5.1, 0.9.6, 0.9.6.1, 0.9.7, 0.9.8, 0.9.9, 0.9.9.1, 0.9.9.2, 0.9.9.3, 0.9.10, 0.9.10.1, 0.9.11, 0.9.11.1, 0.9.11.2, 0.9.12, 0.9.13, 0.9.13.1, 0.9.14, 0.9.14.1, 0.9.14.2, 0.9.14.3, 0.9.15, 0.9.15.1, 0.9.16, 0.9.17, 0.9.17.1, 0.9.18, 0.9.18.1, 0.9.19, 0.9.19.1, 0.9.20, 0.9.20.1, 0.9.20.2, 0.10, 0.10.1, 0.10.2, 0.10.3, 0.11, 0.11.1, 0.11.2, 0.12, 0.12.1, 0.12.2, 0.12.3, 0.99, 0.99.1, 0.99.2, 1.0, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4
Change log CHANGELOG.md
Dependencies aeson (>=0.6 && <1.6), annotated-wl-pprint (>=0.7 && <0.8), ansi-terminal (<0.12), ansi-wl-pprint (<0.7), array (>=0.4.0.1 && <0.6), async (<2.3), base (>=4 && <5), base64-bytestring (<1.3), binary (>=0.8.4.1 && <0.9), blaze-html (>=0.6.1.3 && <0.10), blaze-markup (>=0.5.2.1 && <0.10), bytestring (<0.11), cheapskate (>=0.1.1.2 && <0.2), code-page (>=0.1 && <0.3), containers (>=0.5 && <0.7), deepseq (<1.5), directory (>=1.2.2.0 && <1.2.3.0 || >1.2.3.0), fail (>=4.9.0 && <4.9.1), filepath (<1.5), fingertree (>=0.1.4.1 && <0.2), fsnotify (>=0.2 && <0.4), haskeline (>=0.8 && <0.9), idris, ieee754 (>=0.7 && <0.9), megaparsec (>=7.0.4 && <10), mintty (>=0.1 && <0.2), mtl (>=2.1 && <2.3), network (>=2.7 && <3.1.2), optparse-applicative (>=0.13 && <0.17), parser-combinators (>=1.0.0), pretty (<1.2), process (<1.7), regex-tdfa (>=1.2), safe (>=0.3.9), semigroups (>=0.18 && <0.19), split (<0.3), terminal-size (<0.4), text (>=1.2.1.0 && <1.4), time (>=1.4 && <2.0), transformers (>=0.5 && <0.6), uniplate (>=1.6 && <1.7), unix (<2.8), unordered-containers (<0.3), utf8-string (<1.1), vector (<0.13), vector-binary-instances (<0.3), Win32 (<2.7), zip-archive (>0.2.3.5 && <0.5) [details]
License BSD-3-Clause
Author Edwin Brady
Maintainer Niklas Larsson <niklas@mm.st>
Category Compilers/Interpreters, Dependent Types
Home page https://www.idris-lang.org/
Bug tracker https://github.com/idris-lang/Idris-dev/issues
Source repo head: git clone git://github.com/idris-lang/Idris-dev.git
Uploaded by niklasl at 2021-10-22T22:58:30Z
Distributions Arch:1.3.4, Fedora:1.3.4, NixOS:1.3.4
Executables idris-codegen-node, idris-codegen-javascript, idris-codegen-c, idris
Downloads 66161 total (136 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2021-11-01 [all 1 reports]

Readme for idris-1.3.4

[back to package description]

Idris 1

Build Status Appveyor build Documentation Status Hackage Stackage LTS Stackage Nightly IRC

Idris (https://idris-lang.org/) is a general-purpose functional programming language with dependent types.

Installation

This repository represents the latest development version of the language, and may contain bugs that are being actively worked on. For those who wish to use a more stable version of Idris please consider installing the latest version that has been released on Hackage. Installation instructions for various platforms can be found on the Idris Wiki.

More information about building Idris from source has been detailed in the Installation Guide

Code Generation

Idris has support for external code generators. Supplied with the distribution is a C code generator to compile executables, and a JavaScript code generator with support for node.js and browser JavaScript.

More information about code generators can be found here.

Status

This is Idris 1, implemented in Haskell. Idris 1 is not actively worked on anymore.

Idris 2 is the next generation of Idris, and where primary development happens.

More Information

If you would like to find out more information, or ask questions, we currently have a Wiki; a mailing list, and an IRC channel #idris on freenode. To join the IRC channel, point your irc client to chat.freenode.net then /join #idris.

For those further interested in using Idris for projects, the Idris Hackers GitHub organisation is where some interesting projects are being hosted.

For those interested in contributing to Idris directly we kindly ask that prospective developers please consult the Contributing Guide first.