私はフィールドのたくさんのデータ型を持っている:関数を代数データ型のフィールドにマップするより簡潔な方法はありますか?
data ManyFields a b c d .. = MF { f1 :: a, f2 :: b, f3 :: c .. }
問題の一つ
それぞれに対してmap
機能を実現回避しながら、どのようにして、各フィールドに機能をマッピングします。 は、例えば、これは非常に退屈で非慣用的になります。
-- | Note I am explicitly constructing ManyField after mapping a function onto the field
-- | This looks bad
mapf1 :: (a -> a1) -> ManyFields a b c .. -> ManyFields a1 b c ..
mapf1 g mf = MF (g . f1 $ mf) (f2 mf) ..
-- | Repeat for each field
mapf2 :: (b -> b1) -> ManyFields a b c .. -> ManyFields a b1 c ...
を私はconstructor . (mapfunction f)
のパターンうち抽象は、定型を削減することを高次機能のいくつかの並べ替えを考えて、より良い解決策はありますか?私は一緒に多くのManyFieldsを圧縮し、各フィールドに任意のアリティの機能をマップする場合、それはいくつかの型クラスのインスタンスである可能性のような二
問題は、このサウンドしていますか?
ユースケース:
(==) `mapFunction` mf1 `pairWiseZipField` mf2
それは一種の私には応用的のように見えますが、やはり私はこのタイプにfmap
を実装するかどうかはわかりません。
私はこれがレンズの優れた紹介だと思っています。私はこの問題に対する最良の解決策だと思います。 – AndrewC