trait File
case TextFile(txt:String)() extends File
case Join(first:File, second:File) extends File
case Folder(files:List[Files,n]) extends File
x match
case TextFile(txt:String)() -> // use txt (a base case)
case Join(first:File, second:File) -> // use first, second, recursively
case Folder(files:List[Files,n]) -> // use files, recursively
trait File
case TextFile(txt:String)() extends File
case Join(first:File, second:File) extends File
case Folder(files:List[Files,n]) extends FileInductive types have
used to express data that can be taken apart
Co-Inductive types have possibly multiple introduction/constructors given as "cases"
Used to express data that can be built up, it can be infinite.
Useful qualities
Default
Adapt