読者です 読者をやめる 読者になる 読者になる

Creatable a => a -> IO b

Haskellと数学とちょびっと音楽

ちゅーんさんがreasonable-lensをHackageでリリースしたようです

はいはい、最近色々とアレがアレしてアレな感じのちゅーんさんですがちゃんと生きてます。安心してください。

もともとekmettによってlensというパッケージが公開されています。
これがすごく強力で便利な代物なのですが、いかんせん巨大で依存関係も複雑なので、使うのに気合が必要という問題があったりします。

根本的な仕組みは複雑であれ大きくは無いので、良く使う機能に限定した小型版lensを実装しました。
以下、HackageのURL:

https://hackage.haskell.org/package/reasonable-lens

これは何なの

lensは複雑な代数的データ型へのフィールドアクセスをぐっと使いやすくするためのライブラリです。 TemplateHaskellによるコンパイル時処理で、アクセサと呼ばれる関数を生成する事で、ややこしいフィールド操作をサポートします。

基本的な機能やら使い方については、去年のEkmett勉強会での発表資料を参照してください。

対応機能

  • Lens
    • 型 Lens
  • Setter
    • 型 Setter, Mutator
    • 関数 over, set
    • 演算子 .~, %~, +~, -~, *~, /~, &
    • 演算子 .=, %=, +=, -=, *=, //=
  • Getter
    • 型 Getting, Accessor
    • 関数 foldMapOf, foldOf, use
    • 演算子 ^.
  • Tuple
    • 型クラス Field1, ~ , Field4
    • 関数 _1, ~ , _4
  • TH
    • 関数 makeLenses

課題

絶対欲しい機能

対応するかもしれないやつ

  • Action
  • Iso
  • Prism

その他課題

  • パフォーマンス
    • ekmettの本気チューニングに勝てる気はしないけど可能な限り
  • 可読性向上
    • 内部的な問題だけど、THがカオス
    • 本家だとPrism使ってるんだよねー。どういう事なんだろ。