{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module GHC.Records.Compat (
HasField (..),
getField,
setField,
) where
class HasField x r a | x r -> a where
hasField :: r -> (a -> r, a)
getField :: forall x r a. (HasField x r a) => r -> a
getField :: forall {k} (x :: k) r a. HasField x r a => r -> a
getField = (a -> r, a) -> a
forall a b. (a, b) -> b
snd ((a -> r, a) -> a) -> (r -> (a -> r, a)) -> r -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (x :: k) r a. HasField x r a => r -> (a -> r, a)
forall {k} (x :: k) r a. HasField x r a => r -> (a -> r, a)
hasField @x
setField :: forall x r a. (HasField x r a) => r -> a -> r
setField :: forall {k} (x :: k) r a. HasField x r a => r -> a -> r
setField = (a -> r, a) -> a -> r
forall a b. (a, b) -> a
fst ((a -> r, a) -> a -> r) -> (r -> (a -> r, a)) -> r -> a -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (x :: k) r a. HasField x r a => r -> (a -> r, a)
forall {k} (x :: k) r a. HasField x r a => r -> (a -> r, a)
hasField @x