Lens

Tech > Haskell > ライブラリ

データへアクセスする方法、普通にやるよりかなり簡単に書けるようになる。

タプル

一般的には2タプル程度しか使わないので fst や snd で間に合うのですが、データベースのテーブルをJOINしたりして、取得するデータ構造は果てしないタプルになって出力されてくるので、そういうときにかなり重宝します。

import Control.Lens

main :: IO ()
main = do
  let val = (1, "2", 3) :: (Int, String, Int)
  putStrLn $ show $ (val ^. _1)
  putStrLn $ show $ (val ^. _2)
  putStrLn $ show $ (val ^. _1)
  putStrLn $ show $ (val &_2 .~ "Hello")
  putStrLn $ show val

実行すると

shell > runghc LensTouple.hs
1
"2"
1
(1,"Hello",3)
(1,"2",3)

こんな感じで直撃で取得できます。

データ型

data型を定義する際に、フィールドラベルを **_** (アンダースコア)ではじめておいて、その後 makeLenses という宣言を行うことで利用できるようになります。 makeLenses を利用するには {-# LANGUAGE TemplateHaskell #-} 拡張を有効にする必要があるようです。

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

data Emperor = Emperor
  {
    _version :: Double
  , _name :: String
  , _hobby :: String
  } deriving(Show, Eq)

makeLenses ''Emperor

main :: IO ()
main = do
  let foo = Emperor 2.0 "Yoshida" "盆栽"
  putStrLn $ show(foo^.version)
  putStrLn $ foo^.name
  putStrLn $ foo^.hobby

実行してみると

shell > runghc LensDataType.hs 
2.0
Yoshida
盆栽

という感じでデータの値にアクセス出きるようになる。

Posted on 2021-09-20 15:14:22

はじめまして

お茶の国静岡で、焼酎のお茶割なんか罰当たりで飲んだことはありません、常に一番搾りを嗜む静岡極東のBBQerです、最近まわりのエンジニアの方々がお料理を上手にやっている姿を恨めしそうに横目に見ながら、軟骨ピリ辛チクワを食べています、みなさんよろしく。

Posted

Amazon

tags

家系 日本酒池 広井酒店 やがら やっぱた 刺身 丸干し 鯵 東京マラソン fpm php82 servant thread spawn Rust Oracle Linux 8 microcode firmware linux openzfs zfs gitea 麒麟 真野鶴 金鶴 日本酒 docker oracle pod podman cli virtualbox VirtualBox epub mobi calibre mask lens ワンライナー php 海 redmine Linux Oracle Map OMap omap map 夏 BBQ カテゴリ管理 カテゴリ timestamp date oracle database string 麦焼酎 ダービー process 磨き蒸留 広井酒店、日本酒 芋焼酎 酒 焼酎 ゆるキャン 広井酒店、日本酒池 spring framework java persistent spring session session spring hdbc-odbc persistent-odbc odbc day utctime スィート レマンの森 elm初期化 elm バイク xlr80 esqueleto database xl2tpd strongswan vpn l2tp ipsec 正月 ゲーム grub nginx systemctl portage 豚骨 圧力鍋 yesod-auth-hashdb yesod-auth