タグ

ブックマーク / eed3si9n.com (17)

  • Scala 3 マクロ入門 · eed3si9n

    2021-09-06 / scala はじめに マクロは楽しくかつ強力なツールだが、使いすぎは害もある。責任を持って適度にマクロを楽しんでほしい。 マクロとは何だろうか? よくある説明はマクロはコードを入力として受け取り、コードを出力するプログラムだとされる。それ自体は正しいが、map {...} のような高階関数や名前渡しパラメータのように一見コードのブロックを渡して回っている機能に親しんでいる Scala プログラマには「コードを入力として受け取る」の意味が一見分かりづらいかもしれない。 以下は、僕が Scala 3 にも移植した Expecty という assersion マクロの用例だ: scala> import com.eed3si9n.expecty.Expecty.assert import com.eed3si9n.expecty.Expecty.assert scala

    yoyama
    yoyama 2021/09/08
  • sbt server with Neovim | eed3si9n

    yoyama
    yoyama 2018/09/21
  • 猫番 — sum 関数

    yoyama
    yoyama 2018/09/08
  • sbt 1.0 ロードマップと beta-1 · eed3si9n

    2017-04-18 / sbt Lightbend の技術系ブログ Tech Hub blog に sbt 1.0 roadmap and beta-1 という記事書いたので、訳しました。 @eed3si9n 著 sbt 1.0 はかれこれ数年間制作中という状態が続いていて、コミュニティーの中には「もう出ないのでは」という懐疑派がいてもおかしくない。そのような懸念は以下の論点によって払拭できると思っている: 来 1.0 に予定していた (AutoPlugin や Dotty サポートのような) 機能はすでにテクノロジー・プレビューとして 0.13 系にてリリースされている。 1.0 に予定されていた機能のうち、より意欲的なものは延期または機能を縮小して 1.0 が早期に実現できるようにした。(キャッシュ化されたコンパイルや Ivy の置き換えなど) sbt 1.0 はベーパーウェアでは

    yoyama
    yoyama 2017/06/23
  • Scala 2.12.0 リリースノート | eed3si9n

    yoyama
    yoyama 2016/11/11
  • Gigahorse — Gigahorse

    Gigahorse Gigahorse は、Scala のための HTTP クライアントで複数のバックエンド実装をサポートする。 内部実装として Apache HTTP HttpAsyncClient か Async Http Client か Square OkHttp か Akka HTTP から選ぶことができる。 セットアップ Apache HTTP HttpAsyncClient を使う場合: libraryDependencies += "com.eed3si9n" %% "gigahorse-apache-http" % "0.7.0" Async HTTP Client を使う場合: libraryDependencies += "com.eed3si9n" %% "gigahorse-asynchttpclient" % "0.7.0" Square OkHttp 3.x

    Gigahorse — Gigahorse
    yoyama
    yoyama 2016/08/02
  • 独習 Scalaz — Free Monad

    この記事は Rúnar の助言に基づいて大幅に手を加えた。古い版は github のソースを参照してほしい。 Free Monad 今日は、Gabriel Gonzalez の Why free monads matter を読みながら Free モナドをみていく: 構文木の質を表す抽象体を考えてみよう。[中略] 僕らの toy 言語には 3つのコマンドしかない: output b -- prints a "b" to the console bell -- rings the computer's bell done -- end of execution 次のコマンドが前のコマンドの子ノードであるような構文木としてあらわしてみる: data Toy b next = Output b next | Bell next | Done とりあえずこれを素直に Scala に翻訳するとこう

  • 独習 Scalaz — Reader

    Reader LYAHFGG: 第11章では、関数を作る型、(->) r も、Functor のインスタンスであることを見ました。 scala> val f = (_: Int) * 5 f: Int => Int = <function1> scala> val g = (_: Int) + 3 g: Int => Int = <function1> scala> (g map f)(8) res22: Int = 55 それから、関数はアプリカティブファンクターであることも見ましたね。これにより、関数が将来返すであろう値を、すでに持っているかのように演算できるようになりました。 scala> val f = ({(_: Int) * 2} |@| {(_: Int) + 10}) {_ + _} warning: there were 1 deprecation warnings; r

    yoyama
    yoyama 2015/12/02
  • 独習 Scalaz — Applicative

    Applicative LYAHFGG: ここまではファンクター値を写すために、もっぱら 1 引数関数を使ってきました。では、2 引数関数でファンクターを写すと何が起こるでしょう? scala> List(1, 2, 3, 4) map {(_: Int) * (_:Int)} <console>:14: error: type mismatch; found : (Int, Int) => Int required: Int => ? List(1, 2, 3, 4) map {(_: Int) * (_:Int)} ^ おっと。これはカリー化する必要がある: scala> List(1, 2, 3, 4) map {(_: Int) * (_:Int)}.curried res11: List[Int => Int] = List(<function1>, <function1>, <

    yoyama
    yoyama 2015/08/19
  • Scala を用いたスクリプティング · eed3si9n

    2014-05-11 / scala 現実問題として正規表現が必要になることがある。いくつかのテキストファイルに変換をかけたりする度に find コマンド、zsh のドキュメントや Perl 関連の StackOverflow の質問を手探りしながら作業することになる。苦労しながら Perl を書くよりは Scala を使いたい。結局、僕個人の慣れの問題だ。 例えば、今手元に 100以上の reStructuredText ファイルがあって、それを markdown に変換する必要がある。まずは pandoc を試してみて、それはそれなりにうまくいった。だけど、中身をよく読んでみるとコードリテラルの多くがちゃんとフォーマットされてないことに気づいた。これは単一のバッククォート (backtick) で囲まれていたり、Interpreted Text を使っているからみたいだ。このテキストを

    yoyama
    yoyama 2015/07/30
  • 独習 Scalaz — Functor

    yoyama
    yoyama 2015/03/14
  • 独習 Scalaz — 独習 Scalaz

    独習 Scalaz これまでいくつのプログラミング言語が羊の衣を着た Lisp に喩えられただろうか? Java は馴染み親しんだ C++ のような文法に GC を持ち込んだ。それまで他にも GC を載せた言語はあったけども、現実的に C++ の代替となりうる言語に GC が載ったことは 1996年には画期的に思われた。やがて時は経ち、人々は自分でメモリ管理をしないことに慣れていった。JavaScriptRuby の両言語もその第一級関数 (first-class function) やブロック構文を持つことから羊の衣を着た Lisp と呼ばれたことがある。S式の同図像性がマクロに適することから Lisp系の言語はまだ面白いと思う。 近年の言語はもう少し新しい関数型言語から概念を借りるようになってきた。型推論やパターンマッチングは ML にさかのぼることができると思う。時が経てば、人

    yoyama
    yoyama 2015/02/17
  • sbt プラグインをテストする · eed3si9n

    2011-09-18 / sbt テストの話をしよう。一度プラグインを書いてしまうと、どうしても長期的なものになってしまう。新しい機能を加え続ける(もしくはバグを直し続ける)ためにはテストを書くのが合理的だ。だけど、ビルドツールのプラグインのテストなんてどうやって書けばいいんだろう?もちろん飛ぶんだよ。 scripted test framework sbt は、scripted test framework というものが付いてきて、ビルドの筋書きをスクリプトに書くことができる。これは、もともと 変更の自動検知や、部分コンパイルなどの複雑な状況下で sbt 自体をテストするために書かれたものだ: ここで、仮に B.scala を削除するが、A.scala には変更を加えないものとする。ここで、再コンパイルすると、A から参照される B が存在しないために、エラーが得られるはずだ。 [中略

    yoyama
    yoyama 2015/02/15
  • 初めての Scala マクロ · eed3si9n

    2012-08-01 Scala マクロの作者 Eugene Burmako さんが管理する scalamacros.org から “Getting started” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 Eugene Burmako 著 2012年7月31日 e.e d3si9n 訳 1. Scala 2.10 を入手する マクロは 2.10.0-M3 以降の Scala で出荷されている。現行のマイルストーンである 2.10.0-M6 などのマクロが入ったコンパイラを直接ダウンロードするか、Maven や sbt などから参照する。好きな方法を使っていい。 訳注: sbt 0.11.3 を使ったプロジェクトgithub に用意したので、 git clone -b ja https://github.com/eed3si9n

    yoyama
    yoyama 2014/10/13
    “連結”
  • 独習 Scalaz — 19日目

    yoyama
    yoyama 2014/02/09
  • Scala と Json で tweed を織る · eed3si9n

    2011-01-03 次々とヤバいコードを紡ぎ出し NY Scala シーンの中心的存在であり続ける @n8han が二年前に書いた “Weaving tweed with Scala and Json” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2009年5月27日 n8han 著 2011年1月2日 eed3si9n 訳 抽出子は、Programming in Scala の 24章にのみ記述されている Scala の秘密機能で、この春の大ヒットだ。今までは皆 case Some(thing) => kerpow(thing) で満足だったのが、今では抽出子を書けなければ #scala freenode にも入れてもらえない。ズルをすれば Scala チャンネルの硬派な常連たちは君のコンピュータをハックして驚くほど馬鹿げたドールハ

    yoyama
    yoyama 2013/07/26
  • 実戦での Scala: Cake パターンを用いた Dependency Injection (DI) · eed3si9n

    2011-04-23 Akka の作者として益々注目を集めている Jonas Bonér が 2008年に書いた “Real-World Scala: Dependency Injection (DI)” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2008年10月6日 Jonas Bonér 著 2011年4月22日 eed3si9n 訳 さて、実戦での Scala シリーズ第二弾の今回は、Scala を用いた Depenency Injection (DI) の実装をみていきたい。Scala は、備わっている言語機構だけを用いても何通りかの DI を実現できる非常に豊かでディープな言語だが、必要に応じて既存の Java DI フレームワークを使うこともできる。 Triental では、一つの戦略に落ち着くまで三つの異なる方法を試した

  • 1