Skip to content

Instantly share code, notes, and snippets.

seraph seraphr

Block or report user

Report or block seraphr

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@seraphr
seraphr / build.sbt
Created Feb 7, 2019
sbt all command
View build.sbt
val dockerPublish = taskKey[Unit]("ダミーのタスク。本来sbt-native-packagerのやつ")
lazy val commonSettings = Def.settings(
dockerPublish := {
import java.time.LocalTime
println(s"${LocalTime.now()} ${name.value} のpublish開始")
// 並列で実行されるのがわかりやすいように、途中sleepする
Thread.sleep(3000)
println(s"${LocalTime.now()} ${name.value} のpublish終了")
}
View implicit.repl
> scala -Xlog-implicits
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_172).
Type in expressions for evaluation. Or try :help.
scala> object A {
| import scala.language.implicitConversions
| implicit val int: Int = 1
| def a[A]: A = ???
| implicit def asString[A](implicit i: Int): Long => A = _ => a[A]
|
@seraphr
seraphr / this.type
Created Nov 13, 2017
scala this.type
View this.type
scala> class Hoge {
| def m1: this.type = this // OK
| def m2: this.type = new Hoge // NG
| }
<console>:9: error: type mismatch;
found : Hoge
required: Hoge.this.type
def m2: this.type = new Hoge // NG
@seraphr
seraphr / fav0100.txt
Last active Jun 7, 2017
なろう小説(ポイント / ブックマーク)順
View fav0100.txt
2017/06/08 06:49
ブックマーク数100以上
連載中
文字数10万文字以上
all novel count = 30060
unique novel count = 12320
filtered novel count = 2759
順位 URL 文字数 ポイント評価 ブックマーク数 (ポイント評価 / ブックマーク数) title keyword
View macro memo
import scala.language.experimental.macros
import scala.reflect.macros.whitebox.Context
/**
*/
object MethodsMacro {
def apply[T]: Seq[String] = macro genMethods[T]
def genMethods[T: c.WeakTypeTag](c: Context): c.Tree = {
View UseUpickle.scala
import upickle.{Js, Api}
trait UseUpickle {
val mJsonApi: upickle.Api
def write[T: mJsonApi.Writer](a: T): String = mJsonApi.write(a)
def writeHoge(aHoge: Hoge): String = {
import mJsonApi._
mJsonApi.write(aHoge)
@seraphr
seraphr / CandyMachine.scala
Created Jul 13, 2015
fp in scala EXERCISE 6.11 CandyMachineの実装
View CandyMachine.scala
case class State[S, +A](run: S => (A, S)) {
def map[B](f: A => B): State[S, B] = State { s0 =>
val (a, s1) = run(s0)
(f(a), s1)
}
def map2[B, C](that: State[S, B])(f: (A, B) => C): State[S, C] = State { s0 =>
val (a, s1) = this.run(s0)
val (b, s2) = that.run(s1)
(f(a, b), s2)
@seraphr
seraphr / State.scala
Last active Aug 29, 2015
fp in scala EXERCISE 6.6 6.7 map2とsequenceの実装
View State.scala
trait RNG {
def nextInt: (Int, RNG)
}
object RNG {
case class Simple(seed: Long) extends RNG {
def nextInt: (Int, RNG) = {
val newSeed = (seed * 0x5DEECE66DL + 0xBL) & 0xFFFFFFFFFFFFL // `&` is bitwise AND. We use the current seed to generate a new seed.
val nextRNG = Simple(newSeed) // The next state, which is an `RNG` instance created from the new seed.
val n = (newSeed >>> 16).toInt // `>>>` is right binary shift with zero fill. The value `n` is our new pseudo-random integer.
@seraphr
seraphr / StreamFuncs.scala
Created Jul 12, 2015
fp in scala EXERCISE 5.11 5.12 5.13 5.14 5.16 unfold関係+scanRight
View StreamFuncs.scala
def unfold[A, S](s: S)(f: S => Option[(A, S)]): Stream[A] = f(s) match {
case Some((a, s1)) => a #:: unfold(s1)(f)
case _ => Stream.empty[A]
}
def fibs: Stream[Int] = 0 #:: 1 #:: unfold((0, 1)) {
case (n0, n1) =>
val n2 = n0 + n1
Option((n2, (n1, n2)))
}
@seraphr
seraphr / StreamFunctionsViaFoldRight.scala
Last active Aug 29, 2015
fp in scala EXERCISE 5.6 foldRightを用いたheadOptionの実装
View StreamFunctionsViaFoldRight.scala
def foldRight[A, B](s: Stream[A])(z: => B)(f: (A, => B) => B): B = s match {
case x #:: xs => f(x, foldRight(xs)(z)(f))
case _ => z
}
def headOptionViaFoldRight[A](s: Stream[A]): Option[A] = foldRight(s)(None: Option[A]) {
(e, acc) => Some(e)
}
def map[A, B](s: Stream[A])(f: A => B): Stream[B] = foldRight(s)(Stream.empty[B]) {
You can’t perform that action at this time.