--- /dev/null
+// Functions
+include "Prelude"
+
+class Collection col where
+ length :: col -> Integer
+
+class (Collection col) => Sequence col el | col -> el where
+ toList :: col -> [el]
+ fromList :: [el] -> col
+
+ iter :: (el -> <e> b) -> col -> <e> ()
+ any :: (el -> <e> Boolean) -> col -> <e> Boolean
+ all :: (el -> <e> Boolean) -> col -> <e> Boolean
+ mapFirst :: (el -> <e> Maybe b) -> col -> <e> Maybe b
+ findFirst :: (el -> <e> Boolean) -> col -> <e> Maybe el
+ firstIndex :: (el -> <e> Boolean) -> col -> <e> Integer
+
+/*
+ concatMap :: (a -> <e> [b]) -> [a] -> <e> [b]
+ map :: (a -> <e> b) -> [a] -> <e> [b]
+ filter :: (a -> <e> Boolean) -> [a] -> <e> [b]
+ mapMaybe :: (a -> <e> Maybe b) -> [a] -> <e> [b]
+*/
+
+iterN :: (Integer -> <e> b) -> Integer -> <e> ()
+anyN :: (Integer -> <e> Boolean) -> Integer -> <e> Boolean
+allN :: (Integer -> <e> Boolean) -> Integer -> <e> Boolean
+mapFirstN :: (Integer -> <e> Maybe b) -> Integer -> <e> Maybe b
+concatMapN :: (Integer -> <e> [b]) -> Integer -> <e> [b]
+mapN :: (Integer -> <e> b) -> Integer -> <e> [b]
+filterN :: (Integer -> <e> Boolean) -> Integer -> <e> [Integer]
+mapMaybeN :: (Integer -> <e> Maybe b) -> Integer -> <e> [b]
+
+iterVector :: (a -> <e> b) -> Vector a -> <e> ()
+anyVector :: (a -> <e> Boolean) -> Vector a -> <e> Boolean
+allVector :: (a -> <e> Boolean) -> Vector a -> <e> Boolean
+mapFirstVector :: (a -> <e> Maybe b) -> Vector a -> <e> Maybe b
+concatMapVector :: (a -> <e> [b]) -> Vector a -> <e> Vector b
+mapVector :: (a -> <e> b) -> Vector a -> <e> Vector b
+filterVector :: (a -> <e> Boolean) -> Vector a -> <e> Vector b
+mapMaybeVector :: (a -> <e> Maybe b) -> Vector a -> <e> Vector b
+
+
+// Sequence types
+data [a] // Java: List<a>
+data MList a // mutable, Java: List<a>
+data Array a // Java: a[]
+data MArray a // mutable, Java: a[]
+data BoxedArray a // Java: Object[]
+data List a = Nil | Cons a (List a)
+type Vector = Array Double
+
+// Set types
+data Set a // immutable set
+data MSet a // Java: Set<a>
+
+// Map types
+data Map a b // immutable map
+data MMap a b // Java: Map<a>
+
+// Advanced
+data Stream a
+data FingerTree a
+
+// Classes
+class (Additive a a a) => Collection a where
+ empty :: a
+ size :: a -> Integer
+
+class Foldable c v | c -> v where
+ foldl :: (a -> v -> a) -> a -> c -> a
+
+class (Collection c) => Indexable c k v | c -> k v where
+ keysOf :: c -> [k]
+ entriesOf :: c -> [(k,v)]
+ valuesOf :: c _> [v]
+ (!) :: c -> k -> v
+
+// Instances
+
+instance Indexable [a] Integer a
+instance Indexable (Array a) Integer a
+instance Indexable (BoxedArray a) Integer a
+instance Indexable (List a) Integer a
+instance Indexable (Map a b) a b
+
+// ideas:
+- sequence
+- map
+- set
\ No newline at end of file