-- | -- This module provides accessors and modifiers for labeled -- records. As the module name indicates, the functions -- provided by this module are designed to work with records -- under the following conditions: -- -- (1) The @VisibleTypeApplication@ extension is unavailable. -- -- If you are working with labeled records that use 'Identity' -- inner functor for 'TaggedFunctor', you should consider -- using @Data.Vinyl.Optic.Plain.Class.Tagged.Proxy.Identity@ instead. -- module Data.Vinyl.Optic.Tagged.Proxy.Functor where import Data.Tagged.Functor (TaggedFunctor) import Data.Vinyl.Core (Rec) import Data.Vinyl.Optic.Tagged.Class import GHC.Prim (Proxy#, proxy#) lens :: forall k g f rs i v proxy. (Functor g, IxElem k rs i v) => proxy k -> (f v -> g (f v)) -> Rec (TaggedFunctor f) rs -> g (Rec (TaggedFunctor f) rs) lens _ = rlensBy' (proxy# :: Proxy# k) get :: forall k f rs i v proxy. IxElem k rs i v => proxy k -> Rec (TaggedFunctor f) rs -> f v get _ = rgetBy' (proxy# :: Proxy# k) set :: forall k f rs i v proxy. IxElem k rs i v => proxy k -> f v -> Rec (TaggedFunctor f) rs -> Rec (TaggedFunctor f) rs set _ = rsetBy' (proxy# :: Proxy# k) modify :: forall k f rs i v proxy. IxElem k rs i v => proxy k -> (f v -> f v) -> Rec (TaggedFunctor f) rs -> Rec (TaggedFunctor f) rs modify _ = rmodifyBy' (proxy# :: Proxy# k)