来世から頑張る!!

技術ブログを目指して

scala

Free Monadについて

新規性の無い話というものはなかなか話す場所も無いもので、 どこにも話す機会が見つからなかったのでブログに書いて放置しようかと。 Free MonadのApplicative合成 Free MonadはMonadです。 なのでApplicative合成ができます。 Applicative合成ができても直…

FreeのRunnerを抽象化する

モチベーション 差し替え時の変更忘れなどを防ぐために、Runner部分を抽象化してConstructor Injectionしたい。 Free ここは今回重要ではないので、Functorの要らない単純な実装を用意。 sealed trait Free[F[_], A] { def map[B](f: A => B): Free[F, B] = …

Scalaでの🍣の数え方

最近のおっさんはビールもきちんと数えられないことに驚愕したので、ScalaですがJavaの話をします。 昔と違ってUTF-8の半角カナが3バイトだと信じてくれないおじさんとは出会わなくなってきたなと思ってたのに、世の中そう甘くはなかったようです。 Javaの話…

ScalaでゆるふあにDB接続

この記事はScala Advent Calendar 2015 12日目です。 www.adventar.org 昨日は同じく私による今日から始めるScalaプログラミングでした。 前置き 私はアプリケーションにSQLを自分で書きたい派です。 参考: ScalaでSQLが書きたいんだ!! なので積極的に自分…

今日から始めるScalaプログラミング!!

この記事はScala Advent Calendar 11日目です。 www.adventar.org 昨日はdakatsukaさんによるScalaでLuaスクリプトを動かして遊ぶでした。 Luaでしたね!! ゲーム業界すごいですね! さて、Scala Advent Calendarですが、まだまだ空きがあります。 難しいこ…

ScalaでSQLが書きたいんだ!!

DSLとかOR Mapperとかじゃなくて、SQLが直接書きたいんだ!! 嘘です。タイトル詐欺です。 最近neo4jというグラフ指向データベースがお気に入りでして、 アクセス用のクエリとしてCypherという言語を使います。 基本はHTTP+JSONでRESTにアクセスできるのです…

Optionがモナドだったなんて・・・orz

いやね、Scalaの話なんですけどね、何の話かってね、Option型がOption("a")とかってやって生成できるの。。。 > val a = "abc" a: String = abc > val o = Option(a) o: Option[String] = Some(abc) 今までずっとSome(a)かNoneでしかOption生成できないと思…

型安全なリストを作りたい Part. 1

最終的な目標としては、行列の計算がしたい。 1 2 3 1 4 1*1+2*2+3*3 1*4+2*5+3*6 14 32 ( ) * ( 2 5 ) = ( ) = ( ) 4 5 6 3 6 4*1+5*2+6*3 4*4+5*5+6*6 32 77 こんな感じのやつ。 2行3列の行列は3行2列の行列との積を求めることができて、結果は2行2列の行…

Scala勉強会で発表してきた。

初スライド!!! for の使い方について。 http://kazzna.jp/slide/scala_for/index.html Haskellのモナド系ブログが大体doを理解するならStateだってなってたので便乗です。 勉強会でも口頭で言ったけれど、 flatMapの定義をするなら Monad則 を覚えないと…

Scalaの型推論って難しい

ラムダ計算とかの例によくある チャーチ数 をScalaで試してみる。 原点を表す Zero 、次を表す Succ を定義しておけば足し算とかできるってやつ。 まずは試し書き import Conrtol.Applicative zero f a = a succ n f a = f $ n f a one = succ zero two = su…

ハノイの塔をScalaで解く

ハノイの塔自体は再帰を使えば簡単に解けることは有名で、Googleれば大体すぐ出てくる。 def hanoi(height: Int, from: String, via: String, to: String): Unit = { if (height <= 0) { () } else { // 1. スタート位置にある一番下以外のものをすべて関係…

MonadTって自動でMonadにはならないの???

Monadって難しいって話。 元ネタは xuweiさんのブログ いやね、最近PlayでWebアプリ作ろうと頑張ってるんですよ。 そこでログ出力のために、引数で渡すものを必要に応じてWriterにできればなとか考えてたんですよ。 結果うまくはいかなかったんですが。 本編…