{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
#if __GLASGOW_HASKELL__ >= 802
{-# LANGUAGE ScopedTypeVariables #-}
#endif
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.ProtoLens.Labels where
import GHC.OverloadedLabels (IsLabel (..))
#if __GLASGOW_HASKELL__ >= 802
import GHC.Prim (Proxy#, proxy#)
#endif
import Data.ProtoLens.Field (HasField(..))
instance (HasField s x a, p ~ (a -> f a), q ~ (s -> f s), Functor f,
a ~ b) => IsLabel x (p -> q) where
#if __GLASGOW_HASKELL__ >= 802
fromLabel = fieldOf (proxy# :: Proxy# x)
#else
fromLabel x = fieldOf x
#endif