package cleanframes.instances

import cleanframes.Cleaner
import org.apache.spark.sql.functions.udf

import scala.reflect.runtime.universe.TypeTag

trait HigherOrderKind {

  implicit def stringHigherOrder[A, B[_]](implicit
                                          aTag: TypeTag[A],
                                          bTag: TypeTag[B[A]],
                                          func: String => B[A]): Cleaner[B[A]] =
    Cleaner.materialize { (frame, name, alias) =>
      List(
        udf(func).apply(frame.col(name.get)) as alias.get
      )
    }
}