overloaded-records-0.4.2.0: Overloaded Records based on current GHC proposal.

Copyright(c) 2016, Peter Trško
LicenseBSD3
Maintainerpeter.trsko@gmail.com
Stabilityexperimental
PortabilityGHC specific language extensions.
Safe HaskellNone
LanguageHaskell2010

Data.OverloadedRecords

Contents

Description

Magic classes for OverloadedRecordFields.

Implementation is based on: https://github.com/adamgundry/records-prototype/blob/master/CoherentPrototype.hs by Adam Gundry under MIT License.

Synopsis

Usage Examples

-- Basic set of language extensions required when defining instances for
-- classes and type families from Data.OverloadedRecords.
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}

-- Following language extensions are required by code like this:

{-# LANGUAGE ConstraintKinds #-}
    -- Codomain of type family R is a Constraint kind.

{-# LANGUAGE FlexibleContexts #-}
    -- Required in example when field type (second argument of :::) is a
    -- specific type instead of a polymorphic type.

{-# LANGUAGE TypeOperators #-}
    -- Required due to usage of ::: type alias.

-- Following language extensions are available only in GHC >=8:

{-# LANGUAGE OverloadedLabels #-}
    -- Enables #label syntactic sugar.

module Example
  where

import Data.Default (Default(def))
    -- Provided by one of these packages:
    --
    -- * data-default
    -- * data-default-extra

import Data.OverloadedRecords
import Data.OverloadedRecords.TH (overloadedRecord)


data V3 a = V3
    { v3x :: !a
    , v3y :: !a
    , v3z :: !a
    }
  deriving Show

-- Following line derives instances for various type classes and type
-- families that are provided by the overloaded-records library.
--
-- However with def (default settings) this is done only for fields that
-- start with type name, data constructor name, or underscore. Prefix is
-- stripped. In example "v3x" is transformed in to "x" and so would be
-- "_x".
overloadedRecord def ''V3

data V4 a = V4
    { v4x :: !a
    , v4y :: !a
    , v4z :: !a
    , v4t :: !a
    }
  deriving Show

overloadedRecord def ''V4

zeroV3
    :: (Num a, R '["x" ::: a, "y" ::: a, "z" ::: a] r)
    => r -> r
zeroV3 = set' #x 0 . set' #y 0 . set' #z 0

The following type signatures for zeroV3 are equivalent:

zeroV3
    :: (Num a, R '["x" ::: a, "y" ::: a, "z" ::: a] r)
    => r -> r
zeroV3
    ::  ( Num a
        , ModifyField' "x" r a
        , ModifyField' "y" r a
        , ModifyField' "z" r a
        )
    => r -> r

One of the biggest features of Overloaded Records is the possibility to define functions that do not depend on concrete data types, but on the "fields" they provide. In example function zeroV3 can be applied to anything that has fields "x", "y", and "z" that reference values of some Num type:

>>> zeroV3 (V3 1 1 1 :: V3 Int)
V3 {_x = 0, _y = 0, _z = 0}
>>> zeroV3 (V4 1 1 1 1 :: V4 Int)
V4 {_x = 0, _y = 0, _z = 0, _t = 1}

Function zeroV3 can be also defined using operators from lens library:

import Control.Lens ((.~), simple)

zeroV3
    :: (Num a, R '["x" ::: a, "y" ::: a, "z" ::: a] r)
    => r -> r
zeroV3 r = r
    & #x . simple .~ 0
    & #y . simple .~ 0
    & #z . simple .~ 0

However, following function would fail to compile:

incV3
    :: (Num a, R '["x" ::: a, "y" ::: a, "z" ::: a] r)
    => r -> r
incV3 r = r
    & #x . simple .~ #x r + 1
    & #y . simple .~ #y r + 1
    & #z . simple .~ #z r + 1

The problem is that we have two IsLabel instances at play. One is for a lens and the other one is for getter. Unfortunatelly these two instances are mutually exclusive in case of polymorphic value. There are multiple solutions to this. Use lenses all the time, e.g. in general by using ^. for getting the value, or in this case by using +~ operator for incrementing. Example of using +~:

import Control.Lens ((.~), (+~), simple)

incV3
    :: (Num a, R '["x" ::: a, "y" ::: a, "z" ::: a] r)
    => r -> r
incV3 r = r
    & #x . simple +~ 1
    & #y . simple +~ 1
    & #z . simple +~ 1

Oveloaded Labels

Overloaded Record Fields

Getter

type family FieldType (l :: Symbol) (s :: *) :: * Source #

When accessing field named l :: Symbol of a record s :: *, then the type of the value in that field is FieldType l s.

Instances

type FieldType "fieldDerivation" DeriveOverloadedRecordsParams Source # 
type FieldType "head" [a] Source # 
type FieldType "head" [a] = Maybe a
type FieldType "tail" [a] Source # 
type FieldType "tail" [a] = Maybe [a]
type FieldType "curry" ((a, b) -> c) Source # 
type FieldType "curry" ((a, b) -> c) = a -> b -> c
type FieldType "curry" ((a, b, c) -> d) Source # 
type FieldType "curry" ((a, b, c) -> d) = a -> b -> c -> d
type FieldType "curry" ((a1, a2, a3, a4) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4) -> r) = a1 -> a2 -> a3 -> a4 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> a14 -> r
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> r) Source # 
type FieldType "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> r) = a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> a14 -> a15 -> r
type FieldType "fst" (a, b) Source # 
type FieldType "fst" (a, b) = a
type FieldType "snd" (a, b) Source # 
type FieldType "snd" (a, b) = b
type FieldType "fst" (a, b, c) Source # 
type FieldType "fst" (a, b, c) = a
type FieldType "snd" (a, b, c) Source # 
type FieldType "snd" (a, b, c) = b
type FieldType "thd" (a, b, c) Source # 
type FieldType "thd" (a, b, c) = c
type FieldType "fst" (a1, a2, a3, a4) Source # 
type FieldType "fst" (a1, a2, a3, a4) = a1
type FieldType "snd" (a1, a2, a3, a4) Source # 
type FieldType "snd" (a1, a2, a3, a4) = a2
type FieldType "thd" (a1, a2, a3, a4) Source # 
type FieldType "thd" (a1, a2, a3, a4) = a3
type FieldType "fst" (a1, a2, a3, a4, a5) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5) = a1
type FieldType "snd" (a1, a2, a3, a4, a5) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5) = a2
type FieldType "thd" (a1, a2, a3, a4, a5) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = a3
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source # 
type FieldType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = a1
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source # 
type FieldType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = a2
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source # 
type FieldType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = a3

class HasField l s a | l s -> a where Source #

Definition of this class is based on: https://phabricator.haskell.org/D1687

Minimal complete definition

getField

Methods

getField :: Proxy# l -> s -> a Source #

Get value of a field.

Instances

HasField "fieldDerivation" DeriveOverloadedRecordsParams FieldDerivation Source # 
HasField "head" [a] (Maybe a) Source #
>>> #head []
Nothing
>>> #head [1, 2, 3]
Just 1

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "head" -> [a] -> Maybe a Source #

HasField "tail" [a] (Maybe [a]) Source #
>>> #tail []
Nothing
>>> #tail [1, 2, 3]
Just [2, 3]

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "tail" -> [a] -> Maybe [a] Source #

HasField "fst" (a, b) a Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a, b) -> a Source #

HasField "snd" (a, b) b Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a, b) -> b Source #

HasField "curry" ((a, b) -> c) (a -> b -> c) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a, b) -> c) -> a -> b -> c Source #

HasField "curry" ((a, b, c) -> d) (a -> b -> c -> d) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a, b, c) -> d) -> a -> b -> c -> d Source #

HasField "curry" ((a1, a2, a3, a4) -> r) (a1 -> a2 -> a3 -> a4 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4) -> r) -> a1 -> a2 -> a3 -> a4 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> r) Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> r) Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> r) Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> r) Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> a14 -> r) Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> a14 -> r Source #

HasField "curry" ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> a14 -> a15 -> r) Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "curry" -> ((a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> r) -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> a11 -> a12 -> a13 -> a14 -> a15 -> r Source #

HasField "fst" (a, b, c) a Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a, b, c) -> a Source #

HasField "snd" (a, b, c) b Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a, b, c) -> b Source #

HasField "thd" (a, b, c) c Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a, b, c) -> c Source #

HasField "fst" (a1, a2, a3, a4) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4) -> a1 Source #

HasField "snd" (a1, a2, a3, a4) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4) -> a2 Source #

HasField "thd" (a1, a2, a3, a4) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a2 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a3 Source #

Since 0.4.0.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a3 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> a3 Source #

HasField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> a1 Source #

HasField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> a2 Source #

HasField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3 Source #

Since 0.4.2.0

Methods

getField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> a3 Source #

data Getter s a Source #

Provides alternative to the "native" IsLabel instance for getter. Since mixing getter instance and lens instance for IsLabel on polymorphic records is not possible, one may want to use Getter as an alternative.

Since 0.4.1.0

Instances

HasField l s a => IsLabel l (Getter s a) Source #

Since 0.4.1.0

Methods

fromLabel :: Proxy# Symbol l -> Getter s a #

Generic1 (Getter s) Source # 

Associated Types

type Rep1 (Getter s :: * -> *) :: * -> * #

Methods

from1 :: Getter s a -> Rep1 (Getter s) a #

to1 :: Rep1 (Getter s) a -> Getter s a #

Generic (Getter s a) Source # 

Associated Types

type Rep (Getter s a) :: * -> * #

Methods

from :: Getter s a -> Rep (Getter s a) x #

to :: Rep (Getter s a) x -> Getter s a #

type Rep1 (Getter s) Source # 
type Rep1 (Getter s) = D1 (MetaData "Getter" "Data.OverloadedRecords" "overloaded-records-0.4.2.0-KMonJjWpg7Q2vzJ7zuavEs" True) (C1 (MetaCons "Getter" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 ((->) s))))
type Rep (Getter s a) Source # 
type Rep (Getter s a) = D1 (MetaData "Getter" "Data.OverloadedRecords" "overloaded-records-0.4.2.0-KMonJjWpg7Q2vzJ7zuavEs" True) (C1 (MetaCons "Getter" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (s -> a))))

get :: Getter s a -> s -> a Source #

Extract a getter function from overloaded label.

Example:

newtype Bar a = Bar {_bar :: a}

overloadedRecord ''Bar
>>> get #bar (Bar False)
False

Since 0.4.1.0

Setter, Modifier and Lens

type family UpdateType (l :: Symbol) (s :: *) (b :: *) :: * Source #

If field l :: Symbol of a record s :: * is set to new value which has type b :: *, then the modified record will have type UpdateType l s b.

Instances

type UpdateType "fieldDerivation" DeriveOverloadedRecordsParams FieldDerivation Source # 
type UpdateType "head" [a] (Maybe a) Source # 
type UpdateType "head" [a] (Maybe a) = [a]
type UpdateType "tail" [a] (Maybe [a]) Source # 
type UpdateType "tail" [a] (Maybe [a]) = [a]
type UpdateType "fst" (a, b) a' Source # 
type UpdateType "fst" (a, b) a' = (a', b)
type UpdateType "snd" (a, b) b' Source # 
type UpdateType "snd" (a, b) b' = (a, b')
type UpdateType "fst" (a, b, c) a' Source # 
type UpdateType "fst" (a, b, c) a' = (a', b, c)
type UpdateType "snd" (a, b, c) b' Source # 
type UpdateType "snd" (a, b, c) b' = (a, b', c)
type UpdateType "thd" (a, b, c) c' Source # 
type UpdateType "thd" (a, b, c) c' = (a, b, c')
type UpdateType "fst" (a1, a2, a3, a4) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4) a1' = (a1', a2, a3, a4)
type UpdateType "snd" (a1, a2, a3, a4) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4) a2' = (a1, a2', a3, a4)
type UpdateType "thd" (a1, a2, a3, a4) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4) a3' = (a1, a3', a3, a4)
type UpdateType "fst" (a1, a2, a3, a4, a5) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5) a1' = (a1', a2, a3, a4, a5)
type UpdateType "snd" (a1, a2, a3, a4, a5) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5) a2' = (a1, a2', a3, a4, a5)
type UpdateType "thd" (a1, a2, a3, a4, a5) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5) a3' = (a1, a2, a3', a4, a5)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6) a1' = (a1', a2, a3, a4, a5, a6)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6) a2' = (a1, a2', a3, a4, a5, a6)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6) a3' = (a1, a2, a3', a4, a5, a6)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7) a1' = (a1', a2, a3, a4, a5, a6, a7)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7) a2' = (a1, a2', a3, a4, a5, a6, a7)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7) a3' = (a1, a2, a3', a4, a5, a6, a7)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8) a1' = (a1', a2, a3, a4, a5, a6, a7, a8)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8) a2' = (a1, a2', a3, a4, a5, a6, a7, a8)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8) a3' = (a1, a2, a3', a4, a5, a6, a7, a8)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1' Source # 
type UpdateType "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1' = (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2' Source # 
type UpdateType "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2' = (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3' Source # 
type UpdateType "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3' = (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)

class HasField l s a => ModifyField l s t a b | l s -> a, l t -> b, l s b -> t, l t a -> s where Source #

Represents overloaded record fields that can be modified, i.e. updated.

forall l a b s t.
  ModifyField l s t a b => a = b <==> s = t

In other words, if field is modified and its type has changed, then the type of the record has to change as well, and vice versa. Functional dependencies enforce this rule.

Since 0.4.0.0

Minimal complete definition

modifyField | setField

Methods

modifyField :: Proxy# l -> (a -> b) -> s -> t Source #

Modify overloaded field l :: Symbol of record s using pure function a -> b, and produce new record t.

setField :: Proxy# l -> s -> b -> t Source #

Set overloaded field l :: Symbol of record s to value of type b, and produce new record t. Please note that there is no mention of the type a, therefore the compiler may not be able to derive it in some cases.

fieldLens :: Functor f => Proxy# l -> (a -> f b) -> s -> f t Source #

Lens for overloaded field l :: Symbol of record s.

Instances

ModifyField "fieldDerivation" DeriveOverloadedRecordsParams DeriveOverloadedRecordsParams FieldDerivation FieldDerivation Source # 
ModifyField "head" [a] [a] (Maybe a) (Maybe a) Source #
>>> set' #head [] Nothing :: [Int]
[]
>>> set' #head [] (Just 1)
[1]
>>> set' #head [1, 2, 3] Nothing
[2, 3]
>>> set' #head [1, 2, 3] (Just 4)
[4, 2, 3]

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "head" -> (Maybe a -> Maybe a) -> [a] -> [a] Source #

setField :: Proxy# Symbol "head" -> [a] -> Maybe a -> [a] Source #

fieldLens :: Functor f => Proxy# Symbol "head" -> (Maybe a -> f (Maybe a)) -> [a] -> f [a] Source #

ModifyField "tail" [a] [a] (Maybe [a]) (Maybe [a]) Source #
>>> set' #tail [] Nothing :: [Int]
[]
>>> set' #tail [] (Just [2, 3])
[2, 3]
>>> set' #tail [1, 2, 3] Nothing
[1]
>>> set' #tail [1, 2, 3] (Just [4, 5, 6])
[1, 4, 5, 6]

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "tail" -> (Maybe [a] -> Maybe [a]) -> [a] -> [a] Source #

setField :: Proxy# Symbol "tail" -> [a] -> Maybe [a] -> [a] Source #

fieldLens :: Functor f => Proxy# Symbol "tail" -> (Maybe [a] -> f (Maybe [a])) -> [a] -> f [a] Source #

ModifyField "fst" (a, b) (a', b) a a' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a -> a') -> (a, b) -> (a', b) Source #

setField :: Proxy# Symbol "fst" -> (a, b) -> a' -> (a', b) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a -> f a') -> (a, b) -> f (a', b) Source #

ModifyField "snd" (a, b) (a, b') b b' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (b -> b') -> (a, b) -> (a, b') Source #

setField :: Proxy# Symbol "snd" -> (a, b) -> b' -> (a, b') Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (b -> f b') -> (a, b) -> f (a, b') Source #

ModifyField "fst" (a, b, c) (a', b, c) a a' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a -> a') -> (a, b, c) -> (a', b, c) Source #

setField :: Proxy# Symbol "fst" -> (a, b, c) -> a' -> (a', b, c) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a -> f a') -> (a, b, c) -> f (a', b, c) Source #

ModifyField "snd" (a, b, c) (a, b', c) b b' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (b -> b') -> (a, b, c) -> (a, b', c) Source #

setField :: Proxy# Symbol "snd" -> (a, b, c) -> b' -> (a, b', c) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (b -> f b') -> (a, b, c) -> f (a, b', c) Source #

ModifyField "thd" (a, b, c) (a, b, c') c c' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (c -> c') -> (a, b, c) -> (a, b, c') Source #

setField :: Proxy# Symbol "thd" -> (a, b, c) -> c' -> (a, b, c') Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (c -> f c') -> (a, b, c) -> f (a, b, c') Source #

ModifyField "fst" (a1, a2, a3, a4) (a1', a2, a3, a4) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4) -> (a1', a2, a3, a4) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4) -> a1' -> (a1', a2, a3, a4) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4) -> f (a1', a2, a3, a4) Source #

ModifyField "snd" (a1, a2, a3, a4) (a1, a2', a3, a4) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4) -> (a1, a2', a3, a4) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4) -> a2' -> (a1, a2', a3, a4) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4) -> f (a1, a2', a3, a4) Source #

ModifyField "thd" (a1, a2, a3, a4) (a1, a2, a3', a4) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4) -> (a1, a2, a3', a4) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4) -> a3' -> (a1, a2, a3', a4) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4) -> f (a1, a2, a3', a4) Source #

ModifyField "fst" (a1, a2, a3, a4, a5) (a1', a2, a3, a4, a5) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5) -> (a1', a2, a3, a4, a5) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5) -> a1' -> (a1', a2, a3, a4, a5) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5) -> f (a1', a2, a3, a4, a5) Source #

ModifyField "snd" (a1, a2, a3, a4, a5) (a1, a2', a3, a4, a5) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5) -> (a1, a2', a3, a4, a5) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5) -> a2' -> (a1, a2', a3, a4, a5) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5) -> f (a1, a2', a3, a4, a5) Source #

ModifyField "thd" (a1, a2, a3, a4, a5) (a1, a2, a3', a4, a5) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5) -> (a1, a2, a3', a4, a5) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5) -> a3' -> (a1, a2, a3', a4, a5) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5) -> f (a1, a2, a3', a4, a5) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6) (a1', a2, a3, a4, a5, a6) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6) -> (a1', a2, a3, a4, a5, a6) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6) -> a1' -> (a1', a2, a3, a4, a5, a6) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6) -> f (a1', a2, a3, a4, a5, a6) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6) (a1, a2', a3, a4, a5, a6) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6) -> (a1, a2', a3, a4, a5, a6) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6) -> a2' -> (a1, a2', a3, a4, a5, a6) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6) -> f (a1, a2', a3, a4, a5, a6) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6) (a1, a2, a3', a4, a5, a6) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6) -> (a1, a2, a3', a4, a5, a6) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6) -> a3' -> (a1, a2, a3', a4, a5, a6) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6) -> f (a1, a2, a3', a4, a5, a6) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7) (a1', a2, a3, a4, a5, a6, a7) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7) -> (a1', a2, a3, a4, a5, a6, a7) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7) -> a1' -> (a1', a2, a3, a4, a5, a6, a7) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7) -> f (a1', a2, a3, a4, a5, a6, a7) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7) (a1, a2', a3, a4, a5, a6, a7) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7) -> (a1, a2', a3, a4, a5, a6, a7) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7) -> a2' -> (a1, a2', a3, a4, a5, a6, a7) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7) -> f (a1, a2', a3, a4, a5, a6, a7) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7) (a1, a2, a3', a4, a5, a6, a7) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7) -> (a1, a2, a3', a4, a5, a6, a7) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7) -> a3' -> (a1, a2, a3', a4, a5, a6, a7) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7) -> f (a1, a2, a3', a4, a5, a6, a7) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8) (a1', a2, a3, a4, a5, a6, a7, a8) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8) -> (a1', a2, a3, a4, a5, a6, a7, a8) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8) -> f (a1', a2, a3, a4, a5, a6, a7, a8) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8) (a1, a2', a3, a4, a5, a6, a7, a8) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8) -> (a1, a2', a3, a4, a5, a6, a7, a8) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8) -> f (a1, a2', a3, a4, a5, a6, a7, a8) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8) (a1, a2, a3', a4, a5, a6, a7, a8) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8) -> (a1, a2, a3', a4, a5, a6, a7, a8) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8) -> f (a1, a2, a3', a4, a5, a6, a7, a8) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9) (a1', a2, a3, a4, a5, a6, a7, a8, a9) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) (a1, a2', a3, a4, a5, a6, a7, a8, a9) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9) (a1, a2, a3', a4, a5, a6, a7, a8, a9) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 a1' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10) a2 a2' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10) a3 a3' Source #

Since 0.4.0.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 a1' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 a2' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11) a3 a3' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 a1' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2 a2' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12) a3 a3' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 a1' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2 a2' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3 a3' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 a1' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2 a2' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3 a3' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) Source #

ModifyField "fst" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 a1' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "fst" -> (a1 -> a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

setField :: Proxy# Symbol "fst" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> a1' -> (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

fieldLens :: Functor f => Proxy# Symbol "fst" -> (a1 -> f a1') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> f (a1', a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

ModifyField "snd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2 a2' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "snd" -> (a2 -> a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

setField :: Proxy# Symbol "snd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> a2' -> (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

fieldLens :: Functor f => Proxy# Symbol "snd" -> (a2 -> f a2') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> f (a1, a2', a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

ModifyField "thd" (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3 a3' Source #

Since 0.4.2.0

Methods

modifyField :: Proxy# Symbol "thd" -> (a3 -> a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

setField :: Proxy# Symbol "thd" -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> a3' -> (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

fieldLens :: Functor f => Proxy# Symbol "thd" -> (a3 -> f a3') -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) -> f (a1, a2, a3', a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) Source #

type family R (ts :: [(Symbol, *)]) (r :: *) :: Constraint where ... Source #

Using this type family provides more compact type signatures for multiple record fields.

data V3 a = V3
    { _x :: a
    , _y :: a
    , _z :: a
    }
  deriving Show

overloadedRecord def ''V3

setV3
    :: R '["x" ::: a, "y" ::: a, "z" ::: a] r
    => a -> a -> a -> r -> r
setV3 x y z = set' #x x . set' #y y . set' #z z
>>> setV3 0 0 0 (V3 1 1 1 :: V3 Int)
V3 {_x = 0, _y = 0, _z = 0}

Since 0.4.0.0

Equations

R '[] r = () 
R ('(l, a) ': ts) r = (ModifyField' l r a, R ts r) 

type family Rs (cs :: [[(Symbol, *)]]) (r :: *) where ... Source #

Union/concatenation of record constraints.

Since 0.4.2.0

Equations

Rs '[] r = R '[] r 
Rs (c ': cs) r = (R c r, Rs cs r) 

type (:::) l a = '(l, a) Source #

This type alias is used for more readable type signatures when using R type family.

Since 0.4.0.0

data Rec ctx r where Source #

Pass polymorphic record as a value along with all necessary instances. By pattern matching on Rec data constructor all those instances come in to scope.

Example:

{-# LANGUAGE GADTs #-}
    -- May be required in addition to the basic set of language extensions.

data V3 a = V3
    { _x :: a
    , _y :: a
    , _z :: a
    }
  deriving Show

overloadedRecord def ''V3

zeroV3 :: Rec '["x" ::: a, "y" ::: a, "z" ::: a] r -> r -> r
zeroV3 (Rec r) = set' #x 0 . set' #y 0 $ set' #z 0 r
>>> zeroV3 (V3 1 1 1 :: V3 Int)
V3 {_x = 0, _y = 0, _z = 0}

Difference between using a constraint, via R type family, and using Rec, is that Rec retains run-time proof that the record has a specified fields. More about this distinction can be found for example in Hasochism: The Pleasure and Pain of Dependently Typed Haskell Programming by Sam Lindley and Conor McBride available on-line https://personal.cis.strath.ac.uk/conor.mcbride/pub/hasochism.pdf.

Since 0.4.1.0

Constructors

Rec :: R ctx r => r -> Rec ctx r 

Instances

Eq1 (Rec ctx) Source # 

Methods

liftEq :: (a -> b -> Bool) -> Rec ctx a -> Rec ctx b -> Bool #

Ord1 (Rec ctx) Source # 

Methods

liftCompare :: (a -> b -> Ordering) -> Rec ctx a -> Rec ctx b -> Ordering #

Show1 (Rec ctx) Source # 

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Rec ctx a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Rec ctx a] -> ShowS #

Eq r => Eq (Rec ctx r) Source # 

Methods

(==) :: Rec ctx r -> Rec ctx r -> Bool #

(/=) :: Rec ctx r -> Rec ctx r -> Bool #

Ord r => Ord (Rec ctx r) Source # 

Methods

compare :: Rec ctx r -> Rec ctx r -> Ordering #

(<) :: Rec ctx r -> Rec ctx r -> Bool #

(<=) :: Rec ctx r -> Rec ctx r -> Bool #

(>) :: Rec ctx r -> Rec ctx r -> Bool #

(>=) :: Rec ctx r -> Rec ctx r -> Bool #

max :: Rec ctx r -> Rec ctx r -> Rec ctx r #

min :: Rec ctx r -> Rec ctx r -> Rec ctx r #

Show r => Show (Rec ctx r) Source # 

Methods

showsPrec :: Int -> Rec ctx r -> ShowS #

show :: Rec ctx r -> String #

showList :: [Rec ctx r] -> ShowS #

type Setting a s t b = Modifier s t a b Source #

Setting is just a form of a Modifier that allows us to specify what was the original type of the value we are changing.

See also Setter, Setter', Modifier, and Modifier'.

Since 0.4.0.0

setting :: Setting a s t b -> Proxy a -> b -> s -> t Source #

Same as set, but allows us to use phantom type to restrict the type of a value before it was changed.

newtype Bar a = Bar {_bar :: a}
  deriving Show

overloadedRecord ''Bar

Now we can use setting to change the value stored in Bar. The type signature in following example is not required, it is what type checker would infer.

setting #bar (Proxy @Int) False :: Bar Int -> Bar Bool

Since 0.4.0.0

type Setter s t b = forall a. Modifier s t a b Source #

Wrapper for a set function, lens naming convention is used for type variables. Its instance for IsLabel forces overloaded label to behave as a setter. We could also define Setter as:

type Setter s t b = forall a. Setting a s t b

Notice that the forall a forbids us from stating what exactly it is, therefore functional dependencies in ModifyField type class have to be able to uniquely identify it. If that is not possible, then we may have to use explicit type signature.

See also Setting, Setter', Modifier, and Modifier'.

Definition changed in 0.4.0.0

set :: Setter s t b -> b -> s -> t Source #

Extract set function from Setter. Using Modifier instance for IsLabel forces overloaded label to behave as a setter.

Usage example:

newtype Bar a = Bar {_bar :: a}
  deriving Show

overloadedRecord ''Bar
>>> set #bar (Nothing :: Maybe Int) (Bar (Just False))
Bar {_bar = Nothing}

newtype Modifier s t a b Source #

Wrapper for a modification function, lens naming convention is used for type variables. Its instance for IsLabel forces overloaded label to behave as a modification function.

See also Modifier', Setting, Setter, and Setter'.

Since 0.4.0.0

Constructors

Modifier ((a -> b) -> s -> t) 

Instances

ModifyField l s t a b => IsLabel l (Modifier s t a b) Source #

Since 0.4.0.0

Methods

fromLabel :: Proxy# Symbol l -> Modifier s t a b #

Generic (Modifier s t a b) Source # 

Associated Types

type Rep (Modifier s t a b) :: * -> * #

Methods

from :: Modifier s t a b -> Rep (Modifier s t a b) x #

to :: Rep (Modifier s t a b) x -> Modifier s t a b #

type Rep (Modifier s t a b) Source # 
type Rep (Modifier s t a b) = D1 (MetaData "Modifier" "Data.OverloadedRecords" "overloaded-records-0.4.2.0-KMonJjWpg7Q2vzJ7zuavEs" True) (C1 (MetaCons "Modifier" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ((a -> b) -> s -> t))))

modify :: Modifier s t a b -> (a -> b) -> s -> t Source #

Modify field value using provided function.

Since 0.4.0.0

newtype WrappedLensLike f s t a b Source #

Since 0.4.2.0

Constructors

WrappedLensLike ((a -> f b) -> s -> f t) 

Instances

(Functor f, ModifyField l s t a b) => IsLabel l (WrappedLensLike f s t a b) Source #

Since 0.4.2.0

Methods

fromLabel :: Proxy# Symbol l -> WrappedLensLike f s t a b #

lns :: WrappedLensLike f s t a b -> (a -> f b) -> s -> f t Source #

Since 0.4.2.0

class ModifyRec# l a cs (Position l a cs) (Position l a cs == 0) => ModifyRec l a cs where Source #

This type class provides functionality as HasField and ModifyField, but for overloaded records wrapped in Rec type.

Methods

getRecField :: Proxy# l -> Rec cs r -> a Source #

modifyRecField :: Proxy# l -> (a -> a) -> Rec cs r -> Rec cs r Source #

setRecField :: Proxy# l -> Rec cs r -> a -> Rec cs r Source #

Instances

ModifyRec# l a cs (Position l a cs) ((==) Nat (Position l a cs) 0) => ModifyRec l a cs Source # 

Methods

getRecField :: Proxy# Symbol l -> Rec cs r -> a Source #

modifyRecField :: Proxy# Symbol l -> (a -> a) -> Rec cs r -> Rec cs r Source #

setRecField :: Proxy# Symbol l -> Rec cs r -> a -> Rec cs r Source #

weakenRec :: Rec ((l ::: a) ': ctx) r -> Rec ctx r Source #

Weakening a record constraint.

strengthenRec :: ModifyField' l r a => Rec ctx r -> Rec ((l ::: a) ': ctx) r Source #

Strengthening a record constraint.

type family Position (l :: Symbol) (a :: *) (cs :: [(Symbol, *)]) :: Nat where ... Source #

Calculate position of (l :: Symbol, a :: *) in type level list (cs :: [(Symbol, *)]). It is used to move through type level list via the type class instance chain until the correct element is reached.

Equations

Position l a ('(l, a) ': cs) = 0 
Position l a (any ': cs) = 1 + Position l a cs 

Simple Setter, Modifier and Lens

type ModifyField' l s a = ModifyField l s s a a Source #

Same as ModifyField, but type-changing assignment is prohibited.

Since 0.4.0.0

fieldLens' :: (Functor f, ModifyField' l s a) => Proxy# l -> (a -> f a) -> s -> f s Source #

Same as modifyField, but the field type can not be changed.

Since 0.4.0.0

modifyField' :: ModifyField' l s a => Proxy# l -> (a -> a) -> s -> s Source #

Same as modifyField, but the field type can not be changed.

Since 0.4.0.0

setField' :: ModifyField' l s a => Proxy# l -> s -> a -> s Source #

Same as setFiend, but the field type can not be changed.

Since 0.4.0.0

type Setter' s a = Modifier' s a Source #

Simple Setter which forbids changing the field type. It can be also defined in terms of Setting:

type Setter' s a = Setting a s s a

See also Setting, Setter, Modifier, and Modifier'.

Definition changed in 0.4.0.0

set' :: Setter' s a -> a -> s -> s Source #

Same as set, but the field type can not be changed.

type Modifier' s a = Modifier s s a a Source #

Simple Modifier which forbids changing the field type.

See also Modifier, Modifier', Setting, Setter, and Setter'.

Since 0.4.0.0

modify' :: Modifier' s a -> (a -> a) -> s -> s Source #

Same as modify, but the field type can not be changed.

Since 0.4.0.0

type WrappedLensLike' f s a = WrappedLensLike f s s a a Source #

Since 0.4.2.0

lns' :: WrappedLensLike' f s a -> (a -> f a) -> s -> f s Source #

Since 0.4.2.0

IsLabel For Getter and Lens

type family FromArrow (a :: *) :: Bool where ... Source #

Returns True if type a :: * is a function.

Equations

FromArrow (x -> y) = True 
FromArrow t = False 

class z ~ FromArrow x => IsFieldAccessor l x y z | l y -> x where Source #

Distinguish between getter and lens.

Minimal complete definition

fieldAccessor

Methods

fieldAccessor :: Proxy# l -> x -> y Source #

Instances

(HasField l s a, (~) Bool (FromArrow s) False) => IsFieldAccessor l s a False Source #

Overloaded getter:

Proxy# l -> r -> a

Methods

fieldAccessor :: Proxy# Symbol l -> s -> a Source #

(Functor f, ModifyField l s t a b) => IsFieldAccessor l (a -> f b) (s -> f t) True Source #

Overloaded lens:

Functor f => Proxy# l -> (a -> f b) -> s -> f t

Methods

fieldAccessor :: Proxy# Symbol l -> (a -> f b) -> s -> f t Source #

Orphan instances

IsFieldAccessor l x y (FromArrow x) => IsLabel l (x -> y) Source # 

Methods

fromLabel :: Proxy# Symbol l -> x -> y #