import "Prelude" as Prelude import "JavaBuiltin" as Java import "Iterator" as Iterator importJava "java.util.List" where data T a contains :: T a -> a -> Boolean size :: T a -> Integer isEmpty :: T a -> Boolean get :: T a -> Integer -> a set :: T a -> Integer -> a -> Maybe a add :: T a -> a -> () addAll :: T a -> [a] -> () remove :: T a -> Integer -> a clear :: T a -> () @private iterator :: T a -> Iterator.T a removeLast :: T a -> Maybe a removeLast l = if isEmpty l then Nothing else Just (remove l (Java.isub (size l) 1)) "Returns the first element of a list" @inline first :: T a -> a first s = get s 0 "Returns the last element of a list" @inline last :: T a -> a last s = get s (Java.isub (size s) 1) @inline iter :: (a -> ()) -> T a -> () iter f s = Iterator.iter f (iterator s) @inline iterB :: (a -> Boolean) -> T a -> Boolean iterB f s = Iterator.iterB f (iterator s) @inline fold :: (a -> b -> a) -> a -> T b -> a fold f init s = Iterator.fold f init (iterator s) importJava "java.util.ArrayList" where @JavaName "" create :: () -> T a @JavaName "" createC :: Integer -> T a fromList :: [a] -> T a fromList l = do result = createC (Prelude.length l) Prelude.iter (\x -> Prelude.ignore (add result x)) l result singleton :: a -> T a singleton v = do result = createC 2 add result v result @inline freeze :: T a -> [a] freeze = Java.unsafeCoerce