diff --git a/dm_lib/std/core/array.dm b/dm_lib/std/core/array.dm index 5236e08..ce7643f 100644 --- a/dm_lib/std/core/array.dm +++ b/dm_lib/std/core/array.dm @@ -1,5 +1,12 @@ ns std::core -decl pub int Array { +decl pub int Array : Monad { length: Int } + +pub mod array { + // Usage: + // let int_array = array::of(1, 2, 3) + // assert_eq(3, int_array.length) + decl pub fn of(ts: ...T): Array +} diff --git a/dm_lib/std/core/monad.dm b/dm_lib/std/core/monad.dm new file mode 100644 index 0000000..17f62c3 --- /dev/null +++ b/dm_lib/std/core/monad.dm @@ -0,0 +1,4 @@ +pub hkt Monad[T] { + fn map(m: fn (from: A) => B): T + fn flat_map(m: fn (from: A) => T): T +}