2022-01-01から1年間の記事一覧

レコードデータの一部のフィールドだけテストする

レコードデータ型の一部のフィールドだけテストする方法について、以前から少し悩んでいた。 data Person = Person { id :: Int , name :: Text , age :: Int } deriving (Eq, Ord, Show) registerPerson :: Text -> Int -> IO Person これをテストするため…

久々にHaskellでプログラムを書いて学んだこと (3): コーディングスタイルなど

コードフォーマット 最近はGo言語を書く機会もあり、そこでgo fmtいいなと思ったので、Haskellでもコードフォーマッタを導入することにした。 とりあえずstylish-haskellを使うことにした。Emacsで使うので、設定ファイルは自分のEmacs設定レポジトリに入れ…

久々にHaskellでプログラムを書いて学んだこと (2): 各種ライブラリについて

久々にそこそこのボリュームのHaskellプログラム(OpenID Connect認証つきの簡単なWebアプリ)を書いて学んだことの第2回。 ライブラリ 今回使った外部ライブラリについて。 Web application Web application frameworkとしてはservant-serverを使った。servan…

久々にHaskellでプログラム書いて学んだこと (1): 抽象化レイヤとモナドについて

最近、久々にそこそこのボリュームのHaskellプログラムを書いた。ぶっちゃけ簡単なWebアプリだが、OAuth2(というかOpenID Connect)によるログイン機能を盛り込み、バックグラウンドでAWSのサービスをいくつか扱う。 その開発でいろいろと思うところ、学んだ…

最近見かけたHaskell library: cache

cache: An in-memory key/value store with expiration support cacheはシンプルなin-memory key-value store. 内部実装としてHashMapを使っており、IOやSTMモナドによるinsert, lookupが可能。また、オプションでexpiration timeをセットすることもできる。…

GHC.Generics.Generic typeclassと実装隠蔽とGHC.Records.HasField typeclass

ここ最近、ちょっとHaskellを書く機会があり、Haskellにおける伝統的な課題「レコードフィールド名が広めの名前空間に飛び出るので衝突しまくる問題」をなんとかできないか考えている。 参考: 新しいGHC拡張、NoFieldSelectorsについて - モナドとわたしとコ…