{- | Module : Language.Egison.Type Licence : MIT This module re-exports the type system modules for Egison. = Usage To enable type checking in your Egison code, use type annotations: @ def take (n : Integer) (xs : [a]) : [a] := if n = 0 then [] else match xs as list something with | $x :: $xs -> x :: take (n - 1) xs | [] -> [] @ = Tensor Types Tensor types include shape and index information: @ def g_i_j : Tensor Integer [2, 2]_#_# := ... g_i_j . g~i~j : Integer -- Tensor Integer [] = Integer @ = Type System Features * Hindley-Milner type inference with let-polymorphism * Tensor types with index tracking (contravariant ~i, covariant _i) * Automatic contraction when matching indices * Scalar function lifting to tensors * Matcher types -} module Language.Egison.Type ( -- * Core Types module Language.Egison.Type.Types -- * Type Inference , module Language.Egison.Type.Infer -- * Type Checking , module Language.Egison.Type.Check -- * Type Errors , module Language.Egison.Type.Error -- * Tensor Index Types , module Language.Egison.Type.Index -- * Tensor Type Rules , module Language.Egison.Type.Tensor ) where import Language.Egison.Type.Check import Language.Egison.Type.Error import Language.Egison.Type.Index import Language.Egison.Type.Infer import Language.Egison.Type.Tensor import Language.Egison.Type.Types