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 => T 型の関数のリスト [f, g, h, ... ] を受け取って
| #! /bin/env ruby | |
| class Option | |
| end | |
| class Some < Option | |
| include Enumerable | |
| def initialize(a) | |
| @a = a |
| 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でしょうか。 |
| 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$; |
| % 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 |
| 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 => T 型の関数のリスト [f, g, h, ... ] を受け取って