diff --git a/src/lib.rs b/src/lib.rs index 82d046b702..d06a7d1e2f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -798,15 +798,17 @@ let { IO, Num, Eq, Ord, Show, Functor, Applicative, Monad, Option, Bool, ? } = _ let { (+), (-), (*), (/), negate, (==), (/=), (<), (<=), (>=), (>), (++), show, not, flat_map } = __implicit_prelude -let __implicit_bool @ { ? } = import! std.bool +let { ? } = import! std.bool let { ? } = import! std.option -let __implicit_float @ { ? } = import! std.float +let { ? } = import! std.float -let __implicit_int @ { ? } = import! std.int +let { ? } = import! std.int -let __implicit_string @ { ? } = import! std.string +let { ? } = import! std.string + +let { ? } = import! std.array let { error } = import! std.prim diff --git a/std/array.glu b/std/array.glu index f7e28e2b74..cdc5d7c6c8 100644 --- a/std/array.glu +++ b/std/array.glu @@ -1,10 +1,13 @@ //@NO-IMPLICIT-PRELUDE //! A dynamically sized contigous sequence. -let prim = import! std.array.prim +let prim @ { Array } = import! std.array.prim let int @ { ? } = import! std.int let { (++) } = import! std.string -let prelude @ { Num, Eq, Ord, Show, Functor, (<), (==), (/=), (-), (+) } = import! std.prelude +let { Num, (-), (+) } = import! std.num +let { Eq, Ord, (<), (==), (/=) } = import! std.cmp +let { Show } = import! std.show +let { Functor } = import! std.functor let { Bool, Ordering, compare, min } = import! std.cmp let { Foldable } = import! std.foldable let { Traversable } = import! std.traversable @@ -115,6 +118,8 @@ let monoid : Monoid (Array a) = { semigroup, empty = [] } let is_empty array = prim.len array == 0 { + Array, + eq, ord, show, diff --git a/std/prelude.glu b/std/prelude.glu index 9ad423a42e..e2c1ec17b8 100644 --- a/std/prelude.glu +++ b/std/prelude.glu @@ -16,6 +16,7 @@ let { Show, show } = import! std.show let { Category, id, compose } = import! std.category let { Num, (+), (-), (*), (/), negate } = import! std.num let { Bool, not } = import! std.bool +let { Array } = import! std.array let { (++) } = import! std.string let { error } = import! std.prim let { flat_map } = import! std.monad @@ -57,6 +58,8 @@ let { flat_map } = import! std.monad Option, Bool, + Array, + (++), not, diff --git a/vm/src/primitives.rs b/vm/src/primitives.rs index 680c9e4a8f..b2547e52e5 100644 --- a/vm/src/primitives.rs +++ b/vm/src/primitives.rs @@ -522,6 +522,7 @@ pub fn load_array(vm: &Thread) -> Result { ExternModule::new( vm, record! { + type Array a => Array, len => primitive!(1, std::array::prim::len), index => primitive!(2, std::array::prim::index), append => primitive!(2, std::array::prim::append),