package ixee.cryptopals.utils object FunctionUtils { // Because doing (_ f _).tupled confuses the inferencer... def tup[A, B, C](f: (A, B) => C): ((A, B)) => C = f.tupled def iden[A](x: A) = x implicit class Compositor[A, B](f: A => B) { def :|[C](g: B => C): A => C = f.andThen(g) } }