-- | Re-export the external Futhark modules for convenience.
module Language.Futhark
  ( module Language.Futhark.Syntax,
    module Language.Futhark.Prop,
    module Language.Futhark.Pretty,
    Ident,
    DimIndex,
    Exp,
    Pattern,
    ModExp,
    ModParam,
    SigExp,
    ModBind,
    SigBind,
    ValBind,
    Dec,
    Spec,
    Prog,
    TypeBind,
    TypeDecl,
    StructTypeArg,
    ScalarType,
    TypeParam,
    Case,
  )
where

import Language.Futhark.Pretty
import Language.Futhark.Prop
import Language.Futhark.Syntax

-- | An identifier with type- and aliasing information.
type Ident = IdentBase Info VName

-- | An index with type information.
type DimIndex = DimIndexBase Info VName

-- | An expression with type information.
type Exp = ExpBase Info VName

-- | A pattern with type information.
type Pattern = PatternBase Info VName

-- | An constant declaration with type information.
type ValBind = ValBindBase Info VName

-- | A type declaration with type information
type TypeDecl = TypeDeclBase Info VName

-- | A type binding with type information.
type TypeBind = TypeBindBase Info VName

-- | A type-checked module binding.
type ModBind = ModBindBase Info VName

-- | A type-checked module type binding.
type SigBind = SigBindBase Info VName

-- | A type-checked module expression.
type ModExp = ModExpBase Info VName

-- | A type-checked module parameter.
type ModParam = ModParamBase Info VName

-- | A type-checked module type expression.
type SigExp = SigExpBase Info VName

-- | A type-checked declaration.
type Dec = DecBase Info VName

-- | A type-checked specification.
type Spec = SpecBase Info VName

-- | An Futhark program with type information.
type Prog = ProgBase Info VName

-- | A known type arg with shape annotations.
type StructTypeArg = TypeArg (DimDecl VName)

-- | A type-checked type parameter.
type TypeParam = TypeParamBase VName

-- | A known scalar type with no shape annotations.
type ScalarType = ScalarTypeBase ()

-- | A type-checked case (of a match expression).
type Case = CaseBase Info VName