From 63c5af28827f9fd5f54b9a4f15d1630c8f35a728 Mon Sep 17 00:00:00 2001 From: Folkert Date: Sat, 7 Mar 2020 01:21:45 +0100 Subject: [PATCH] make builtin applies importable --- compiler/builtins/src/std.rs | 11 ++++++++++- compiler/builtins/src/unique.rs | 9 +++++++++ compiler/load/src/file.rs | 34 ++++++++++++++++----------------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/compiler/builtins/src/std.rs b/compiler/builtins/src/std.rs index a2fa87c22f..26cb4074c5 100644 --- a/compiler/builtins/src/std.rs +++ b/compiler/builtins/src/std.rs @@ -1,4 +1,4 @@ -use roc_collections::all::{default_hasher, MutMap}; +use roc_collections::all::{default_hasher, MutMap, MutSet}; use roc_module::ident::TagName; use roc_module::symbol::Symbol; use roc_region::all::{Located, Region}; @@ -16,6 +16,7 @@ pub struct StdLib { pub mode: Mode, pub types: MutMap, pub aliases: MutMap, + pub applies: MutSet, } pub fn standard_stdlib() -> StdLib { @@ -23,6 +24,14 @@ pub fn standard_stdlib() -> StdLib { mode: Mode::Standard, types: types(), aliases: aliases(), + applies: vec![ + Symbol::LIST_LIST, + Symbol::SET_SET, + Symbol::MAP_MAP, + Symbol::STR_STR, + ] + .into_iter() + .collect(), } } diff --git a/compiler/builtins/src/unique.rs b/compiler/builtins/src/unique.rs index b345bc1c67..199bd14eda 100644 --- a/compiler/builtins/src/unique.rs +++ b/compiler/builtins/src/unique.rs @@ -105,6 +105,15 @@ pub fn uniq_stdlib() -> StdLib { mode: Mode::Uniqueness, types, aliases, + applies: vec![ + Symbol::ATTR_ATTR, + Symbol::LIST_LIST, + Symbol::SET_SET, + Symbol::MAP_MAP, + Symbol::STR_STR, + ] + .into_iter() + .collect(), } } diff --git a/compiler/load/src/file.rs b/compiler/load/src/file.rs index 07c3d794ff..15e1051029 100644 --- a/compiler/load/src/file.rs +++ b/compiler/load/src/file.rs @@ -17,7 +17,7 @@ use roc_parse::module::module_defs; use roc_parse::parser::{Fail, Parser, State}; use roc_region::all::{Located, Region}; use roc_solve::solve::{self, ExposedModuleTypes, SubsByModule}; -use roc_types::solved_types::{BuiltinAlias, Solved, SolvedType}; +use roc_types::solved_types::{Solved, SolvedType}; use roc_types::subs::{Subs, VarStore, Variable}; use roc_types::types::{self, Alias}; use std::collections::{HashMap, HashSet}; @@ -779,24 +779,22 @@ fn solve_module( solved_type, }); } - // This wasn't a builtin value; maybe it was a builtin alias. - None => match stdlib.aliases.get(&symbol) { - Some(BuiltinAlias { region, typ, .. }) => { - let loc_symbol = Located { - value: symbol, - region: *region, - }; - - imported_symbols.push(Import { - loc_symbol, - solved_type: typ, - }); + None => { + if stdlib.applies.contains(&symbol) { + // do nothing + } else { + // This wasn't a builtin value or Apply; maybe it was a builtin alias. + match stdlib.aliases.get(&symbol) { + Some(_) => { + // do nothing + } + None => panic!( + "Could not find {:?} in builtin types {:?} or aliases {:?}", + symbol, stdlib.types, stdlib.aliases + ), + } } - None => panic!( - "Could not find {:?} in builtin types {:?} or aliases {:?}", - symbol, stdlib.types, stdlib.aliases - ), - }, + } } } else if module_id != home { // We already have constraints for our own symbols.