]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/scl/CollectionsPlan.txt
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / CollectionsPlan.txt
diff --git a/bundles/org.simantics.scl.runtime/scl/CollectionsPlan.txt b/bundles/org.simantics.scl.runtime/scl/CollectionsPlan.txt
new file mode 100644 (file)
index 0000000..d531452
--- /dev/null
@@ -0,0 +1,90 @@
+// 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