All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.folone.package.scala Maven / Gradle / Ivy

The newest version!
package info.folone.scala

import poi._
import scalaz._
import effect.IO
import scala.annotation.tailrec

package object poi extends Instances with Lenses

trait Instances {

  type Result[A] = EitherT[Throwable, IO, A]

  // Typeclass instances

  object equalities {
    implicit val formulaCellEqualInstance: Equal[FormulaCell] = new Equal[FormulaCell] {
      override def equal(f1: FormulaCell, f2: FormulaCell) = f1.index == f2.index && f1.data == f2.data
    }

    implicit val styleCellEqualInstance: Equal[StyledCell] = new Equal[StyledCell] {
      override def equal(s1: StyledCell, s2: StyledCell) =
        s1.index == s2.index && s1.style == s2.style && s1.nestedCell == s2.nestedCell
    }

    implicit val cellEqualInstance: Equal[Cell] = new Equal[Cell] {
      override def equal(s1: Cell, s2: Cell) =
        (s1, s2) match {
          case (s1: StringCell, s2: StringCell) => s1 == s2
          case (n1: NumericCell, n2: NumericCell) => n1 == n2
          case (d1: DateCell, d2: DateCell) => d1 == d2
          case (b1: BooleanCell, b2: BooleanCell) => b1 == b2
          case (f1: FormulaCell, f2: FormulaCell) => Equal[FormulaCell].equal(f1, f2)
          case (s1: StyledCell, s2: StyledCell) => Equal[StyledCell].equal(s1, s2)
          case (_, _) => false
        }
    }
  }

  implicit val cellInstance: Semigroup[Cell] with Order[Cell] with Show[Cell] =
    new Semigroup[Cell] with Order[Cell] with Show[Cell] {
      override def append(f1: Cell, f2: => Cell): Cell = f2
      override def equal(a1: Cell, a2: Cell): Boolean = a1.index == a2.index
      override def show(as: Cell): Cord = Cord(shows(as))
      override def shows(as: Cell): String =
        as match {
          case StringCell(index, data) => "StringCell(" + index + ", \"" + data + "\")"
          case NumericCell(index, data) => "NumericCell(" + index + ", " + data + ")"
          case DateCell(index, data) => "DateCell(" + index + ", " + data + ")"
          case BooleanCell(index, data) => "BooleanCell(" + index + ", " + data + ")"
          case FormulaCell(index, data) => "FormulaCell(" + index + ", \"=" + data + "\")"
          case StyledCell(cell, style) => "StyledCell(" + shows(cell) + ",