Skip to content

Instantly share code, notes, and snippets.

import scala.language.higherKinds
import scala.language.existentials
sealed trait Freer[F[_], A] {
def map[B](f: A => B): Freer[F, B] = flatMap(a => Pure(f(a)))
def flatMap[B](f: A => Freer[F, B]): Freer[F, B] =
this match {
case Pure(a) => f(a)
case Impure(fa, g) => Impure(fa, g :+ f)
}
import scala.annotation.tailrec
import scala.language.higherKinds
sealed trait Freer[F[_], A] {
def map[B](f: A => B): Freer[F, B] = flatMap(a => Pure(f(a)))
def flatMap[B](f: A => Freer[F, B]): Freer[F, B] =
this match {
case Pure(a) => f(a)
case Impure(fa, g) => Impure(fa, g :+ f)
}
@lyricallogical
lyricallogical / twitter-autocompletion-disabler.user.js
Created January 24, 2014 12:42
userscript to disable autocompletion on twitter
// ==UserScript==
// @name twitter-autocompletion-disabler
// @namespace lyrical.logical
// @description disable autocompletion on twitter
// @match https://twitter.com/
// ==/UserScript==
(function() {
var form = document.getElementsByClassName("tweet-form")[0];
var menu = form.getElementsByClassName("dropdown-menu typeahead")[0];
@lyricallogical
lyricallogical / exhaustive.diff
Created January 9, 2016 19:45
scalac -Ypatmat-debug exhaustive0.scala と scalac -Ypatmat-debug exhaustive1.scala の diff
138c138
< enum class E sealed, subclasses: List(class Cons, trait L, object SNil)
---
> enum class E sealed, subclasses: List(class Cons, object SNil)
140d139
< checkableType(E.L): E.L
142,143c141
walk :: Var -> Subst -> Var
walk var subst = go var subst
where go :: Var -> List Var -> Maybe Var -> Var
go (Unbound k) stack acc =
case (subst k, acc) of
(Nothing, Nothing) -> Unbound k
(Nothing, Just u) -> Cons u v
(Just v, _) -> go v stack acc
go (Cons h t) stack acc = go h (t :: stack) acc
go v [] Nothing = v
@lyricallogical
lyricallogical / patmat_bug_extractor_with_skolem.scala
Created February 6, 2016 16:13
extractor pattern で skolem 型変数の扱いが意味わからんという話。
import scala.language.higherKinds
sealed trait Base[F[_]] { // all compilation is succeeded if F' kind is *
def a: String
}
case class Ctor[F[_]](a: String) extends Base[F]
abstract class Etor[F[_]] extends Base[F] {
def f(q: Base[F]): String = q match {
case Ctor(fa) => fa // NP
case Etor(fa) => fa // error! why???
new Runnable() {
@Override
public void run() {
// some processes...
}
};
@lyricallogical
lyricallogical / sbt.txt
Created September 21, 2016 04:38
The sbt is a most common dish in japanese.
イベント開催サイトみたいなの使うまでもないのでこれを fork する感じで感じで。
sbt について語りながら sbt を食べる会です。四人くらい集まったら fork で予定日出し合いましょう。
moc aka @lyrical_logical
@lyricallogical
lyricallogical / gist:2470715
Created April 23, 2012 12:49
play2.0 の anorm の問題点をまとめてみる。間違いがあったらコメントしてもらえると助かります。問題がなければ本家に対してまとまった形で報告するつもりです。最終的な目標は anorm の改善です。

play2.0 の anorm の問題点まとめ

実装の詳細が公開されている

Useful 等の公開すべきでないものが公開されている。 型が書かれていない public なメンバも多く、API に対する意識が低い。

不要なものが公開されている

Pk, Id, NoAssigned 等は Magic のために導入された型だが、