abstract class AbstractFile extends Iterable[AbstractFile]
This class and its children serve to unify handling of files and directories. These files and directories may or may not have some real counter part within the file system. For example, some file handles reference files within a zip archive or virtual ones that exist only in memory.
Every abstract file has a path (i.e. a full name) and a name (i.e. a short name) and may be backed by some real File. There are two different kinds of abstract files: regular files and directories. Regular files may be read and have a last modification time. Directories may list their content and look for subfiles with a specified name or path and of a specified kind.
The interface does not allow to access the content.
The class symtab.classfile.AbstractFileReader
accesses
bytes, knowing that the character set of classfiles is UTF-8. For
all other cases, the class SourceFile
is used, which honors
global.settings.encoding.value
.
Note: This library is considered experimental and should not be used unless you know what you are doing.
- Alphabetic
- By Inheritance
- AbstractFile
- Iterable
- IterableLike
- Equals
- GenIterable
- GenIterableLike
- Traversable
- GenTraversable
- GenericTraversableTemplate
- TraversableLike
- GenTraversableLike
- Parallelizable
- TraversableOnce
- GenTraversableOnce
- FilterMonadic
- HasNewBuilder
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new AbstractFile()
Type Members
-
type
Self = collection.Iterable[AbstractFile]
- Attributes
- protected[this]
- Definition Classes
- TraversableLike
-
class
WithFilter extends FilterMonadic[A, Repr]
- Definition Classes
- TraversableLike
Abstract Value Members
-
abstract
def
absolute: AbstractFile
The absolute file, if this is a relative file.
-
abstract
def
container: AbstractFile
Returns the containing directory of this abstract file
-
abstract
def
create(): Unit
Create a file on disk, if one does not exist already.
-
abstract
def
delete(): Unit
Delete the underlying file or directory (recursively).
-
abstract
def
file: java.io.File
Returns the underlying File if any and null otherwise.
-
abstract
def
input: InputStream
returns an input stream so the file can be read
-
abstract
def
isDirectory: Boolean
Is this abstract file a directory?
-
abstract
def
iterator: Iterator[AbstractFile]
Returns all abstract subfiles of this abstract directory.
Returns all abstract subfiles of this abstract directory.
- Definition Classes
- AbstractFile → IterableLike → GenIterableLike
-
abstract
def
lastModified: Long
Returns the time that this abstract file was last modified.
-
abstract
def
lookupName(name: String, directory: Boolean): AbstractFile
Returns the abstract file in this abstract directory with the specified name.
Returns the abstract file in this abstract directory with the specified name. If there is no such file, returns
null
. The argumentdirectory
tells whether to look for a directory or a regular file. -
abstract
def
lookupNameUnchecked(name: String, directory: Boolean): AbstractFile
Returns an abstract file with the given name.
Returns an abstract file with the given name. It does not check that it exists.
-
abstract
def
name: String
Returns the name of this abstract file.
-
abstract
def
output: OutputStream
Returns an output stream for writing the file
-
abstract
def
path: String
Returns the path of this abstract file.
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
++[B >: AbstractFile, That](that: GenTraversableOnce[B])(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
++:[B >: AbstractFile, That](that: collection.Traversable[B])(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike
-
def
++:[B >: AbstractFile, That](that: collection.TraversableOnce[B])(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
addString(b: StringBuilder): StringBuilder
- Definition Classes
- TraversableOnce
-
def
addString(b: StringBuilder, sep: String): StringBuilder
- Definition Classes
- TraversableOnce
-
def
addString(b: StringBuilder, start: String, sep: String, end: String): StringBuilder
- Definition Classes
- TraversableOnce
-
def
aggregate[B](z: ⇒ B)(seqop: (B, AbstractFile) ⇒ B, combop: (B, B) ⇒ B): B
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
bufferedOutput: BufferedOutputStream
Returns a buffered output stream for writing the file - defaults to out
-
def
canEqual(that: Any): Boolean
- Definition Classes
- IterableLike → Equals
-
def
canonicalPath: String
Returns the path of this abstract file in a canonical form.
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
collect[B, That](pf: PartialFunction[AbstractFile, B])(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
collectFirst[B](pf: PartialFunction[AbstractFile, B]): Option[B]
- Definition Classes
- TraversableOnce
-
def
companion: GenericCompanion[collection.Iterable]
- Definition Classes
- Iterable → GenIterable → Traversable → GenTraversable → GenericTraversableTemplate
-
def
copyToArray[B >: AbstractFile](xs: Array[B], start: Int, len: Int): Unit
- Definition Classes
- IterableLike → TraversableLike → TraversableOnce → GenTraversableOnce
-
def
copyToArray[B >: AbstractFile](xs: Array[B]): Unit
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
copyToArray[B >: AbstractFile](xs: Array[B], start: Int): Unit
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
copyToBuffer[B >: AbstractFile](dest: Buffer[B]): Unit
- Definition Classes
- TraversableOnce
-
def
count(p: (AbstractFile) ⇒ Boolean): Int
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
drop(n: Int): collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → GenTraversableLike
-
def
dropRight(n: Int): collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike
-
def
dropWhile(p: (AbstractFile) ⇒ Boolean): collection.Iterable[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
exists: Boolean
Does this abstract file denote an existing file?
-
def
exists(p: (AbstractFile) ⇒ Boolean): Boolean
- Definition Classes
- IterableLike → TraversableLike → TraversableOnce → GenTraversableOnce
-
def
fileNamed(name: String): AbstractFile
Get the file in this directory with the given name, creating an empty file if it does not already existing.
-
def
filter(p: (AbstractFile) ⇒ Boolean): collection.Iterable[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
filterNot(p: (AbstractFile) ⇒ Boolean): collection.Iterable[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
find(p: (AbstractFile) ⇒ Boolean): Option[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → TraversableOnce → GenTraversableOnce
-
def
flatMap[B, That](f: (AbstractFile) ⇒ GenTraversableOnce[B])(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike → FilterMonadic
-
def
flatten[B](implicit asTraversable: (AbstractFile) ⇒ GenTraversableOnce[B]): collection.Iterable[B]
- Definition Classes
- GenericTraversableTemplate
-
def
fold[A1 >: AbstractFile](z: A1)(op: (A1, A1) ⇒ A1): A1
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
foldLeft[B](z: B)(op: (B, AbstractFile) ⇒ B): B
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
foldRight[B](z: B)(op: (AbstractFile, B) ⇒ B): B
- Definition Classes
- IterableLike → TraversableOnce → GenTraversableOnce
-
def
forall(p: (AbstractFile) ⇒ Boolean): Boolean
- Definition Classes
- IterableLike → TraversableLike → TraversableOnce → GenTraversableOnce
-
def
foreach[U](f: (AbstractFile) ⇒ U): Unit
- Definition Classes
- IterableLike → TraversableLike → GenTraversableLike → TraversableOnce → GenTraversableOnce → FilterMonadic
-
def
genericBuilder[B]: Builder[B, collection.Iterable[B]]
- Definition Classes
- GenericTraversableTemplate
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
groupBy[K](f: (AbstractFile) ⇒ K): Map[K, collection.Iterable[AbstractFile]]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
grouped(size: Int): collection.Iterator[collection.Iterable[AbstractFile]]
- Definition Classes
- IterableLike
-
def
hasDefiniteSize: Boolean
- Definition Classes
- TraversableLike → TraversableOnce → GenTraversableOnce
-
def
hasExtension(other: String): Boolean
Checks extension case insensitively.
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
head: AbstractFile
- Definition Classes
- IterableLike → TraversableLike → GenTraversableLike
-
def
headOption: Option[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
init: collection.Iterable[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
inits: collection.Iterator[collection.Iterable[AbstractFile]]
- Definition Classes
- TraversableLike
-
def
isClassContainer: Boolean
Does this abstract file represent something which can contain classfiles?
-
def
isEmpty: Boolean
- Definition Classes
- IterableLike → TraversableLike → TraversableOnce → GenTraversableOnce
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
isTraversableAgain: Boolean
- Definition Classes
- TraversableLike → GenTraversableLike → GenTraversableOnce
-
def
isVirtual: Boolean
Does this abstract file correspond to something on-disk?
-
def
last: AbstractFile
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
lastOption: Option[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
lookupPathUnchecked(path: String, directory: Boolean): AbstractFile
Return an abstract file that does not check that
path
denotes an existing file. -
def
map[B, That](f: (AbstractFile) ⇒ B)(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike → FilterMonadic
-
def
max[B >: AbstractFile](implicit cmp: Ordering[B]): AbstractFile
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
maxBy[B](f: (AbstractFile) ⇒ B)(implicit cmp: Ordering[B]): AbstractFile
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
min[B >: AbstractFile](implicit cmp: Ordering[B]): AbstractFile
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
minBy[B](f: (AbstractFile) ⇒ B)(implicit cmp: Ordering[B]): AbstractFile
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
mkString: String
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
mkString(sep: String): String
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
mkString(start: String, sep: String, end: String): String
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
newBuilder: Builder[AbstractFile, collection.Iterable[AbstractFile]]
- Attributes
- protected[this]
- Definition Classes
- GenericTraversableTemplate → HasNewBuilder
-
def
nonEmpty: Boolean
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
par: ParIterable[AbstractFile]
- Definition Classes
- Parallelizable
-
def
parCombiner: Combiner[AbstractFile, ParIterable[AbstractFile]]
- Attributes
- protected[this]
- Definition Classes
- TraversableLike → Parallelizable
-
def
partition(p: (AbstractFile) ⇒ Boolean): (collection.Iterable[AbstractFile], collection.Iterable[AbstractFile])
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
product[B >: AbstractFile](implicit num: Numeric[B]): B
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
reduce[A1 >: AbstractFile](op: (A1, A1) ⇒ A1): A1
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
reduceLeft[B >: AbstractFile](op: (B, AbstractFile) ⇒ B): B
- Definition Classes
- TraversableOnce
-
def
reduceLeftOption[B >: AbstractFile](op: (B, AbstractFile) ⇒ B): Option[B]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
reduceOption[A1 >: AbstractFile](op: (A1, A1) ⇒ A1): Option[A1]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
reduceRight[B >: AbstractFile](op: (AbstractFile, B) ⇒ B): B
- Definition Classes
- IterableLike → TraversableOnce → GenTraversableOnce
-
def
reduceRightOption[B >: AbstractFile](op: (AbstractFile, B) ⇒ B): Option[B]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
repr: collection.Iterable[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
reversed: List[AbstractFile]
- Attributes
- protected[this]
- Definition Classes
- TraversableOnce
-
def
sameElements[B >: AbstractFile](that: GenIterable[B]): Boolean
- Definition Classes
- IterableLike → GenIterableLike
-
def
scan[B >: AbstractFile, That](z: B)(op: (B, B) ⇒ B)(implicit cbf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
scanLeft[B, That](z: B)(op: (B, AbstractFile) ⇒ B)(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
scanRight[B, That](z: B)(op: (AbstractFile, B) ⇒ B)(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], B, That]): That
- Definition Classes
- TraversableLike → GenTraversableLike
- Annotations
- @migration
- Migration
(Changed in version 2.9.0) The behavior of
scanRight
has changed. The previous behavior can be reproduced with scanRight.reverse.
-
def
seq: collection.Iterable[AbstractFile]
- Definition Classes
- Iterable → GenIterable → Traversable → GenTraversable → Parallelizable → TraversableOnce → GenTraversableOnce
-
def
size: Int
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
sizeHintIfCheap: Int
- Attributes
- protected[collection]
- Definition Classes
- GenTraversableOnce
-
def
sizeOption: Option[Int]
size of this file if it is a concrete file.
-
def
slice(from: Int, until: Int): collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → GenTraversableLike
-
def
sliding(size: Int, step: Int): collection.Iterator[collection.Iterable[AbstractFile]]
- Definition Classes
- IterableLike
-
def
sliding(size: Int): collection.Iterator[collection.Iterable[AbstractFile]]
- Definition Classes
- IterableLike
-
def
span(p: (AbstractFile) ⇒ Boolean): (collection.Iterable[AbstractFile], collection.Iterable[AbstractFile])
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
splitAt(n: Int): (collection.Iterable[AbstractFile], collection.Iterable[AbstractFile])
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
stringPrefix: String
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
subdirectoryNamed(name: String): AbstractFile
Get the subdirectory with a given name, creating it if it does not already exist.
-
def
sum[B >: AbstractFile](implicit num: Numeric[B]): B
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
tail: collection.Iterable[AbstractFile]
- Definition Classes
- TraversableLike → GenTraversableLike
-
def
tails: collection.Iterator[collection.Iterable[AbstractFile]]
- Definition Classes
- TraversableLike
-
def
take(n: Int): collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → GenTraversableLike
-
def
takeRight(n: Int): collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike
-
def
takeWhile(p: (AbstractFile) ⇒ Boolean): collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → GenTraversableLike
-
def
thisCollection: collection.Iterable[AbstractFile]
- Attributes
- protected[this]
- Definition Classes
- IterableLike → TraversableLike
-
def
to[Col[_]](implicit cbf: CanBuildFrom[Nothing, AbstractFile, Col[AbstractFile]]): Col[AbstractFile]
- Definition Classes
- TraversableLike → TraversableOnce → GenTraversableOnce
-
def
toArray[B >: AbstractFile](implicit arg0: ClassTag[B]): Array[B]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toBuffer[B >: AbstractFile]: Buffer[B]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toByteArray: Array[Byte]
Returns contents of file (if applicable) in a byte array.
Returns contents of file (if applicable) in a byte array.
- Annotations
- @throws( classOf[IOException] )
-
def
toCharArray: Array[Char]
Returns contents of file (if applicable) in a Char array.
Returns contents of file (if applicable) in a Char array. warning: use
Global.getSourceFile()
to use the proper encoding when converting to the char array.- Annotations
- @throws( classOf[IOException] )
-
def
toCollection(repr: collection.Iterable[AbstractFile]): collection.Iterable[AbstractFile]
- Attributes
- protected[this]
- Definition Classes
- IterableLike → TraversableLike
-
def
toIndexedSeq: collection.immutable.IndexedSeq[AbstractFile]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toIterable: collection.Iterable[AbstractFile]
- Definition Classes
- IterableLike → TraversableOnce → GenTraversableOnce
-
def
toIterator: collection.Iterator[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → GenTraversableOnce
- Annotations
- @deprecatedOverriding( ... , "2.11.0" )
-
def
toList: List[AbstractFile]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toMap[T, U](implicit ev: <:<[AbstractFile, (T, U)]): Map[T, U]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toSeq: collection.Seq[AbstractFile]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toSet[B >: AbstractFile]: Set[B]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
toStream: collection.immutable.Stream[AbstractFile]
- Definition Classes
- IterableLike → TraversableLike → GenTraversableOnce
-
def
toString(): String
Returns the path of this abstract file.
Returns the path of this abstract file.
- Definition Classes
- AbstractFile → TraversableLike → AnyRef → Any
-
def
toTraversable: collection.Traversable[AbstractFile]
- Definition Classes
- TraversableLike → TraversableOnce → GenTraversableOnce
- Annotations
- @deprecatedOverriding( ... , "2.11.0" )
- def toURL: URL
-
def
toVector: Vector[AbstractFile]
- Definition Classes
- TraversableOnce → GenTraversableOnce
-
def
transpose[B](implicit asTraversable: (AbstractFile) ⇒ GenTraversableOnce[B]): collection.Iterable[collection.Iterable[B]]
- Definition Classes
- GenericTraversableTemplate
- Annotations
- @migration
- Migration
(Changed in version 2.9.0)
transpose
throws anIllegalArgumentException
if collections are not uniformly sized.
-
def
underlyingSource: Option[AbstractFile]
An underlying source, if known.
An underlying source, if known. Mostly, a zip/jar file.
-
def
unsupported(msg: String): Nothing
- Attributes
- protected
-
def
unsupported(): Nothing
- Attributes
- protected
-
def
unzip[A1, A2](implicit asPair: (AbstractFile) ⇒ (A1, A2)): (collection.Iterable[A1], collection.Iterable[A2])
- Definition Classes
- GenericTraversableTemplate
-
def
unzip3[A1, A2, A3](implicit asTriple: (AbstractFile) ⇒ (A1, A2, A3)): (collection.Iterable[A1], collection.Iterable[A2], collection.Iterable[A3])
- Definition Classes
- GenericTraversableTemplate
-
def
view(from: Int, until: Int): IterableView[AbstractFile, collection.Iterable[AbstractFile]]
- Definition Classes
- IterableLike → TraversableLike
-
def
view: IterableView[AbstractFile, collection.Iterable[AbstractFile]]
- Definition Classes
- IterableLike → TraversableLike
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
withFilter(p: (AbstractFile) ⇒ Boolean): FilterMonadic[AbstractFile, collection.Iterable[AbstractFile]]
- Definition Classes
- TraversableLike → FilterMonadic
-
def
zip[A1 >: AbstractFile, B, That](that: GenIterable[B])(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], (A1, B), That]): That
- Definition Classes
- IterableLike → GenIterableLike
-
def
zipAll[B, A1 >: AbstractFile, That](that: GenIterable[B], thisElem: A1, thatElem: B)(implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], (A1, B), That]): That
- Definition Classes
- IterableLike → GenIterableLike
-
def
zipWithIndex[A1 >: AbstractFile, That](implicit bf: CanBuildFrom[collection.Iterable[AbstractFile], (A1, Int), That]): That
- Definition Classes
- IterableLike → GenIterableLike
Deprecated Value Members
-
def
/:[B](z: B)(op: (B, AbstractFile) ⇒ B): B
- Definition Classes
- TraversableOnce → GenTraversableOnce
- Annotations
- @deprecated
- Deprecated
(Since version 2.12.10) Use foldLeft instead of /:
-
def
:\[B](z: B)(op: (AbstractFile, B) ⇒ B): B
- Definition Classes
- TraversableOnce → GenTraversableOnce
- Annotations
- @deprecated
- Deprecated
(Since version 2.12.10) Use foldRight instead of :\