Skip to content

Instantly share code, notes, and snippets.

@kkismd
kkismd / option.rb
Last active August 29, 2015 14:23
ScalaのOptionをRubyで説明してみる
#! /bin/env ruby
class Option
end
class Some < Option
include Enumerable
def initialize(a)
@a = a
@kkismd
kkismd / Example.scala
Created June 29, 2015 06:02
Skinny ORMのモデルサンプル
package models
import scalikejdbc._
import skinny.orm.{SkinnyCRUDMapper, SkinnyRecord}
case class Example( id: Long, name: Option[String] = None ) extends SkinnyRecord[Example] {
def skinnyCRUDMapper = Example
}
object Example extends SkinnyCRUDMapper[Example] {
object Example {
import scala.xml._
import scala.util.control.Exception._
def str(node: Node, key: String): Option[String] = (node \\ key).headOption.map(_.text)
def int(node: Node, key: String): Option[Int] = allCatch opt { str(node, key).map(_.toInt).get }
case class Person(name: String, age: Int)
import play.api.libs.functional.Applicative
type ESTR[A] = Either[String,A]
implicit def applicativeEither: Applicative[ESTR] = new Applicative[ESTR] {
override def apply[A, B](mf: ESTR[A => B], ma: ESTR[A]): ESTR[B] = mf.right.flatMap(f => ma.right.map(f))
override def pure[A](a: A): ESTR[A] = Right(a)
kkismd 6月 30 11:08
フォーマットの決まったXMLをパースしてcase classに格納したいとき、
標準のscala.xmlだけで下記のようにやってみてるのですが、
https://gist.github.com/kkismd/87e073fadfa63423308a
このへんを省力化してくれるライブラリはありますか?
JSON -> case classはいろいろ見つかるんですがXMLは探しかたが悪いのか見つかりませんでした。
mather 6月 30 12:08
scalaxbでしょうか。
@kkismd
kkismd / Main$.java
Created July 8, 2015 10:42
パーシャルファンクション
import scala.Function2;
import scala.Predef.;
import scala.Serializable;
import scala.runtime.AbstractFunction2;
import scala.runtime.BoxesRunTime;
public final class Main$
{
public static final MODULE$;
@kkismd
kkismd / command line
Created August 28, 2015 12:09
schema2rst
% schema2rst -c schema2rst.yml -o schema.rst
Traceback (most recent call last):
File "~/.python/2.7.5/site-packages//schema2rst", line 8, in <module>
load_entry_point('schema2rst==0.9.0', 'console_scripts', 'schema2rst')()
File "~/src/Sphinx/schema2rst-0.9.0-py2.7.egg/schema2rst/commands/rst.py", line 51, in main
engine.dispose()
NameError: global name 'engine' is not defined
@kkismd
kkismd / option_to_either.scala
Last active September 14, 2015 10:27
Optionを返すfor式に失敗した場所の情報を埋め込む
val dict = Map(
"AAA" -> "BBB",
"BBB" -> "CCC",
"CCC" -> "DDD"
)
// Optionで返す場合
for {
bbb <- dict.get("AAA")
ccc <- dict.get(bbb)
ddd <- dict.get(ccc)
scala> import org.mindrot.jbcrypt.BCrypt
import org.mindrot.jbcrypt.BCrypt
scala> val pw = "my password"
pw: String = my password
scala> val salt = BCrypt.gensalt()
salt: String = $2a$10$AsMc1b5AYVudBaXWXTYpe.
scala> val encryptedPassword = BCrypt.hashpw(pw, salt)

T => T という型の関数 f, g, h があるとき

(f, g) を受け取って x => f(g(x)) となる関数を返す関数 Aと

(f, g, h) を受け取って x => f(g(h(x))) となる関数を返す関数 Bを考える

[1] AとBを実装せよ

[2] AとBを一般化して、 任意の数の T =&gt; T 型の関数のリスト [f, g, h, ... ] を受け取って