Skip to content

Instantly share code, notes, and snippets.

(ns a)
(defprotocol P (f [p]))
(defrecord A [a] P (f [_] a))

!SLIDE

Markdownをparseする

@halcat0x15a

!SLIDE

Parser combinator

!SLIDE

型推論器とcore.logic

@halcat0x15a

!SLIDE

型推論器で式から型を導出する

@halcat0x15a
halcat0x15a / cont.md
Last active August 29, 2015 13:57
ブログの内容途中まで

限定継続とモナド

限定継続

reset {
  val x = shift { (k: Int => Int) => k(1) }
  println(x)
  x + 2
}

!SLIDE

Interruptible Program with Actor and Trampoline

@halcat0x15a

!SLIDE

デモ

Buffer

Zipperとして抽象化可能

よく使われる実装はGapBuffer

nioで実装済み(パラメータの使い方が悪いのでJavaで新しく書いた方が良い?

Parser

!SLIDE

Typelevel FizzBuzz in Scala

@halcat0x15a

!SLIDE

型レベルプログラミング

Scala Function Variance

Scalaの関数の型の変位指定について.

Invariant

まずは変位指定をしない関数の型について考える.

trait F[A, B] {

型推論ノート

オーバーロードの問題点

一つのシンボルに対して複数の型が付く.

  • 型集合
    • 推論できなくなる
    • 順序に依る
  • バックトラック
package tetriz
import scala.language.postfixOps
import scalaz.{ @@, Tag, Lens, State, Monad }
import scalaz.std.vector
import scalaz.syntax.monad._
case class Point(x: Int, y: Int)