The major subset of Id is a purely functional programming language with non-strict semantics.
Features include: higher-order functions, a Milner-style statically type-checked polymorphic type system with overloading, user defined types and pattern matching, and prefix and infix operators.
The MVar synchronisation variable abstraction in Haskell is based on Id's M-structures.
[3] Id supports algebraic datatypes, similar to ML, Haskell, or Miranda: Types are inferred by default, but may be annotated with a typeof declaration.
However, to avoid nonterminating construction of truly infinite structures, explicit delays must be annotated using #: