IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Isoの使い方

lambda > import Control.Lens
lambda > :t iso
iso :: (Functor f, Profunctor p) => (s1 -> a1) -> (b1 -> t1) -> p a2 (f b2) -> p s2 (f t2)
lambda > let foo = iso (\((a,b),c)->(a,(b,c)) (\(a,(b,c))->((a,b),c)))
lambda > let foo = iso (\((a,b),c)->(a,(b,c))) (\(a,(b,c))->((a,b),c))
lambda > ((1,2),3) ^. foo
(1,(2,3))
lambda > (1,(2,3)) ^. from foo
((1,2),3)
lambda > import qualified Data.ByteString.Lazy as BL
lambda > import qualified Data.ByteString as B
lambda > let bar = iso BL.fromStrict BL.toStrict
lambda > :set -XOverloadedStrings
lambda > ("aaaa" :: B.ByteString) ^. bar
"aaaa"
lambda > :t ("aaaa" :: B.ByteString) ^. bar
("aaaa" :: B.ByteString) ^. bar :: BL.ByteString
lambda > ("bbbb" :: BL.ByteString) ^. from bar
"bbbb"
lambda > :t ("bbbb" :: BL.ByteString) ^. from bar
("bbbb" :: BL.ByteString) ^. from bar :: B.ByteString
lambda >