Advertisement
ATuin

Listable Error

May 12th, 2012
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.89 KB | None | 0 0
  1. trait BookmarkIterator extends Iterator[PDOutlineItem] {
  2.   var node: Option[PDOutlineItem]
  3.   def hasNext: Boolean = !node.isEmpty
  4.   def next:PDOutlineItem =  {
  5.     val item = node.get
  6.     node = node.get.getNextSibling() match {
  7.       case i:PDOutlineItem => i.some
  8.       case _               => none
  9.     }
  10.     item
  11.   }
  12. }
  13.  
  14. object BookmarkIterator {
  15.   def apply(i:PDOutlineItem) = new BookmarkIterator {
  16.     var node = i.getFirstChild() match {
  17.       case n:PDOutlineItem => n.some
  18.       case _               => none
  19.     }
  20.   }
  21.   def apply(o:PDDocumentOutline) = new BookmarkIterator {
  22.     var node = o.getFirstChild() match {
  23.       case i:PDOutlineItem => i.some
  24.       case _               => none
  25.     }
  26.   }
  27.   def apply(o:PDOutlineNode) = new BookmarkIterator {
  28.     var node = o.getFirstChild() match {
  29.       case i:PDOutlineItem => i.some
  30.       case _               => none
  31.     }
  32.   }
  33.  
  34.   implicit def toOutlineIteratorA(o:PDOutlineNode):BookmarkIterator =
  35.     BookmarkIterator(o)
  36.   implicit def toOutlineIteratorB(i:PDOutlineItem):BookmarkIterator =
  37.     BookmarkIterator(i)
  38.   implicit def toOutlineIteratorC(d:PDDocumentOutline):BookmarkIterator =
  39.     BookmarkIterator(d)
  40. }
  41.  
  42. trait Listable[A] {
  43.   def toList:List[A]
  44. }
  45.  
  46. object ListablePimps {
  47.   implicit def DocumentOutline(d:PDDocumentOutline)(implicit bi:BookmarkIterator) =
  48.     new Listable[PDOutlineItem] {
  49.       def toList = bi.toList
  50.     }
  51.   implicit def OutlineItemListable(o:PDOutlineItem)(implicit bi:BookmarkIterator) =
  52.     new Listable[PDOutlineItem] {
  53.       def toList = bi.toList
  54.     }
  55. }
  56.  
  57. trait BookmarkNode[+A]
  58. case class BookmarkItem[A] (value:A) extends BookmarkNode[A]
  59. case object BookmarkRoot extends BookmarkNode[Nothing]
  60.  
  61. object ToTree {
  62.   import BookmarkIterator._
  63.  
  64.   def toTree[A](a:A)(implicit li:Listable[A]):Tree[BookmarkNode[A]] = {
  65.     def toStream(l:List[A]):Stream[Tree[BookmarkNode[A]]] = l match {
  66.       case Nil => Stream.empty
  67.       case x :: xs => toTree(x)(li) #:: toStream(xs)
  68.     }
  69.     li.toList match {
  70.       case Nil     => BookmarkItem(a).leaf
  71.       case x :: xs => node(BookmarkItem(a), toTree(x) #:: toStream(xs))
  72.     }
  73.   }
  74.  
  75.   def toTree[A](l:List[A])(implicit li:Listable[A]):Tree[BookmarkNode[A]] =
  76.     node(BookmarkRoot, (l ∘ ((a:A) =>
  77.       toTree(a))).foldRight(Stream.empty[Tree[BookmarkNode[A]]])(_ #:: _))
  78. }
  79.  
  80.  
  81. object SPDF extends SPDFPimps {
  82.   import BookmarkIterator._
  83.   import ListablePimps._
  84.   import ToTree._
  85.  
  86.  
  87.   def test(vo:Option[BookmarkIterator]):Option[Tree[BookmarkNode[PDOutlineItem]]] =
  88.     vo >>= ((bi:BookmarkIterator) => toTree(bi.toList))
  89. }
  90.  
  91.  
  92. [error] /home/eof/Projects/Circumflex/literoj/src/main/scala/models/SPDF.scala:184: could not find implicit value for parameter li: com.logikujo.spdf.Listable[org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem]
  93. [error]     vo >>= ((bi:BookmarkIterator) => toTree(bi.toList))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement