pub fn new(
        module: String,
        symbols: &'a mut Symbols,
        environment: &'a (TypecheckEnv + 'a),
        type_cache: TypeCache<Symbol, ArcType>,
        metadata: &'a mut FnvMap<Symbol, Metadata>,
    ) -> Typecheck<'a> {
        let symbols = SymbolModule::new(module, symbols);
        let kind_cache = KindCache::new();
        Typecheck {
            environment: Environment {
                environment: environment,
                stack: ScopedMap::new(),
                stack_types: ScopedMap::new(),
            },
            symbols: symbols,
            subs: Substitution::new(kind_cache.typ()),
            named_variables: FnvMap::default(),
            errors: Errors::new(),
            type_variables: ScopedMap::new(),
            type_cache: type_cache,
            kind_cache: kind_cache,
            implicit_resolver: crate::implicits::ImplicitResolver::new(environment, metadata),
            unbound_variables: ScopedMap::new(),
        }
    }
/// Create a new typechecker which typechecks expressions in `module`
Create a new typechecker which typechecks expressions in `module`
Create a new typechecker which typechecks expressions in ` module `
pub fn new(
        module: String,
        symbols: &'a mut Symbols,
        environment: &'a (TypecheckEnv + 'a),
        type_cache: TypeCache<Symbol, ArcType>,
        metadata: &'a mut FnvMap<Symbol, Metadata>,
    ) -> Typecheck<'a> {
        let symbols = SymbolModule::new(module, symbols);
        let kind_cache = KindCache::new();
        Typecheck {
            environment: Environment {
                environment: environment,
                stack: ScopedMap::new(),
                stack_types: ScopedMap::new(),
            },
            symbols: symbols,
            subs: Substitution::new(kind_cache.typ()),
            named_variables: FnvMap::default(),
            errors: Errors::new(),
            type_variables: ScopedMap::new(),
            type_cache: type_cache,
            kind_cache: kind_cache,
            implicit_resolver: crate::implicits::ImplicitResolver::new(environment, metadata),
            unbound_variables: ScopedMap::new(),
        }
    }
pub fn new ( module : String , symbols : & ' a mut Symbols , environment : & ' a ( TypecheckEnv + ' a ) , type_cache : TypeCache < Symbol , ArcType > , metadata : & ' a mut FnvMap < Symbol , Metadata > , ) -> Typecheck < ' a > { let symbols = SymbolModule :: new ( module , symbols ) ; let kind_cache = KindCache :: new ( ) ; Typecheck { environment : Environment { environment : environment , stack : ScopedMap :: new ( ) , stack_types : ScopedMap :: new ( ) , } , symbols : symbols , subs : Substitution :: new ( kind_cache . typ ( ) ) , named_variables : FnvMap :: default ( ) , errors : Errors :: new ( ) , type_variables : ScopedMap :: new ( ) , type_cache : type_cache , kind_cache : kind_cache , implicit_resolver : crate :: implicits :: ImplicitResolver :: new ( environment , metadata ) , unbound_variables : ScopedMap :: new ( ) , } }
Create a new typechecker which typechecks expressions in `module`
Create a new typechecker which typechecks expressions in ` module `
module
String
symbols
&'a mut Symbols
environment
&'a (TypecheckEnv + 'a)
type_cache
TypeCache<Symbol, ArcType>
metadata
&'a mut FnvMap<Symbol, Metadata>