State モナドの代わりに Reader モナドを使う

Posted on 木 30 1月 2020 in プログラミング • Tagged with Haskell, GHC, モナド

注意
この記事は公開当時主張に誤りを含んでいたため,大幅に書き直しています.また,公開当時の主張の誤りについても,付録として載せておきました.

Haskell で State モナドはモナドの代表格だ.Haskell 入門者は,多くの場合,状態を伴った計算を State モナドで書くことを習うだろう.しかし,実用上の多くの場面では,State モナドではなく他の選択肢を選んだ方がいい場合がある.一つの選択肢が,Reader モナドと可変参照を使う方法だ.今回は,この手法を使う利点と利用場面について考えていこうと思う …


Continue reading

type family を使って再帰的 ADT をオープンにする

Posted on 日 17 11月 2019 in プログラミング • Tagged with Haskell, GHC, GHC拡張

元ネタは Trees that grow . Haskell では代数的データ型 (ADT) を使ってプログミングに使うデータ構造を定義し,その構造を操作することによりプログラミングを行う. ADT はパターンマッチが容易で,再帰的に定義でき,基本的に閉じた構造になっている.そのため便利な反面,その機能が保守で仇となる場合もある.この問題は古くから知られており,いくつかの解決策も提案されてきた.今回はこのうち,現在 GHC で採用されつつある type family を使った解決方法を紹介する.

なお …


Continue reading

Scala の Map.flatMap の罠

Posted on 火 03 9月 2019 in プログラミング • Tagged with Scala, Collection Library, Map, 標準ライブラリ

Scala のコレクションライブラリは難しい.最近,強くそう思える事案に出くわしたので,そのメモ.なお,使った環境は以下の通り:

Scala のバージョン 2.13.0
Java Runtime のバージョン Java(TM) SE Runtime Environment 1.8.0_131
Java Hotspot …

Continue reading

Python の datetime が難しい

Posted on 水 03 4月 2019 in プログラミング • Tagged with Python, 標準ライブラリ

色々ハマったので,メモをしておく.

aware と naive

Python の datetime モジュールでは,日付情報を表現する date オブジェクト,日中時間を表現する time オブジェクト,そしてその両方の組である datetime オブジェクトが提供されている.そして,実は datetime オブジェクトは2種類ある.この扱いの差が分からなくてまずつまづいてた.

そもそもドキュメントをちゃんと読めという話なんだけど, https …


Continue reading