サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
デスク環境を整える
qiita.com/yasuabe2613
最近、現在時刻が関わるプログラムを題材に、高テスタビリティなプログラミング作法を解説した素晴らしい記事が復刻されて、感想などがTLに流れてきたので、自分もそのお題を関数型プログラミングで解いてみた記事。 はじめに 最近、こんな引用ツイートをした。 関数型界隈だと、参照透過な部分とそうでない部分(現在時刻, 乱数, etc.)を分離しといて使うところで合成する作法が尊重されてて、simplicity と composability の結果として、テスタビリティや柔軟性が高くなる(低くならない)ということがよく謳われている。あとで自分もFPでお題解いてみよう。 https://t.co/00TwqXmtC7 — yasuabe (@yasuabe2613) September 30, 2019 元記事は、t-wadaさんの『現在時刻が関わるユニットテストから、テスト容易性設計を学ぶ 』で、めち
Slack のスラッシュコマンドを、API Gateway を介した Lambda 上の Haskell プログラムとして実装するやりかた。 動機 使えるところからちょっとずつ使って、Haskell とか関数型プログラミングとかの適用範囲をじわじわ広げていきたい。 お題 /f-to-c [文字列] と入力すると、文字列部分を華氏温度と解釈して、それを摂氏に変換した数値を返すスラッシュコマンドを定義してみる。[文字列]を指定していなかったり、数値に解釈できないものが入っていたりすると、エラーメッセージが返るようにもする。 実務上の応用としては、例えば、プログラマなら手元の REPL 上でのちょっとした計算や採番で導出できる ID などを、非プログラマのチームメンバーでも Slack で簡単なコマンドを叩けば必要な結果が得られるような簡単な ChatOps がある。もちろん頑張れば外部システム
最近、関数型 Scala 界隈で物議を醸していたプレゼン『The Death of Final Tagless』と、その関連ブログ記事で紹介されていた ZIO Environment について。 ZIO の形 簡略化すると以下のような型になる。 イメージ的には、Cats Effect の IO[A] に環境型 R とエラー型 E を追加した型、あるいは ReaderT[EitherT[IO, E, ?], R, A] を一つの型にしてモナドトランスフォーマーのパフォーマンス劣化を除いたような型。bifunctor IO の BIO[E, A] に R を加えた形になるので trifunctor というワードが出ることもある1。 既存の型に似せた下のような型エイリアスも提供されている。 エイリアス ZIO memo
Aecor という純粋関数型 Event Sourcing ライブラリをざっくり紹介したい。 概要 Aecor は Denis Mikhaylov というロシアの技術者が開発した、Scala の純粋関数型イベントソーシングライブラリ。作者が勤務するオンライン予約会社の Evotor 社では、Arcorベースの数十のサービスが実運用されているという。 ラテン語で海の意味で、あえて五十音で近似すると、ラテン語読みだとアエコル、英語読みだとエイカーみたいな感じ。 純粋関数型DDD に親和性が高い。OOP とは逆に、FP ではデータと振る舞いを分離することが基本となるが1、この辺りは関数型 DDDでも同様。分離の仕方にはいくつかあるが2 3、Aecor 流では Tagless Final で実現する。 Typelevel エコシステムのライブラリ、Cats, Cats Effect, FS2 など
以前の記事で『Microservice Patterns』について要約したが、その中の一つの Saga パターンについて、もう少し詳しく掘り下げてみる。 どういう文脈で Saga パターンを使うか? 各サービスがそれぞれの Bounded Context (整合性の境界)で自前のデータストア(Database per Service)を持っているマイクロサービスアーキテクチャで、複数サービスにまたがるワークフローのデータ整合性を維持したい。 どういう制約のもとで Saga パターンを使うか? 以下のような事情で、分散トランザクションは使いたくない。 モダンでメジャーな NoSQL やメッセージブローカではサポートされていないものが多い。 CAP 定理の認知度が高まって、Consistency を絶対視する風潮が見直され、Availability をより重視するシステムも増えている。 分散ト
今年10月に出版された『Microservices Patterns With examples in Java』という本を読んだ。面白かったので紹介したい。 はじめに 著者は、マイクロサービスパターンのサイト microservice.io を運営している Chris Richardson という人。Cloud Foundry の創設者でもあり、最近では Eventuate というマイクロサービス用のプラットフォームを提供してるらしい。コンサル経験も豊富らしく、本の中でもそこで得られた知見が盛り込まれている。 microservice.io でもマイクロサービスパターンはカタログ化されているが、この本ではサンプル事例で肉付けされて具体的に解説される。関連するトピックも豊富で勉強になる。 ここが面白い 問題領域のカタログとして役立つ 初心者が考えるマイクロサービスのイメージといえば、その人
『Domain Modeling Made Functional』という関数型ドメインモデリングの本を読んでみた。とても面白かったので紹介したい。 はじめに 著者について 『Domain Driven Design with the F# type System』 という面白いスライドで、関数型のテクニックを使って BLOBA1 をエレガントにコーディングする技法を提案していた Scott Wlaschin という人。 おすすめしたい人 特に次のような人は、きっと面白く読めるのではないかと思う。 ふだん純粋関数型言語を使っていて計算機科学的な面での良さは理解しているが、応用範囲としては特定用途のライブラリ(パーサライブラリなど)やミドルウェアなどに留まったままで、従来オブジェクト指向が扱ってきたような、大規模&複雑なビジネスドメインでの活用がイメージしにくい人。 オブジェクト指向ベースの従
Milewski 氏の圏論講座の第1章 Category: The Essence of Compositionを読んでたら、冒頭あたりに次のような一文があった。 But the essence of a category is composition. Or, if you prefer, the essence of composition is a category. 射の合成こそが圏の本質で、またその逆も成り立つという。 Cats だと cats.arrowパッケージのArrowやCategoryといった型クラスで、いろいろなパターンの合成が提供されているらしい。今回はこれを調べてみた。 (Cats バージョンは 2.12の 2.0.0-M1。ソースはここ) Arrow の階層 cats.arrow パッケージ内のArrow関連の継承関係は、下図のようになる。 以降、これらの型クラ
"Functional Programming Patterns in Scala and Clojure"(以下、FPPSC)(PDF)の第3章に、関数型言語のイディオムでオブジェクト指向のパターンを置き換える「パターン」集が載っていて、その中で OO 的な DI の代替技法として Cake パターンが紹介されている。 11個紹介されている「置き換えパターン」の中でも、この Cake は特に、OOP vs FPというより、Scalaならこういう書き方もできるという言語特有イディオムの紹介だけど、これをもう少し関数型っぽく発展させてみたい。以下 Cake Pattern、Minimal Cake Pattern、Reader、Free、Reader + Free、ZIO を順に試してみる。 ※『DI と後出しモナド:Tagless Final / Free Monad』に続く 準備等 使っ
このページを最初にブックマークしてみませんか?
『@yasuabe2613のマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く