Skip to content

Instantly share code, notes, and snippets.

@mathhun
mathhun / scalaExercisesCats.scala
Created August 16, 2016 09:08
scalaExercisesCats.scala
import cats._, cats.implicits._
import cats.data.Xor
object Main extends App {
assert(Foldable[List].foldK(List(List(1, 2), List(3, 4, 5))) == List(1,2,3,4,5))
assert(Foldable[List].foldK(List(None, Option("two"), Option("three"))) == Some("two"))
def parseInt(s: String): Option[Int] =
Xor.catchOnly[NumberFormatException](s.toInt).toOption
package cats.bench
import cats.data.Xor
import cats.instances.either._
import cats.syntax.all._
import org.openjdk.jmh.annotations.{ Benchmark, Scope, State }
@State(Scope.Benchmark)
class EitherBench {
val ea: Either[String, Int] = Right(1)
scala> import scalaz.Reader, scalaz.syntax.applicative._
import scalaz.Reader
import scalaz.syntax.applicative._
scala> import scala.reflect.runtime.universe.{ reify, showCode }
import scala.reflect.runtime.universe.{reify, showCode}
scala> type ReaderInt[A] = Reader[Int, A]
defined type alias ReaderInt
@ import scalaz.Reader, scalaz.syntax.applicative._
import scalaz.Reader, scalaz.syntax.applicative._
@ type ReaderInt[A] = Reader[Int, A]
defined type ReaderInt
@ desugar { "foo".point[ReaderInt] }
res31: Desugared = scalaz.syntax.`package`.applicative.ApplicativeIdV[String]("foo").point[$sess.cmd30.ReaderInt](scalaz.Kleisli.kleisliIdMonadReader[Int])
@mathhun
mathhun / Map.scala
Created July 13, 2016 06:55
Map.scala
object Main extends App {
// 似非 package
object syntax { object std { object map {
final class MapOps[K, V](self: Map[K, V]) {
final def connect[W](other: Map[V, W]): Map[K, W] =
self flatMap { case (k, v) => other.get(v) map (k -> _) }
}
implicit def ToMapOps[K, V](m: Map[K, V]): MapOps[K, V] = new MapOps[K, V](m)
} } }
@mathhun
mathhun / FutureAwait.scala
Created July 12, 2016 01:13
FutureAwait.scala
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scala.sys.process._
object Main extends App {
"date +start:%H:%M:%S".!
val fx = Future { println(1); Thread.sleep(6000); "date +x%H:%M:%S".!; 1 }
val fy = Future { println(2); Thread.sleep(4000); "date +y%H:%M:%S".!; 2 }
@mathhun
mathhun / EitherT.scala
Last active July 11, 2016 15:55
EitherT[Future, String, _]
import com.github.nscala_time.time.Imports._
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scalaz._, syntax.either._, std.AllInstances._
object Main extends App {
type EitherFuture[A] = EitherT[Future, String, A]
def date(): String = DateTimeFormat.forPattern("HH:mm:ss").print(new DateTime)
@mathhun
mathhun / Future.scala
Created July 7, 2016 02:11
Future.sequence
import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
object Main extends App {
val fs: List[Future[Int]] = List(
Future { Thread.sleep(2000); println(1); 1 },
Future { Thread.sleep(1000); println(2); 2 },
Future { Thread.sleep(3000); println(3); 3 }
)
@mathhun
mathhun / Ternary.scala
Created July 6, 2016 02:38
Ternary Operator
object Main extends App {
import scalaz.syntax.std.boolean._
val x = (1 > 0) ? "true" | "false"
println(x)
}
@mathhun
mathhun / bench.scala
Created July 6, 2016 01:23
Benchmark Template
import org.scalameter._
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
object Main extends App {
val standardConfig = config(
Key.exec.minWarmupRuns -> 20,
Key.exec.maxWarmupRuns -> 40,
Key.exec.benchRuns -> 10,